【问题标题】:T-Test in Scipy with NaN values具有 NaN 值的 Scipy 中的 T 检验
【发布时间】:2016-08-29 14:32:17
【问题描述】:

我在 scipy 中进行 t 检验时遇到问题,这让我慢慢发疯。它应该很容易解决,但我所做的一切都不起作用,而且我无法通过广泛的搜索找到解决方案。我在 Anaconda 的最新发行版中使用 Spyder。

具体来说:我想在我从 csv 文件导入的 pandas 数据框中比较两列之间的均值——“Trait_A”和“Trait_B”。其中一列中的一些值是“Nan”(“不是数字”)。独立样本 scipy t-test 函数的默认设置不适应“NaN”值。但是,setting the 'nan_policy' parameter to 'omit' should deal with this。然而,当我这样做时,测试统计量和 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)

【问题讨论】:

    标签: python numpy scipy anaconda


    【解决方案1】:

    这似乎是一个错误。 您可以在将nans 传递给 t 检验之前删除它们:

    sp.stats.ttest_ind(data.dropna()['Trait_A'], data.dropna()['Trait_B'])
    Ttest_indResult(statistic=0.88752464718609214, pvalue=0.38439692093551037)
    

    【讨论】:

    • 非常感谢!这完全符合我的期望;看起来这肯定是一个错误。我会向 Scipy 开发人员报告。
    • 您使用的是哪个 scipy 版本? (nan_policy 是 0.17 版本的新功能。)如果是 0.17 或更高版本,请提交错误
    • 我使用的是 0.17 版本——所以是的,这个错误将被归档。
    【解决方案2】:

    错误在第 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' 可以解决您的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-16
      • 2016-01-05
      • 2021-01-05
      • 2022-01-09
      • 2013-07-19
      • 2018-11-19
      • 2016-07-16
      • 2014-01-06
      相关资源
      最近更新 更多