我试图用Python做一些统计。我有几个缺失值的数据,填充了np.nan,我不确定是手动删除它,还是can能够处理它。所以我两个都试过了:
import scipy.stats, numpy as np
a = [0.75, np.nan, 0.58337, 0.75, 0.75, 0.91663, 1.0, np.nan, 0.663, 0.837, 0.837, 1.0, 0.663, 1.0, 1.0, 0.91663, 0.75, 0.41669, 0.58337, 0.663, 0.75, 0.58337]
b = [0.837, np.nan, 0.663, 0.58337, 0.75, 0.75, 0.58337, np.nan, 0.166, 0.5, 0.663, 1.0, 0.91663, 1.0, 0.663, 0.75, 0.75, 0.41669, 0.331, 0.25, 1.0, 0.91663]
d_1, d_2 = a,b
wilc1 = scipy.stats.wilcoxon(d_1, d_2, zero_method = 'pratt')
d_1, d_2 = [], []
for d1, d2 in zip(a, b):
if np.isnan(d1) or np.isnan(d2):
pass
else:
d_1.append(d1)
d_2.append(d2)
wilc2 = scipy.stats.wilcoxon(d_1, d_2, zero_method = 'pratt')
print wilc1
print wilc2我得到两个运行时警告:
C:\Python27\lib\site-packages\scipy\stats\morestats.py:1963: RuntimeWarning: invalid value encountered in greater
r_plus = sum((d > 0) * r, axis=0和两个Wilcoxon输出
(54.0, 0.018545881687477818)
(54.0, 0.056806600853965265)正如你所看到的,我有两个相似的测试统计(W),和两个不同的P-值。哪一个是对的?
我猜想,Wilcoxon在测试统计计算中正确地处理了缺失值,但是在P值计算中,它使用了所有数据的len(),而不仅仅是有效的情况。这算不算臭虫?
发布于 2015-05-10 16:01:11
您不能在数学上执行基于nan的测试统计。除非你找到了对nan特殊待遇的证据/文件,否则你不能依赖这一点。
我的经验是,一般情况下,即使是矮人也不特别对待南,例如中位。相反,不管结果是什么,结果都是算法实现的结果。
例如,numpy.median()似乎将nan作为inf来处理,将nan置于中间值之上。这很可能只是a<b比较结果的副作用,对于nan总是错误的。在两个相同的测试统计值W之后,可能也有类似的效果。
还请注意: numpy中有一些方法变体,如http://docs.scipy.org/doc/numpy/reference/generated/numpy.nanmean.html
https://stackoverflow.com/questions/30153445
复制相似问题