2016-08-23 73 views
-3

我注意到,當使用虛擬編碼來擬合我的線性模型時,R在形成模型矩陣時排除了某些參數。什麼是R算法來做到這一點?虛擬編碼模型矩陣的R算法是什麼?

+1

也許唸叨'contrasts'參數'開始?LM ',這將導致'?model.matrix'和''contr.treatment'的文檔。也許一本關於線性模型理論的書也可能是有序的,因爲文檔會假設你對數學有基本的瞭解。 – joran

+0

@joran我相信我明白對比和編碼。虛擬編碼僅僅是將回歸方程中的係數分組的一種方式,但是R如何選擇分組還不是很清楚,因爲分組的選擇不是唯一的。對於簡單的情況,我確實瞭解默認對比度,但對於複雜情況我的理解似乎分崩離析 –

+0

然後我懷疑我提到的文檔應該足夠了。默認值顯示在選項(「對比」)中。 – joran

回答

1

這是有據可查的,但它可以追溯到任何旋轉算法的基本LAPACK代碼使用:

source code of lm.fit

z <- .Call(C_Cdqrls, x, y, tol, FALSE) 
... 
coef <- z$coefficients 
pivot <- z$pivot 
... 
r2 <- if(z$rank < p) (z$rank+1L):p else integer() 
if (is.matrix(y)) { 
    .... 
} else { 
    coef[r2] <- NA 
    ## avoid copy 
    if(z$pivoted) coef[pivot] <- coef 
    ... 
} 

如果你想回來再挖,你需要看看dqrdc2.f,它說(爲什麼它的價值):

c dqrdc2使用householder轉換計算機一個n乘p矩陣x的因子分解。有限的列
基於縮減列的2-規範的c旋轉策略
c將具有接近零範數的列移動到x矩陣的右邊緣的右邊緣。該策略意味着可以以自然的方式計算順序的一個c自由度效應。

在實踐我普遍發現的是,R消除了一組共線預測變量的最後一個(最右邊)列...

+0

謝謝。我認爲你在進行QR分解時正在討論線性相關列。我正在談論形成模型矩陣的階段。這兩個階段解決了線性依賴問題,但我認爲有點不同。您正在討論已經在模型矩陣中的線性相關列如何通過旋轉移出矩陣的等級。我問R如何決定在形成模型矩陣時排除哪些參數。不是 –