具有居中水平的分类回归
Categorical Regression with Centered Levels
R 对分类变量进行回归的标准方法是 select 一个因子水平作为参考水平,并将该水平的影响限制为零。我不想将单个水平效应约束为零,而是想将系数的 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 用于分类变量线性回归的约束?
我想我已经弄明白了。使用 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))
R 对分类变量进行回归的标准方法是 select 一个因子水平作为参考水平,并将该水平的影响限制为零。我不想将单个水平效应约束为零,而是想将系数的 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 用于分类变量线性回归的约束?
我想我已经弄明白了。使用 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))