2

cor()ベクトルに非常に大きな数があり、ゼロを返す場合、関数は相関値の計算に失敗します。

foo <- c(1e154, 1, 0)
bar <- c(0, 1, 2)
cor(foo, bar)
# -0.8660254
foo <- c(1e155, 1, 0)
cor(foo, bar)
# 0

非常に大きいですが1e155、Rが処理できる最大数よりはるかに小さいです。NARが間違った値を返し、またはのようなより適切な結果を返さないのは私にとって驚くべきことですInf

その理由はありますか?私たちのプログラムでそのような状況に直面しないようにするにはどうすればよいですか?

4

1 に答える 1

7

2 つの変数間のピアソンの相関係数は、2 つの変数の共分散を標準偏差の積で割った値として定義されます。( http://en.wikipedia.org/wiki/Pearson_product-moment_correlation_coefficientから)

foo <- c(1e154, 1, 0)
sd(foo)
## [1] 5.773503e+153
foo <- c(1e155, 1, 0)
sd(foo)
## [1] Inf

そして、さらに基本的なことですが、計算sd()するには x の 2 乗を取る必要があります。

1e154^2
[1] 1e+308

1e155^2
[1] Inf

したがって、あなたの数値は実際に 64 ビットを使用して計算できる範囲の境界にあります。

Windows で R-2.15.2 を使用すると、次のようになります。

cor(c(1e555, 1, 0), 1:3)
[1] NaN
于 2013-01-15T14:39:01.437 に答える