簡體   English   中英

Scipy 中具有 NaN 值的 T 檢驗

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM