Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果数据缺少值,则scipy.mstats.s在置信限中存在错误_Python_Statistics_Scipy - Fatal编程技术网

Python 如果数据缺少值,则scipy.mstats.s在置信限中存在错误

Python 如果数据缺少值,则scipy.mstats.s在置信限中存在错误,python,statistics,scipy,Python,Statistics,Scipy,如果对缺少值的数据集使用scipy.mstats.slopes例程,则斜率估计的上下限结果不正确。上界通常是/总是(?)NaN,而下界则完全错误。这种情况会发生,因为theilslopes例程将索引计算到排序的slopes数组中,而该数组包含缺失值的斜率,而它本不应该包含缺失值的斜率 解决方案是在分析之前删除缺失的值,但这没有文档记录 为了演示此问题,下面是一个简单的代码片段: 将numpy作为np导入 从scipy.stats导入mstats x = np.arange(12) y = np.

如果对缺少值的数据集使用scipy.mstats.slopes例程,则斜率估计的上下限结果不正确。上界通常是/总是(?)NaN,而下界则完全错误。这种情况会发生,因为theilslopes例程将索引计算到排序的slopes数组中,而该数组包含缺失值的斜率,而它本不应该包含缺失值的斜率

解决方案是在分析之前删除缺失的值,但这没有文档记录

为了演示此问题,下面是一个简单的代码片段: 将numpy作为np导入 从scipy.stats导入mstats

x = np.arange(12)
y = np.array([28.9, 26.2, 27.2, 26.5, 28.4, 25.3, 26.1, 24.8, 27.7,
              np.nan, np.nan, 29.6])

slope, intercept, lo_slope, up_slope = mstats.theilslopes(y, x,
                                                          alpha=0.1)
print "incorrect: ", slope, lo_slope, up_slope

idx = [0, 1, 2, 3, 4, 5, 6, 7, 8, 11]
x = x[idx]   # equivalent to pandas series.dropna()
y = y[idx]

slope, intercept, lo_slope, up_slope = mstats.theilslopes(y, x,
                                                          alpha=0.1)
print "correct: ", slope, lo_slope, up_slope
scipy.stats
模块中,使用<代码>nan不表示缺少值

下面显示了如何将数组
y
(使用
nan
表示缺少的值)转换为掩码数组
my

In [48]: x = np.arange(12)

In [49]: y = np.array([28.9, 26.2, 27.2, 26.5, 28.4, 25.3, 26.1, 24.8, 27.7, np.nan, np.nan, 29.6])

In [50]: my = np.ma.masked_array(y, mask=np.isnan(y))

In [51]: my
Out[51]: 
masked_array(data = [28.9 26.2 27.2 26.5 28.4 25.3 26.1 24.8 27.7 -- -- 29.6],
             mask = [False False False False False False False False False  True  True False],
       fill_value = 1e+20)

In [52]: slope, intercept, lo_slope, up_slope = mstats.theilslopes(my, x, alpha=0.1)

In [53]: print "correct: ", slope, lo_slope, up_slope
correct:  -0.125 -0.48 0.3875

顺便说一下,请确保您使用的scipy版本至少为0.15.0<旧版本中的code>code存在一些错误: