在scipy.stats.chisquare中处理NaN

时间:2019-03-25 02:33:16

标签: python numpy scipy nan chi-squared

我正在尝试对某些包含NaN的数据进行chi ^ 2测试。这是MWE:

$django-admin runserver

输出

from scipy.stats import chisquare as chi2
import numpy as np
x = [16, 18, 16, 14, 12, 12]
chi2(x)

但是

Power_divergenceResult(statistic=2.0, pvalue=0.8491450360846096)

给予

x[-1] = np.nan
chi2(x)

通过以下方式应用蒙版

Power_divergenceResult(statistic=nan, pvalue=nan)

结果

mask = ~np.isnan(x)
chi2(x[mask])

我认为(希望)实际数据中的NaN是导致此问题的原因。 TypeError Traceback (most recent call last) <ipython-input-13-3c009fd66f63> in <module> ----> 1 chi2(x[mask]) TypeError: only integer scalar arrays can be converted to a scalar index 是否具有处理NaN的内置方式,例如scipy.stats.chisquare对其spearmanr的处理方式吗?如果没有,与他们打交道的最好方法是什么?

1 个答案:

答案 0 :(得分:0)

x是一个列表;布尔数组(就此而言,任何数组)都不能用于索引列表。

In [244]: x = [16, 18, 16, 14, 12, 12]                                          
In [245]: x[-1] = np.nan                                                        
In [246]: mask = ~np.isnan(x)                                                   
In [247]: x[mask]                                                               
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-247-fee3ce9a3be1> in <module>
----> 1 x[mask]

TypeError: only integer scalar arrays can be converted to a scalar index
In [248]: mask                                                                  
Out[248]: array([ True,  True,  True,  True,  True, False])

该错误发生在调用chi2之前。

现在,如果xndarray,它可能就可以工作:)

In [249]: x = np.array([16, 18, 16, 14, 12, 12])                                
In [250]: x[mask]                                                               
Out[250]: array([16, 18, 16, 14, 12])