【问题标题】:Removing a term from a model in R从 R 中的模型中删除一个术语
【发布时间】:2021-12-25 02:24:35
【问题描述】:

以下是 R 中的回归模型,其中包含我想要包含的术语。

fit <- lm(y ~ A + B + C + A:B + A:C + A:B:C)

我想要术语 A、B、C、AB、AC 和 ABC。然而,上面的模型也包括我不想要的 BC。所以,我尝试了这个。

fit <- lm(y ~ A + B + C + A:B + A:C + A:B:C - B:C)

但是,这也没有摆脱 BC。它仍然包含在模型中。如何删除 BC?

【问题讨论】:

  • 模型 1 不包括 BC
  • 确实如此,它包括来自 A:B:C 的所有可能交互
  • 我们需要minimal reproducible example - 请参阅我的回答,了解可能的混淆来源。
  • 你能给我们看看colnames(model.matrix(fit))你的例子吗?

标签: r regression


【解决方案1】:

我们可能需要更多信息(为了清楚起见,我将其发布为答案而不是评论,可以稍后再回来删除。)

看一个最小的例子输入变量是数字,你的陈述似乎不正确:

dd <- data.frame(A=1:3, B=1:3, C=1:3)
colnames(model.matrix( ~ A + B + C + A:B + A:C + A:B:C - B:C, dd))
[1] "(Intercept)" "A"           "B"           "C"           "A:B"        
[6] "A:C"         "A:B:C"      

我们有 7 个预测变量,如果我们采用完全 3 向交互预期的 (1 + 3 + 3 + 1) 个变量并删除 1 个 2 向交互项,这就是我们所期望的。

如果您的输入变量是因子,事情会变得更加复杂:

dd <- data.frame(A=factor(1:3), B=factor(1:3), C=factor(1:3))
colnames(model.matrix( ~ A + B + C + A:B + A:C + A:B:C - B:C, dd))
 [1] "(Intercept)" "A2"          "A3"          "B2"          "B3"         
 [6] "C2"          "C3"          "A2:B2"       "A3:B2"       "A2:B3"      
[11] "A3:B3"       "A2:C2"       "A3:C2"       "A2:C3"       "A3:C3"      
[16] "A1:B2:C2"    "A2:B2:C2"    "A3:B2:C2"    "A1:B3:C2"    "A2:B3:C2"   
[21] "A3:B3:C2"    "A1:B2:C3"    "A2:B2:C3"    "A3:B2:C3"    "A1:B3:C3"   
[26] "A2:B3:C3"    "A3:B3:C3"   

您可以看到该模型有 27 个预测变量,这是您对完整 (3 x 3 x 3) 交互模型的预期 - 即您没有通过删除 B:C 交互来保存任何内容,只是重新参数化相同的模型。 (但请注意,模型中没有显式 Bx:Cy 交互项;它们已全部转换为三向交互项。)R 的公式接口处理起来不太灵活这种情况。

【讨论】:

  • 是的,它们是因素
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-16
  • 1970-01-01
  • 1970-01-01
  • 2015-06-17
  • 1970-01-01
  • 1970-01-01
  • 2013-05-26
相关资源
最近更新 更多