corrcoef
からのnumpy
は、定数リストがcorrcoef()
関数に渡されるとRuntimeWarningをスローするようです。たとえば、次のコードは警告をスローします:
import numpy as np
X = [1.0, 2.0, 3.0, 4.0]
Y = [2, 2, 2, 2]
print(np.corrcoef(X, Y)[0, 1])
警告:
/usr/local/lib/python3.6/site-packages/numpy/lib/function_base.py:3003: RuntimeWarning: invalid value encountered in true_divide
c /= stddev[:, None]
リストの1つが定数の場合にこのエラーがスローされる理由と、定数リストが関数に渡されたときにこのエラーを回避する方法を誰かが説明できますか?.
相関とは、2つのベクトルが変化するときに、2つのベクトルが互いにどれだけうまく追跡するかの尺度です。 1つのベクトルが変化しない場合、相互の変化を追跡することはできません。
OPのコメントで述べたように、ピアソンの積率相関係数の 式 は、X
とY
の共分散を標準偏差の積で割ります。この例では、Y
の分散はゼロなので、その標準偏差もゼロです。そのため、true_divide
エラー-ゼロで除算しようとしています。
注:ゼロの問題を回避するために、エンジニアリングの観点から、Y
のエントリの1つに非常に少量(たとえば、マシンイプシロンのすぐ上の値)を追加するのは魅力的であるように見えるかもしれません。部門の問題。しかし、それは統計的に実行可能ではありません。 1e-15
は、追加する値に応じて、相関係数を大幅に混乱させます。
次の2つのケースの違いを考慮してください。
X = [1.0, 2.0, 3.0, 4.0]
tiny = 1e-15
# add tiny amount to second element
Y1 = [2., 2.+tiny, 2., 2.]
np.corrcoef(X, Y1)[0, 1]
-0.22360679775
# add tiny amount to fourth element
Y2 = [2., 2., 2., 2.+tiny]
np.corrcoef(X, Y2)[0, 1]
0.67082039325
これは統計学者には明白かもしれませんが、質問の性質を考えると、関連する警告のように思えます。