具有中心级别的分类回归

时间:2016-09-21 00:28:56

标签: r linear-regression categorical-data

R对分类变量进行回归的标准方法是选择一个因子水平作为参考水平,并将该水平的影响约束为零。我没有将单个级别的效果约束为零,而是将系数的 sum 约束为零。

在以标准方式拟合模型之后,我可以手动将系数估计值合并到一起:

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用于分类变量的线性回归的约束?

1 个答案:

答案 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))