當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python dask.array.stats.ttest_ind用法及代碼示例


用法:

dask.array.stats.ttest_ind(a, b, axis=0, equal_var=True)

計算兩個獨立分數樣本的平均值的T-test。

此文檔字符串是從 scipy.stats ttest_ind 複製的。

可能存在與 Dask 版本的一些不一致之處。

這是一個 two-sided 檢驗,用於零假設,即 2 個獨立樣本具有相同的平均(預期)值。此測試假定默認情況下總體具有相同的方差。

參數

a, barray_like

數組必須具有相同的形狀,除了對應於axis(第一個,默認情況下)的維度。

axisint 或無,可選

計算測試的軸。如果沒有,則計算整個數組 ab

equal_var布爾型,可選

如果為 True(默認),則執行假設總體方差相等的標準獨立 2 樣本檢驗 [1] 。如果為 False,請執行 Welch 的 t-test,它不假設人口方差相等 [2]

nan_policy{‘propagate’, ‘raise’, ‘omit’},可選(Dask 不支持)

定義當輸入包含 nan 時如何處理。以下選項可用(默認為‘propagate’):

  • ‘propagate’:返回 nan

  • ‘raise’:引發錯誤

  • ‘omit’:執行忽略 nan 值的計算

‘omit’ 選項當前不可用於置換檢驗或one-sided 漸近檢驗。

permutations非負 int np.inf 或無(默認),可選(在 Dask 中不支持)

如果為 0 或無(默認值),則使用 t 分布計算 p-values。否則,permutations 是隨機排列的數量,將用於使用排列測試估計 p-values。如果 permutations 等於或超過合並數據的不同分區的數量,則執行精確測試(即每個不同的分區僅使用一次)。有關詳細信息,請參閱注釋。

random_state{無,int numpy.random.Generator,(Dask 不支持)

numpy.random.RandomState },可選

如果 seed 為 None (或 np.random ),則使用 numpy.random.RandomState 單例。如果 seed 是 int ,則使用新的 RandomState 實例,並以 seed 為種子。如果 seed 已經是 GeneratorRandomState 實例,則使用該實例。

用於生成排列的偽隨機數生成器狀態(僅在 permutations 不是 None 時使用)。

alternative{‘two-sided’, ‘less’, ‘greater’},可選(Dask 不支持)

定義備擇假設。以下選項可用(默認為“two-sided”):

  • ‘two-sided’

  • ‘less’:one-sided

  • ‘greater’:one-sided

trim浮點數,可選(在 Dask 中不支持)

