![](/img/trans.png)
[英]Why does SciPy return `nan` for a t-test with samples with 0 variance?
[英]T-Test in Scipy with NaN values
我在 scipy 中進行 t 檢驗時遇到問題,這讓我慢慢發瘋。 它應該很容易解決,但我所做的一切都不起作用,而且我無法通過廣泛的搜索找到解決方案。 我在最新的 Anaconda 發行版上使用 Spyder。
具體來說:我想在從 csv 文件導入的 Pandas 數據框中比較兩列之間的均值——“Trait_A”和“Trait_B”。 其中一列中的某些值是“Nan”(“非數字”)。 獨立樣本 scipy t-test 函數的默認設置不適應“NaN”值。 但是, 將 'nan_policy' 參數設置為 'omit' 應該可以解決這個問題。 盡管如此,當我這樣做時,測試統計量和 p 值返回為“NaN”。 當我將涵蓋的值范圍限制為實際數字時,測試工作正常。 我的數據和代碼如下; 誰能建議我做錯了什么? 謝謝!
數據:
Trait_A Trait_B
0 1.714286 0.000000
1 4.275862 4.000000
2 0.500000 4.625000
3 1.000000 0.000000
4 1.000000 4.000000
5 1.142857 1.000000
6 2.000000 1.000000
7 9.416667 1.956522
8 2.052632 0.571429
9 2.100000 0.166667
10 0.666667 0.000000
11 2.333333 1.705882
12 2.768145 NaN
13 0.000000 NaN
14 6.333333 NaN
15 0.928571 NaN
我的代碼:
import pandas as pd
import scipy.stats as sp
data= pd.read_csv("filepath/Data2.csv")
print (sp.stats.ttest_ind(data['Trait_A'], data['Trait_B'], nan_policy='omit'))
我的結果:
Ttest_indResult(statistic=nan, pvalue=nan)
這似乎是一個錯誤。 在將它們傳遞給 t 檢驗之前,您可以刪除nan
:
sp.stats.ttest_ind(data.dropna()['Trait_A'], data.dropna()['Trait_B'])
Ttest_indResult(statistic=0.88752464718609214, pvalue=0.38439692093551037)
該錯誤在第 3885 行,在文件scipy/scipy/stats/stats.py 中:
# check both a and b
contains_nan, nan_policy = (_contains_nan(a, nan_policy) or
_contains_nan(b, nan_policy))
必須是
contains_nan = (_contains_nan(a, nan_policy)[0] or
_contains_nan(b, nan_policy)[0])
在您的情況下交換'Trait_A'
和'Trait_B'
可以解決您的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.