2012-02-11 30 views
6

考慮下列R-代碼(我認爲它,最終調用一些Fortran語言):爲什麼當預測值沒有差異時lm會返回值?

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

爲什麼值的彙總回來了?由於Y中沒有差異,這個模型不適合嗎?更重要的是,爲什麼模型R^2〜= 0.5?

編輯

我跟蹤代碼從LM至lm.fit,可以看到這一呼籲:

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") 

這就是實際的配合似乎發生。看着http://svn.r-project.org/R/trunk/src/appl/dqrls.f)並沒有幫助我理解發生了什麼,因爲我不知道fortran。

+1

啊,0.5的R^2是一個很有意思的問題。 – Iterator 2012-02-12 21:56:21

+0

我想我會把它作爲一個單獨的問題,然後... – russellpierce 2012-02-14 03:16:02

回答

5

從統計上講,我們應該預測什麼(我想說「期望」,但這是一個非常具體的術語;-))?係數應該是(0,1),而不是「不適合」。假定(X,Y)的協方差與X的方差成正比,而不是相反。由於X具有非零方差,所以沒有問題。由於協方差爲0,因此X的估計係數應爲0.因此,在機器容差範圍內,這是您所得到的答案。

這裏沒有統計異常。可能會有統計上的誤解。還有機器容差的問題,但考慮到預測器和響應值的大小,1E-19的係數可以忽略不計。

更新1:快速回顧簡單的線性迴歸可以在this Wikipedia page找到。關鍵要注意的是,Var(x)在分母中,分子中爲Cov(x,y)。在這種情況下,分子爲0,分母不爲零,所以沒有理由期待NaNNA。然而,有人會問,爲什麼不是x a 0的結果係數,這與QR分解的數值精度問題有關。

+0

我明白你的觀點。對於較小的N問題,機器容差接近於1E-17,但仍然「可以忽略不計」。我想我預計這個函數會像N = 4時一樣失敗(但對我來說,對於N = 3奇怪地不會失敗)。 – russellpierce 2012-02-12 07:57:46

2

我相信這只是因爲QR分解是用浮點運算實現的。

singular.ok參數實際上是指設計矩陣(即僅X)。嘗試

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

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

我同意,這個問題可能是浮點運算。但我不認爲是奇點。

如果選中使用solve(t(x1)%*%x1)%*%(t(x1)%*%Y)而不是QR,(t(x1)%*%x1)不是單一

使用x1 = cbind(rep(1,1000,X)因爲lm(Y~X)包括攔截。

相關問題