本文簡要介紹 python 語言中 scipy.stats.kurtosistest
的用法。
用法:
scipy.stats.kurtosistest(a, axis=0, nan_policy='propagate', alternative='two-sided')#
測試數據集是否具有正常峰度。
此函數檢驗零假設,即從中抽取樣本的總體的峰度是正態分布的峰度。
- a: 數組
樣本數據的數組。
- axis: int 或無,可選
計算測試的軸。默認值為 0。如果沒有,則計算整個數組 a。
- nan_policy: {‘propagate’, ‘raise’, ‘omit’},可選
定義當輸入包含 nan 時如何處理。以下選項可用(默認為‘propagate’):
‘propagate’:返回 nan
‘raise’:引發錯誤
‘omit’:執行忽略 nan 值的計算
- alternative: {‘雙麵’,‘less’, ‘greater’},可選
定義備擇假設。可以使用以下選項(默認為“雙麵”):
“雙麵”:樣本分布的峰度與正態分布的峰度不同
‘less’:樣本基礎分布的峰度小於正態分布的峰度
‘greater’:樣本基礎分布的峰度大於正態分布的峰度
- statistic: 浮點數
此測試的計算 z-score。
- pvalue: 浮點數
假設檢驗的 p 值。
參數 ::
返回 ::
注意:
僅對 n>20 有效。該函數使用 [1] 中說明的方法。
參考:
[1] (1,2)參見例如F. J. Anscombe,W. J. Glynn,“正常樣本的峰度統計量 b2 的分布”,Biometrika,第一卷。 70,第 227-234 頁,1983 年。
[2]夏皮羅,S.S. 和威爾克,M.B. (1965)。正態性方差檢驗分析(完整樣本)。生物計量學,52(3/4),591-611。
[3]B. Phipson 和 G. K. Smyth。 “排列 P 值不應該為零:隨機抽取排列時計算精確的 P 值。”遺傳學和分子生物學中的統計應用 9.1 (2010)。
[4]帕納吉奧塔科斯,D.B. (2008)。 p 值在生物醫學研究中的值。開放心血管醫學雜誌,2, 97。
例子:
假設我們希望從測量中推斷醫學研究中成年男性的體重是否不服從正態分布 [2]。重量(磅)記錄在下麵的數組
x
中。>>> import numpy as np >>> x = np.array([148, 154, 158, 160, 161, 162, 166, 170, 182, 195, 236])
[1] 中的峰度測試首先計算基於樣本(過量/Fisher)峰度的統計量。
>>> from scipy import stats >>> res = stats.kurtosistest(x) >>> res.statistic 2.3048235214240873
(測試警告我們的樣本觀測值太少,無法執行測試。我們將在示例末尾返回這一點。)由於正態分布的超額峰度為零(根據定義),因此該統計量的大小往往為對於從正態分布中抽取的樣本來說較低。
該檢驗是通過將統計量的觀測值與零分布進行比較來執行的:零分布是在權重從正態分布中得出的零假設下得出的統計值的分布。
對於此檢驗,非常大樣本的統計量的零分布是標準正態分布。
>>> import matplotlib.pyplot as plt >>> dist = stats.norm() >>> kt_val = np.linspace(-5, 5, 100) >>> pdf = dist.pdf(kt_val) >>> fig, ax = plt.subplots(figsize=(8, 5)) >>> def kt_plot(ax): # we'll re-use this ... ax.plot(kt_val, pdf) ... ax.set_title("Kurtosis Test Null Distribution") ... ax.set_xlabel("statistic") ... ax.set_ylabel("probability density") >>> kt_plot(ax) >>> plt.show()
比較通過 p 值進行量化:零分布中比統計觀察值極端或更極端的值的比例。在統計量為正的雙邊測試中,大於觀察到的統計量的零分布元素和小於觀察到的統計量的負值的零分布元素均被視為 “more extreme”。
>>> fig, ax = plt.subplots(figsize=(8, 5)) >>> kt_plot(ax) >>> pvalue = dist.cdf(-res.statistic) + dist.sf(res.statistic) >>> annotation = (f'p-value={pvalue:.3f}\n(shaded area)') >>> props = dict(facecolor='black', width=1, headwidth=5, headlength=8) >>> _ = ax.annotate(annotation, (3, 0.005), (3.25, 0.02), arrowprops=props) >>> i = kt_val >= res.statistic >>> ax.fill_between(kt_val[i], y1=0, y2=pdf[i], color='C0') >>> i = kt_val <= -res.statistic >>> ax.fill_between(kt_val[i], y1=0, y2=pdf[i], color='C0') >>> ax.set_xlim(-5, 5) >>> ax.set_ylim(0, 0.1) >>> plt.show()
>>> res.pvalue 0.0211764592113868
如果 p 值為 “small” - 也就是說,如果從正態分布總體中采樣數據產生統計數據的極值的概率較低 - 這可以作為反對零假設的證據另一種選擇:權重不是從正態分布中得出的。注意:
反之則不成立;也就是說,檢驗不用於為原假設提供證據。
將被視為 “small” 的值的閾值是在分析數據之前應做出的選擇 [3],同時考慮誤報(錯誤地拒絕原假設)和漏報(未能拒絕假設)的風險。錯誤的原假設)。
請注意,標準正態分布提供了零分布的漸近近似;它僅對於具有許多觀測值的樣本是準確的。這就是我們在示例開始時收到警告的原因;我們的樣本很小。在這種情況下,
scipy.stats.monte_carlo_test
可以提供更準確的(盡管是隨機的)精確 p 值的近似值。>>> def statistic(x, axis): ... # get just the skewtest statistic; ignore the p-value ... return stats.kurtosistest(x, axis=axis).statistic >>> res = stats.monte_carlo_test(x, stats.norm.rvs, statistic) >>> fig, ax = plt.subplots(figsize=(8, 5)) >>> kt_plot(ax) >>> ax.hist(res.null_distribution, np.linspace(-5, 5, 50), ... density=True) >>> ax.legend(['aymptotic approximation\n(many observations)', ... 'Monte Carlo approximation\n(11 observations)']) >>> plt.show()
>>> res.pvalue 0.0272 # may vary
此外,盡管具有隨機性,以這種方式計算的 p 值可用於精確控製原假設的錯誤拒絕率 [4]。
相關用法
- Python SciPy stats.kurtosis用法及代碼示例
- Python SciPy stats.kruskal用法及代碼示例
- Python SciPy stats.kappa3用法及代碼示例
- Python SciPy stats.kappa4用法及代碼示例
- Python SciPy stats.kstwobign用法及代碼示例
- Python SciPy stats.kstest用法及代碼示例
- Python SciPy stats.kstwo用法及代碼示例
- Python SciPy stats.kstat用法及代碼示例
- Python SciPy stats.ksone用法及代碼示例
- Python SciPy stats.ks_2samp用法及代碼示例
- Python SciPy stats.kendalltau用法及代碼示例
- Python SciPy stats.ks_1samp用法及代碼示例
- Python SciPy stats.anderson用法及代碼示例
- Python SciPy stats.iqr用法及代碼示例
- Python SciPy stats.genpareto用法及代碼示例
- Python SciPy stats.skewnorm用法及代碼示例
- Python SciPy stats.cosine用法及代碼示例
- Python SciPy stats.norminvgauss用法及代碼示例
- Python SciPy stats.directional_stats用法及代碼示例
- Python SciPy stats.invwishart用法及代碼示例
- Python SciPy stats.bartlett用法及代碼示例
- Python SciPy stats.levy_stable用法及代碼示例
- Python SciPy stats.page_trend_test用法及代碼示例
- Python SciPy stats.itemfreq用法及代碼示例
- Python SciPy stats.exponpow用法及代碼示例
注:本文由純淨天空篩選整理自scipy.org大神的英文原創作品 scipy.stats.kurtosistest。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。