在以标准方式拟合模型之后,我可以手动将系数估计值合并到一起:
x <- lm(data = mtcars, mpg ~ factor(cyl))
z <- c(coef(x), "factor(cyl)4" = 0)
y <- mean(z[-1])
z[-1] <- z[-1] - y
z[1] <- z[1] + y
z
## (Intercept) factor(cyl)6 factor(cyl)8 factor(cyl)4
## 20.5021645 -0.7593074 -5.4021645 6.1614719
但这让我没有标准的误差估计值,因为我刚刚添加了作为显式效果的前参考水平,我也需要这些参考水平。
我做了一些搜索并找到了constrasts
个函数,并尝试了
lm(data = mtcars, mpg ~ C(factor(cyl), contr = contr.sum))
但这仍然只产生两个效果估计值。有没有办法改变R用于分类变量的线性回归的约束?
答案 0 :(得分:0)
想想我已经明白了。使用contrasts
实际上是正确的方法,你只需要做一些工作就可以将结果变成一个方便的形式。这是合适的:
fit <- lm(data = mtcars, mpg ~ C(factor(cyl), contr = contr.sum))
然后矩阵cs <- contr.sum(factor(cyl))
用于获得效果估计值和标准误差。
效果估计只是将对比矩阵乘以效果估计值lm
吐出,如下所示:
cs %*% coef(fit)[-1]
可以使用对比矩阵和系数的方差 - 协方差矩阵计算标准误差,如下所示:
diag(cs %*% vcov(fit)[-1,-1] %*% t(cs))