2012-08-13 72 views
3

我正尝试使用numpy.ma.corrcoef来计算缺少数据时的相关性。缺少值掩码数组关联(numpy.ma)

根据文档: 除了丢失数据的处理外,该功能的作用与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 =假)对它的变量之间的相关性给出为-86.52(绝对值,不是百分比!)。而在前两个点上运行np.corrcoef会产生1(也是绝对值)的相关性。根据文件,后面的值是我认为我应该从第一次操作期望的值。

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

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

请告诉我在这里失踪的东西!提前致谢。

回答

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版

+0

谢谢;我使用的numpy版本是1.6.1,我想知道您是否对Enthought PyLab的升级有任何建议。我已经下载了1.6.2版本,但是当我尝试安装它时,我收到一条消息说Python 2.7是必要的。我的Enthought副本是2.7.3版本,但是我的默认版本是2.6,正是这种情况下,numpy安装似乎可以接受。我该如何升级Enthought安装? – Psmith 2012-08-14 16:56:59

1

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

使用np.ma.corrcoef(b[:,0], b[:,1])并创建一个错误报告... np.ma.corrcoef(b[:,0], b[:,1])给出了预期的结果,因此它是一个简单的解决方法,直到它被修复。

+0

谢谢,我认为你能够重现这一点;感谢您的解决方法,但我认为它不会像升级numpy一样帮助我(见下文),因为我需要一个七个变量的相关矩阵,其中只有两个变量在上面的示例中显示了 – Psmith 2012-08-14 16:54:19

+0

我得到的答案是肯定的,所以假设它是错误的,这是一个numpy错误,它似乎并不是在新版本中修复的。这个问题可能会降低到意味着被减去所有数字,但是在下一步中它们不再被使用......(因此无论如何,如果你可以写一个bug报告就会很好) – seberg 2012-08-14 19:57:47