如果非零,則執行修剪(Yuen's)t-test。定義要從輸入樣本的每一端修剪的元素比例。如果為 0(默認值),則不會從任一側修剪任何元素。每個尾部的修剪元素的數量是修剪的底乘以元素的數量。有效範圍為 [0, .5)。

返回

statistic浮點數或數組

計算出來的t-statistic。

pvalue浮點數或數組

two-tailed p-value。

注意

假設我們觀察到兩個獨立的樣本,例如花瓣長度,我們正在考慮這兩個樣本是來自同一種群(例如,同一種類的花或具有相似花瓣特征的兩個物種)還是兩個不同的種群。

t-test 量化了兩個樣本的算術平均值之間的差異。 p-value 量化觀察到或更多極值的概率,假設原假設是真實的,即樣本來自具有相同總體均值的總體。 p-value 大於所選閾值(例如 5% 或 1%)表示我們的觀察不太可能是偶然發生的。因此,我們不拒絕相等總體均值的原假設。如果 p-value 小於我們的閾值,那麽我們就有證據反對相等總體均值的原假設。

默認情況下,p-value 是通過將觀測數據的 t-statistic 與理論 t 分布進行比較來確定的。當 1 < permutations < binom(n, k) 時,其中

  • ka 中的觀察數,
  • nab 中的觀察總數,並且
  • binom(n, k) 是二項式係數( n 選擇 k ),

數據被匯集(連接),隨機分配到組 ab ,並計算 t-statistic。該過程重複執行(permutation次),生成零假設下t-statistic的分布,並將觀測數據的t-statistic與該分布進行比較以確定p-value。當 permutations >= binom(n, k) 時,將執行精確測試:數據以每種不同的方式在組之間僅分區一次。

置換檢驗的計算成本可能很高,並且不一定比分析檢驗更準確,但它並未對基礎分布的形狀做出強有力的假設。

修整的使用通常稱為修整t-test。有時稱為 Yuen 的 t-test,這是 Welch 的 t-test 的擴展,不同之處在於在計算方差時使用 Winsorized 均值,在計算統計量時使用修剪後的樣本量。如果基礎分布是 long-tailed 或被異常值 [4] 汙染,則建議進行修剪。

參考

1

https://en.wikipedia.org/wiki/T-test#Independent_two-sample_t-test

2

https://en.wikipedia.org/wiki/Welch%27s_t-test

3

http://en.wikipedia.org/wiki/Resampling_%28statistics%29

4

Yuen, Karen K. “Two-Sample 為不平等的人口差異修剪 t。”生物計量學,第一卷。 61,沒有。 1,1974 年,第 165-170 頁。 JSTOR,www.jstor org/stable/2334299。於 2021 年 3 月 30 日訪問。

5

Yuen、Karen K. 和 W. J. Dixon。 “Two-Sample Trimmed t 的近似行為和性能。”生物計量學,第一卷。 60,沒有。 2,1973 年,第 369-374 頁。 JSTOR,www.jstor org/stable/2334550。於 2021 年 3 月 30 日訪問。

例子

>>> from scipy import stats  
>>> rng = np.random.default_rng()

用相同方法的樣本進行測試:

>>> rvs1 = stats.norm.rvs(loc=5, scale=10, size=500, random_state=rng)  
>>> rvs2 = stats.norm.rvs(loc=5, scale=10, size=500, random_state=rng)  
>>> stats.ttest_ind(rvs1, rvs2)  
Ttest_indResult(statistic=-0.4390847099199348, pvalue=0.6606952038870015)
>>> stats.ttest_ind(rvs1, rvs2, equal_var=False)  
Ttest_indResult(statistic=-0.4390847099199348, pvalue=0.6606952553131064)

ttest_ind 低估了不等方差的 p:

>>> rvs3 = stats.norm.rvs(loc=5, scale=20, size=500, random_state=rng)  
>>> stats.ttest_ind(rvs1, rvs3)  
Ttest_indResult(statistic=-1.6370984482905417, pvalue=0.1019251574705033)
>>> stats.ttest_ind(rvs1, rvs3, equal_var=False)  
Ttest_indResult(statistic=-1.637098448290542, pvalue=0.10202110497954867)

n1 != n2 時,等方差 t-statistic 不再等於不等方差 t-statistic:

>>> rvs4 = stats.norm.rvs(loc=5, scale=20, size=100, random_state=rng)  
>>> stats.ttest_ind(rvs1, rvs4)  
Ttest_indResult(statistic=-1.9481646859513422, pvalue=0.05186270935842703)
>>> stats.ttest_ind(rvs1, rvs4, equal_var=False)  
Ttest_indResult(statistic=-1.3146566100751664, pvalue=0.1913495266513811)

T-test 具有不同的均值、方差和 n:

>>> rvs5 = stats.norm.rvs(loc=8, scale=20, size=100, random_state=rng)  
>>> stats.ttest_ind(rvs1, rvs5)  
Ttest_indResult(statistic=-2.8415950600298774, pvalue=0.0046418707568707885)
>>> stats.ttest_ind(rvs1, rvs5, equal_var=False)  
Ttest_indResult(statistic=-1.8686598649188084, pvalue=0.06434714193919686)

在執行置換測試時,更多的置換通常會產生更準確的結果。使用np.random.Generator 來確保重現性:

>>> stats.ttest_ind(rvs1, rvs5, permutations=10000,  
...                 random_state=rng)
Ttest_indResult(statistic=-2.8415950600298774, pvalue=0.0052)

取這兩個樣本,其中一個有一個極端的尾巴。

>>> a = (56, 128.6, 12, 123.8, 64.34, 78, 763.3)  
>>> b = (1.1, 2.9, 4.2)

使用 trim 關鍵字來執行修剪 (Yuen) t-test。例如,使用 20% 的修剪 trim=.2 ,測試將減少來自樣本 a 的每個尾部的一個 (np.floor(trim*len(a))) 元素的影響。它將對樣本 b 沒有影響,因為 np.floor(trim*len(b)) 為 0。

>>> stats.ttest_ind(a, b, trim=.2)  
Ttest_indResult(statistic=3.4463884028073513,
                pvalue=0.01369338726499547)

相關用法


注:本文由純淨天空篩選整理自dask.org大神的英文原創作品 dask.array.stats.ttest_ind。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。