我试图使用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(rowvar=False)时,变量之间的相关性为-86.52(绝对值,而不是百分比!)。而仅在前两个点上运行np.corrcoef会产生1的相关性(同样是绝对值)。根据文档,后一个值是我认为应该从第一个操作中得到的。
下面是我的Python版本(热衷于Mac OS X.6.8上的64位PyLab)信息,我使用的是Numpy version 1.6.1。
Python 2.7.3 | EPD 7.3-1(64位)|(默认值,2012年4月12日,11:14:05)
键入“版权”、“信用”或“许可证”了解更多信息。
请告诉我这里遗漏了什么!提前谢谢。

最佳答案

我认为这可能是numpy.ma.corrcoef中的一个bug(或者更确切地说,可能是np.ma.extras.\u covhelper中的一个bug,我认为它不能正确地将掩码从一列传播到另一列,而只用于单个数组输入,但可能我看错了地方)。
使用np.ma.corrcoef(b[:,0], b[:,1])并创建错误报告。。。np.ma.corrcoef(b[:,0], b[:,1])给出了预期的结果,因此它是一个简单的解决方法,直到它被修复。

关于python - 缺少的值 mask 了数组的相关性(numpy.ma),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11942313/

10-12 18:32