次のRコードを考えます。
example <- function(n) {
X <- 1:n
Y <- rep(1,n)
return(lm(Y~X))
}
#(2.13.0, i386-pc-mingw32)
summary(example(7)) #R^2 = .1963
summary(example(62)) #R^2 = .4529
summary(example(4540)) #R^2 = .7832
summary(example(104))) #R^2 = 0
#I did a search for n 6:10000, the result for R^2 is NaN for
#n = 2, 4, 16, 64, 256, 1024, 2085 (not a typo), 4096, 6175 (not a typo), and 8340 (not a typo)
Fortranを知らないため、http://svn.r-project.org/R/trunk/src/appl/dqrls.fを見ても、何が起こっているのかを理解するのに役立ちませんでした。別の質問では、浮動小数点マシンの許容誤差は、Xの係数に近いが、完全に0ではないためであると回答されました。
は、の値が0に近いほど大きくなります。しかし...coef(example(n))["X"]
- なぜ値があるのですか?
- (具体的に)何を決定していますか?
- なぜ
NaN
結果が一見整然と進行するのですか? - なぜその進行の違反ですか?
- これのうち、「予想される」動作とは何ですか?
Y <- rep(1,n)+runif(n)*ynoise
)、それは興味深いでしょう:-)
apply(as.matrix(2:17), 1, function(n){example(n)$coefficients[-1]})
。(Win 7 x64 Xeonでの私の結果は、-8e-17から+ 3e-16の範囲です。約半分は真のゼロです。)ところで、Fortranソースは役に立ちません。それはdqrdcの単なるラッパーです。それはあなたが見たいコードです。