缺失值掩盖了数组相关性(numpy.ma)

时间:2012-08-13 21:06:14

标签: python arrays numpy missing-data

我正在尝试使用numpy.ma.corrcoef来计算存在丢失数据时的相关性。

根据文件: 除了处理丢失的数据外,此功能与numpy.corrcoef的功能相同。有关更多详细信息和示例,请参阅numpy.corrcoef

这是一个双变量数据集,只有第一个和第二个点有两个变量的数据。

array([[ 0.00494576, -0.01331578],
   [-0.00146498, -0.01349548],
   [ 0.00430321,         nan],
   [-0.00937105,         nan],
   [        nan, -0.01356873],
   [        nan, -0.01375538],
   [        nan, -0.00277393],
   [        nan,  0.0082988 ],
   [        nan,  0.        ],
   [        nan,  0.00275103],
   [        nan,  0.00547947],
   [        nan, -0.01375538],
   [        nan,  0.0110194 ],
   [        nan, -0.00549452],
   [        nan,  0.01910017],
   [        nan, -0.02462505],
   [        nan, -0.01676017],
   [        nan,  0.0112046 ],
   [        nan,  0.01108045],
   [        nan,  0.01639381],
   [        nan,  0.01078178],
   [        nan, -0.01078178]])

当我把它作为一个蒙面数组(np.ma.masked_array(t,np.isnan(t)),其中t是上面的数组)并运行np.ma.corrcoef(with rowvar = False)时变量之间的相关性为-86.52(绝对值,而不是百分比!)。而在前两个点上运行np.corrcoef会产生1的相关性(同样是绝对值)。根据文档,后一个值是我认为我应该从第一次操作中得到的。

我的Python版本(Mac OS X.6.8上的Enthought 64位PyLab)信息如下,我使用的是Numpy版本1.6.1。

Python 2.7.3 | EPD 7.3-1(64位)| (默认,2012年4月12日,11:14:05) 输入“copyright”,“credits”或“license”以获取更多信息。

请告知我在这里缺少的东西!提前谢谢。

2 个答案:

答案 0 :(得分:1)

我认为这可能是numpy.ma.corrcoef中的一个错误(或者更确切地说,可能是在np.ma.extras._covhelper中我认为不会将掩码正确地从一列传播到另一列只用于单个数组输入,但也许我在看错了地方。)

使用np.ma.corrcoef(b[:,0], b[:,1])并创建错误报告... np.ma.corrcoef(b[:,0], b[:,1])会提供预期结果,因此只需修复一个简单的解决方法。

答案 1 :(得分:0)

a为您的示例数组,我有:

In [1]: np.ma.corrcoef(a[:2])
Out[1]: 
masked_array(data =
 [[1.0 1.0]
 [1.0 1.0]],
             mask =
 [[False False]
 [False False]],
       fill_value = 1e+20)

我正在使用numpy版本1.6.2