Dirk Eddelbuettel提供了使用lm
命令估算线性回归的替代方法。请参阅:http://dirk.eddelbuettel.com/blog/2011/07/05/
然而,他提到:
“严格地说,这是我们唯一可以与lm.fit()进行比较的人 它也使用了一种旋转方案。在退化模型的情况下 矩阵,所有其他方法,包括四种最快的方法, 很容易产生不正确的估计。“
某人可以通过提供示例来说明这一点吗?当估算值对于lm是正确的,而不是替代方法吗?
答案 0 :(得分:3)
安装RcppArmadillo或RcppEigen并查看help(fastLm)
:
## case where fastLm breaks down
dd <- data.frame(f1 = gl(4, 6, labels = LETTERS[1:4]),
f2 = gl(3, 2, labels = letters[1:3]))[-(7:8), ]
xtabs(~ f2 + f1, dd) # one missing cell
mm <- model.matrix(~ f1 * f2, dd)
kappa(mm) # large, indicating rank deficiency
set.seed(1)
dd$y <- mm %*% seq_len(ncol(mm)) + rnorm(nrow(mm), sd = 0.1)
summary(lm(y ~ f1 * f2, dd)) # detects rank deficiency
summary(fastLm(y ~ f1 * f2, dd)) # some huge coefficients
我们将这个例子归功于Doug Bates。