3

numpy.ma.corrcoefを使用して、欠落データが存在する場合の相関を計算しようとしています。

ドキュメントによると:欠落データの処理を除いて、この関数はと同じように機能しnumpy.corrcoefます。詳細と例については、を参照してくださいnumpy.corrcoef

これは2変量データセットであり、1番目と2番目のポイントのみが両方の変数のデータを持っています。

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として与えられます(パーセンテージではなく絶対値で!)。一方、最初の2つのポイントだけでnp.corrcoefを実行すると、1の相関が生成されます(これも絶対値です)。この後者の値は、ドキュメントによると、最初の操作から期待すべきものです。

私のPythonバージョン(Mac OSX.6.8ではEnthought64ビットPyLab)の情報は以下のとおりで、Numpyバージョン1.6.1を使用しています。

Python 2.7.3 | EPD 7.3-1(64ビット)| (デフォルト、2012年4月12日、11:14:05)詳細については、「copyright」、「credits」、または「license」と入力してください。

私がここで欠けているものについてアドバイスしてください!前もって感謝します。

4

2 に答える 2

1

おそらく numpy.ma.corrcoef のバグだと思います (または、より正確には np.ma.extras._covhelper のバグで、単一の配列入力だけでマスクをある列から別の列に正しく伝播しないと思いますが、見る場所を間違えたのかもしれません)。

np.ma.corrcoef(b[:,0], b[:,1])バグレポートを使用して作成します...np.ma.corrcoef(b[:,0], b[:,1])期待される結果が得られるため、修正されるまでの簡単な回避策です。

于 2012-08-14T15:05:33.133 に答える
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 を使用しています

于 2012-08-14T08:27:52.383 に答える