本文簡要介紹 python 語言中 scipy.stats.ttest_ind
的用法。
用法:
scipy.stats.ttest_ind(a, b, axis=0, equal_var=True, nan_policy='propagate', permutations=None, random_state=None, alternative='two-sided', trim=0, *, keepdims=False)#
計算兩個獨立分數樣本的平均值的T-test。
這是對 2 個獨立樣本具有相同平均(預期)值的零假設的檢驗。此測試假定默認情況下總體具有相同的方差。
- a, b: array_like
數組必須具有相同的形狀,除了對應於軸的維度(默認情況下為第一個)。
- axis: int 或無,默認值:0
如果是 int,則計算統計量的輸入軸。輸入的每個axis-slice(例如行)的統計信息將出現在輸出的相應元素中。如果
None
,輸入將在計算統計數據之前被分解。- equal_var: 布爾型,可選
如果為 True(默認),則執行假設總體方差相等的標準獨立 2 樣本檢驗 [1]。如果為 False,請執行 Welch 的 t-test,它不假定人口方差相等 [2]。
- nan_policy: {‘propagate’, ‘omit’, ‘raise’}
定義如何處理輸入 NaN。
propagate
:如果計算統計數據的軸切片(例如行)中存在NaN,則輸出的相應條目將為 NaN。omit
: 計算時將省略NaNs。如果計算統計數據的軸切片中剩餘的數據不足,則輸出的相應條目將為 NaN。raise
:如果存在 NaN,則會引發ValueError
。
- permutations: 非負 int、np.inf 或 None(默認),可選
如果為 0 或無(默認),則使用 t 分布計算 p 值。否則,排列是將用於使用排列檢驗估計 p 值的隨機排列數。如果排列等於或超過合並數據的不同分區的數量,則改為執行精確測試(即每個不同分區僅使用一次)。詳細信息請參見注釋。
- random_state: {無,整數,
numpy.random.Generator
, numpy.random.RandomState
}, optional如果種子是無(或np.random), 這
numpy.random.RandomState
使用單例。如果種子是一個 int,一個新的RandomState
使用實例,播種種子.如果種子已經是一個Generator
或者RandomState
實例然後使用該實例。用於生成排列的偽隨機數生成器狀態(僅在排列不是 None 時使用)。
- alternative: {‘雙麵’,‘less’, ‘greater’},可選
定義備擇假設。可以使用以下選項(默認為“雙麵”):
“雙麵”:樣本的分布均值不相等。
‘less’:第一個樣本的分布平均值小於第二個樣本的分布平均值。
‘greater’:第一個樣本的分布平均值大於第二個樣本的分布平均值。
- trim: 浮點數,可選
如果非零,則執行修剪(Yuen's)t-test。定義要從輸入樣本的每一端修剪的元素比例。如果為 0(默認值),則不會從任一側修剪任何元素。每個尾部的修剪元素的數量是修剪的底乘以元素的數量。有效範圍為 [0, .5)。
- keepdims: 布爾值,默認值:假
如果將其設置為 True,則縮小的軸將作為尺寸為 1 的尺寸留在結果中。使用此選項,結果將針對輸入數組正確廣播。
- result:
TtestResult
具有以下屬性的對象:
- 統計 浮點數或 ndarray
t-statistic。
- p值 浮點數或 ndarray
與給定替代方案相關的 p 值。
- df 浮點數或 ndarray
t-statistic 計算中使用的自由度數。對於排列t-test,這始終是NaN。
該對象還具有以下方法:
- confidence_interval(confidence_level=0.95)
計算給定置信水平下總體均值差異的置信區間。置信區間在
namedtuple
中返回,其中包含字段low
和high
。當執行排列t-test時,不計算置信區間,並且字段low
和high
包含NaN。
- result:
參數 ::
返回 ::
注意:
假設我們觀察到兩個獨立的樣本,例如花瓣長度,我們正在考慮這兩個樣本是來自同一種群(例如,同一種類的花或具有相似花瓣特征的兩個物種)還是兩個不同的種群。
t-test 量化兩個樣本算術平均值之間的差異。 p 值量化觀察到一個或多個極值的概率,假設零假設(樣本是從具有相同總體均值的總體中抽取)為真。 p 值大於所選閾值(例如 5% 或 1%)表明我們的觀察結果不太可能是偶然發生的。因此,我們不拒絕總體均值相等的原假設。如果 p 值小於我們的閾值,那麽我們就有證據反對平等總體均值的原假設。
默認情況下,p 值是通過將觀測數據的 t-statistic 與理論 t 分布進行比較來確定的。當
1 < permutations < binom(n, k)
時,其中k
是觀察的數量a,n
是觀察的總數a和b, 和binom(n, k)
是二項式係數(n
選擇k
),
數據被匯集(連接),隨機分配到任一組a或者b,並計算t-statistic。此過程重複執行(排列次),生成原假設下 t-statistic 的分布,並將觀測數據的 t-statistic 與該分布進行比較以確定 p 值。具體來說,報告的 p 值是 “achieved significance level” (ASL),如 4.4 中定義[3]。請注意,還有其他使用隨機排列檢驗來估計 p 值的方法;對於其他選項,請參閱更一般的scipy.stats.permutation_test.
當
permutations >= binom(n, k)
時,將執行精確測試:數據以每種不同的方式在組之間僅分區一次。置換檢驗的計算成本可能很高,並且不一定比分析檢驗更準確,但它並未對基礎分布的形狀做出強有力的假設。
使用修剪通常稱為修剪t-test。有時稱為 Yuen 的 t-test,它是 Welch 的 t-test 的擴展,不同之處在於在計算方差時使用縮尾均值,在計算統計量時使用修剪樣本量。如果基礎分布是長尾的或被異常值汙染的,建議進行修剪 [4]。
統計量計算為
(np.mean(a) - np.mean(b))/se
,其中se
是標準誤。因此,當樣本均值為a大於樣本均值b當樣本均值為a小於樣本均值b.從 SciPy 1.9 開始,
np.matrix
輸入(不建議用於新代碼)在執行計算之前轉換為np.ndarray
。在這種情況下,輸出將是標量或適當形狀的np.ndarray
而不是 2Dnp.matrix
。同樣,雖然屏蔽數組的屏蔽元素被忽略,但輸出將是標量或np.ndarray
而不是帶有mask=False
的屏蔽數組。參考:
[3]埃夫隆和 T. Hastie。計算機時代統計推斷。 (2016 年)。
[4]Yuen, Karen K.“針對不平等總體方差的兩個樣本修剪 t”。生物計量學,卷。 61,沒有。 1,1974 年,第 165-170 頁。 JSTOR,www.jstor.org/stable/2334299。訪問日期:2021 年 3 月 30 日。
[5]袁凱倫 (Karen K.) 和 W. J. 迪克森 (W. J. Dixon)。 “兩個樣本修剪 t 的近似行為和性能。”生物計量學,卷。 60,沒有。 2,1973 年,第 369-374 頁。 JSTOR,www.jstor.org/stable/2334550。訪問日期:2021 年 3 月 30 日。
例子:
>>> import numpy as np >>> 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.0052994700529947)
取這兩個樣本,其中一個有一個極端的尾巴。
>>> a = (56, 128.6, 12, 123.8, 64.34, 78, 763.3) >>> b = (1.1, 2.9, 4.2)
使用修剪關鍵字執行修剪(元)t-test。例如,使用 20% 的修整,
trim=.2
, 測試將減少一個 (np.floor(trim*len(a))
) 每個樣本尾部的元素a.對樣品沒有影響b因為np.floor(trim*len(b))
為 0。>>> stats.ttest_ind(a, b, trim=.2) Ttest_indResult(statistic=3.4463884028073513, pvalue=0.01369338726499547)
相關用法
- Python SciPy stats.ttest_ind_from_stats用法及代碼示例
- Python SciPy stats.ttest_rel用法及代碼示例
- Python SciPy stats.ttest_1samp用法及代碼示例
- Python SciPy stats.theilslopes用法及代碼示例
- Python SciPy stats.triang用法及代碼示例
- Python SciPy stats.t用法及代碼示例
- Python SciPy stats.tvar用法及代碼示例
- Python SciPy stats.trim_mean用法及代碼示例
- Python SciPy stats.tsem用法及代碼示例
- Python SciPy stats.truncpareto用法及代碼示例
- Python SciPy stats.tmean用法及代碼示例
- Python SciPy stats.truncweibull_min用法及代碼示例
- Python SciPy stats.trim1用法及代碼示例
- Python SciPy stats.tmin用法及代碼示例
- Python SciPy stats.trimboth用法及代碼示例
- Python SciPy stats.tmax用法及代碼示例
- Python SciPy stats.truncexpon用法及代碼示例
- Python SciPy stats.truncnorm用法及代碼示例
- Python SciPy stats.tukeylambda用法及代碼示例
- Python SciPy stats.trapezoid用法及代碼示例
- Python SciPy stats.tstd用法及代碼示例
- Python SciPy stats.tiecorrect用法及代碼示例
- Python SciPy stats.tukey_hsd用法及代碼示例
- Python SciPy stats.anderson用法及代碼示例
- Python SciPy stats.iqr用法及代碼示例
注:本文由純淨天空篩選整理自scipy.org大神的英文原創作品 scipy.stats.ttest_ind。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。