从R中的模型中删除一个术语



下面是一个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?

我们可能需要更多信息(为了清楚起见,我将此作为回答而非评论发布,稍后可以回来删除。(

看看一个最小的例子,其中输入变量是数字,您的语句似乎不是真的:

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的公式接口不太灵活,无法处理这种情况。

最新更新