2

数学の計算には、GSLライブラリ1.14とルビーラッパー(gsl )を使用しています。私が必要としていることの1つは、ピアソン相関です。しかし、配列に0があると問題が発生します。

たとえば、次のコードスニペットがあります。

x = [1,2,2,2,12]
y = [1,2,1,3,33]

puts GSL::Stats::correlation(
  GSL::Vector.alloc(x),GSL::Vector.alloc(y)
)
=> 0.9967291641974002

しかし、次の配列値を使用して計算しようとすると、NaNが得られます。

x = [1,1,1]
y = [1,1,1]
or
x = [0,1,1]
y = [1,1,1]

puts GSL::Stats::correlation(
  GSL::Vector.alloc(x),GSL::Vector.alloc(y)
)
=> NaN

そして、この値を試してみると、次のように機能します。

x = [0,1,1]
y = [1,0,1]

puts GSL::Stats::correlation(
  GSL::Vector.alloc(x),GSL::Vector.alloc(y)
)
=> -0.5

誰かが理由を知っていますか?これはとても奇妙ですね。

4

2 に答える 2

2

GSLの実装はわかりませんが、一般に、ピアソン相関係数の計算では、両方の標準偏差を除算する必要があるため、いずれかが0の場合、計算は失敗します。すべてのベクトル要素が等しい場合、標準偏差は0です。失敗するすべての例には、等しい要素を持つ1つのベクトルがあります。これがあなたの質問に答えることを願っています。

于 2011-05-02T15:16:36.173 に答える
0

理論的には、相関とは2つのデータセット間の関係を見つけることを意味します。データセットのパターンに応じて正または負になる可能性がありますが、データセットの要素の1つとして0がある場合、相関させることはできません。他のデータセットの他の非ゼロ要素を持つ数量0。これがNaNを与える理由です。

于 2012-05-24T04:47:09.693 に答える