2012-02-11 9 views
6

は(最終的には、いくつかのFortranを呼び出し、私が思うに、)以下のRコードを考えてみましょう:予測値に変動がない場合、なぜlmは値を返しますか?

X <- 1:1000 
Y <- rep(1,1000) 
summary(lm(Y~X)) 

はなぜ値が要約によって返されますか? Yにばらつきがないので、このモデルは適合しないはずですか?もっと重要なのは、なぜモデルはR^2〜= .5なのか?

編集

私はlm.fitし、LMからコードを追跡し、この呼び出し見ることができます。

z <- .Fortran("dqrls", qr = x, n = n, p = p, y = y, ny = ny, 
    tol = as.double(tol), coefficients = mat.or.vec(p, ny), residuals = y, 
    effects = y, rank = integer(1L), pivot = 1L:p, qraux = double(p), 
    work = double(2 * p), PACKAGE = "base") 

実際のフィット感が起こるようです場所です。私がfortranを知らないので、http://svn.r-project.org/R/trunk/src/appl/dqrls.fを見て)私は何が起こっているのか理解するのを助けませんでした。

+1

ああ、0.5のR^2は非常に興味深い質問です。 – Iterator

+0

私は別の質問としてそれを振り回すと思います... – russellpierce

答えて

5

統計的に言えば、私たちは何を期待するべきか(私は「期待する」と言っていますが、それは非常に特殊な用語です;-))?係数は「適合しない」ではなく、(0,1)でなければなりません。 (X、Y)の共分散は、Xの分散に比例すると仮定され、その逆ではありません。 Xの分散がゼロでないため、問題はありません。共分散が0であるため、Xの推定係数は0になるはずです。したがって、マシン許容値内では、これはあなたが得ている答えです。

ここには統計的な異常はありません。統計的な誤解があるかもしれません。機械許容誤差の問題もありますが、予測値と応答値のスケールを考慮すると、1E-19のオーダの係数はかなり無視できます。

更新1:単純な線形回帰のクイックレビューはthis Wikipedia pageにあります。注意すべき重要なことは、分子内にCov(x,y)という分母にVar(x)があることです。この場合、分子は0であり、分母はゼロではないため、NaNまたはNAを期待する理由はありません。しかし、xの結果係数が0でないのはなぜかと問うかもしれません。これはQR分解の数値精度問題と関係があるでしょう。

+0

あなたの意見があります。マシンの許容誤差は、N個の問題が小さいほど1E-17に近いが、それでも無視できる。私は、N = 4の場合と同じように関数が単純に失敗することを期待していたと思います(ただし、(私にとっては)N = 3の場合には奇妙なことに失敗しません)。 – russellpierce

2

これは、QR分解が浮動小数点演算で実装されているためと考えています。

singular.okパラメータは、実際には設計マトリックス(すなわち、Xのみ)を参照します。私はこの問題は浮動小数点であるかもしれないことに同意し

lm.fit(cbind(X, X), Y) 

lm.fit(cbind(X, X), Y, singular.ok=F) 
2

を試してみてください。私は特異性はないと思う。 lm(Y~X)がインターセプトが含まれているため

あなたの代わりにQRのsolve(t(x1)%*%x1)%*%(t(x1)%*%Y)を使用してチェックマークを付ける場合、(t(x1)%*%x1)

使用x1 = cbind(rep(1,1000,X)単数形ではありません。

関連する問題