我注意到,当使用虚拟编码来拟合我的线性模型时,R在形成模型矩阵时排除了某些参数。做这个的R算法是什么?
没有详细记录,但它可以追溯到底层LAPACK代码使用的任何旋转算法:
从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使用住户转换来计算qr
n × p矩阵x的C分解,有限列
基于约简列2范数的C枢轴策略
C将范数接近零的列移动到
的右边缘C是x矩阵。这个策略意味着顺序的
C自由度效应可以用自然的方法计算。
在实践中我通常发现R消除了一组共线性预测变量的最后(最右)列…