r - 从回归估计中提取交互作用项

标签 r regression lm

这是一个简单的问题,但我在任何地方都找不到清晰而引人注目的答案。如果我有一个或多个交互项的回归模型,例如:

mod1 <- lm(mpg ~ factor(cyl) * factor(am), data = mtcars)
coef(summary(mod1))
##                           Estimate Std. Error   t value              Pr(>|t|)
## (Intercept)              22.900000   1.750674 13.080673 0.0000000000006057324
## factor(cyl)6             -3.775000   2.315925 -1.630018 0.1151545663620229670
## factor(cyl)8             -7.850000   1.957314 -4.010599 0.0004547582690011110
## factor(am)1               5.175000   2.052848  2.520888 0.0181760532676256310
## factor(cyl)6:factor(am)1 -3.733333   3.094784 -1.206331 0.2385525615801434851
## factor(cyl)8:factor(am)1 -4.825000   3.094784 -1.559075 0.1310692573417492068

确定交互作用项的系数估计的可靠方法是什么?一种明显的方法是为术语名称中的冒号添加grep()。但是,让我们假设由于以下原因,这是不可能的:
mtcars$cyl2 <- factor(mtcars$cyl, levels = c(4,6,8), labels = paste("Cyl:", unique(mtcars$cyl)))
mod2 <- lm(mpg ~ cyl2 * factor(am), data = mtcars)
##                         Estimate Std. Error   t value              Pr(>|t|)
## (Intercept)            22.900000   1.750674 13.080673 0.0000000000006057324
## cyl2Cyl: 4             -3.775000   2.315925 -1.630018 0.1151545663620229670
## cyl2Cyl: 8             -7.850000   1.957314 -4.010599 0.0004547582690011110
## factor(am)1             5.175000   2.052848  2.520888 0.0181760532676256310
## cyl2Cyl: 4:factor(am)1 -3.733333   3.094784 -1.206331 0.2385525615801434851
## cyl2Cyl: 8:factor(am)1 -4.825000   3.094784 -1.559075 0.1310692573417492068

我以为terms()对象可能有用,但没有用。我还可以对术语的顺序/编号做一些假设,以获得预期的结果:
coef(summary(mod2))[5:6,]
##                         Estimate Std. Error   t value  Pr(>|t|)
## cyl2Cyl: 4:factor(am)1 -3.733333   3.094784 -1.206331 0.2385526
## cyl2Cyl: 8:factor(am)1 -4.825000   3.094784 -1.559075 0.1310693

但我不知道该怎么做。

该怎么办?

最佳答案

这似乎有些令人费解,但是我们能否仅列举所有主要效果然后采取设定差异?

mod2 <- lm(mpg ~ cyl2 * factor(am) + wt * disp, data = mtcars)
variables <- labels(mod2)[attr(terms(mod2), "order") == 1]
factors <- sapply(names(mod2$xlevels), function(x) paste0(x, mod2$xlevels[[x]])[-1])
setdiff(colnames(model.matrix(mod2)), c("(Intercept)", variables, unlist(factors)))
# [1] "cyl2Cyl: 4:factor(am)1" "cyl2Cyl: 8:factor(am)1" "wt:disp" 

关于r - 从回归估计中提取交互作用项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50394439/

相关文章:

r - 在 R 中创建索引图表 - 相对起点

python - 如何编写一个 python 程序,从给定的下拉菜单中选择所有可能的组合,从网站上获取结果 'scrapes' ?

Python:Keras 上的训练和预测回归问题

r - 如何从R中的线性模型计算平均值?

r - 漏洞? Stargazer 无法使用 "omit"选项正确显示固定效应/因子标签?

r - 设置日期时间对象之间的差异单位

R 工作室 : organize code in section that can be hidden

machine-learning - 对于这种情况,合适的机器学习算法是什么?

r - 将数据框与缺失值对齐

r - 如何在 broom 包的 tidy() 函数输出中添加星星?