【发布时间】:2015-07-21 02:49:37
【问题描述】:
我正在尝试用 Python 做一些统计。我有几个缺失值的数据,填充了np.nan,我不确定是否应该手动删除它,或者 scipy 可以处理它。所以我都尝试了:
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(),而不仅仅是有效案例。这能算bug吗?
【问题讨论】:
-
一般来说,numpy 和 scipy 都不会在内部将 NaN 视为“缺失数据”。相反,它被解释为“无效”或“未定义”,如 0/0。这与具有本地 NA 的 R 形成对比,这意味着“缺失数据”,并且与构建在 numpy 和 scipy 之上但使用 NaN 的“缺失数据”解释的“pandas”形成对比。
标签: python numpy statistics scipy missing-data