【问题标题】:How to drop some interaction terms from R formula如何从 R 公式中删除一些交互项
【发布时间】:2014-09-08 22:27:09
【问题描述】:

我想从 R 公式中删除一些交互项。我的情况是,我有一个具有很多级别的因子变量(称为 A,它的取值范围为 1-50),还有另一个我想与之交互的连续变量(称为 B)。

A*B

创建术语 A1:B, A2:B, A3:B,... 我想要一种简单的方法来摆脱第一个 A1:B 术语。

注意:我看到了一些关于 lm 案例的先前答案,它们调用了 update 然后删除了一些术语。这对我不起作用,因为我正在尝试使用 mlogit 包估计多项式 logit 模型,并且我无法在不放弃一些交互的情况下进行第一次估计。

编辑:虽然我没有尝试使用 lm,但如果我能发生以下情况,那么我认为它会解决我的问题。

dd<-data.frame(A=sample(letters[1:10], 100, replace=T),B = runif(100),z=rexp(100))

#need to drop B term below
reg1 <- lm(z~A*B, dd)

#or need to drop Aa:B term here
reg2 <- lm(z~A*B - B, dd)

#but this doesn't work (I realize why, but this is an
#example of what I would like to have happen)
reg3 <- lm(z~A*B - B - Aa:B, dd)

【问题讨论】:

  • 我不确定我是否理解。当您执行dd&lt;-data.frame(A=sample(letters[1:10], 100, replace=T), B = runif(100), z=rexp(100)); lm(z~A*B, dd) 时,您会看到AaAa:B 没有估计值,因为当您有截距项时,它们无法区分。那么,您是否正在拟合一个不会自动删除的模型? reproducible example 在这里肯定会有所帮助。
  • 那么您希望这些观察结果如何?它们会成为参考类别并被拦截吗?
  • 我没有使用 lm,而是尝试使用 mlogit 包估计多项式 logit 模型。基本上,您必须对 mlogit 做出一些识别假设(需要将 1 个附加系数设置为等于 0)。与 lm 不同,如果您具有完美的共线性,它将为您删除一个变量/报告 NA 系数,mlgit 不会收敛。希望这会有所帮助,但无论如何,我只需要删除其中一个交互项即可。
  • @MrFlick,感谢您的评论。在您的示例中,我还想从公式中删除 B 。我已将我的问题扩展到您的示例。我认为现在更清楚了,但如果需要,我很乐意再次澄清。

标签: r


【解决方案1】:

我认为您应该能够与她的对比来实现这一目标。在这里,我们创建自己的对比度,调整默认的 contrast.treament 行为以跳过前两个变量。

contr.skip2 <- function (n, contrasts = TRUE, sparse = FALSE) 
{
    contr <- contr.treatment(n, 1, contrasts, sparse)
    contr[2, ] <- 0
    contr[, -1]
}

然后我们可以拟合模型并传递我们的特殊对比

lm(z~A*B, dd, contrasts=list(A="contr.skip2"))

# Call:
# lm(formula = z ~ A * B, data = dd, contrasts = list(A = "contr.skip2"))
# 
# Coefficients:
# (Intercept)           Ac           Ad           Ae           Af           Ag           Ah  
#     1.09981     -0.14541     -0.86334     -0.18478     -0.77302      0.19681      0.23845  
#          Ai           Aj            B         Ac:B         Ad:B         Ae:B         Af:B  
#    -0.74962     -0.49014      0.09729      0.14705      1.09606      0.14706      0.88919  
#        Ag:B         Ah:B         Ai:B         Aj:B  
#    -0.62796     -0.70155      1.60253     -0.20564 

如您所见,模型中不再有 Ab 术语。

【讨论】:

  • 不得不使用它来向 df 添加变量,因为我不能直接在 mlogit 中使用对比,但这个想法对我有用。谢谢。
  • 如果 mlogit 在回归之前没有调用 model.frame,我会感到惊讶。您还可以直接将对比分配给因子。由于您发布了 lm() 示例,这就是我测试的内容。下次创建一个更接近您实际情况的可重现示例可能会更好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-27
  • 1970-01-01
  • 1970-01-01
  • 2018-07-20
  • 1970-01-01
  • 2020-10-03
  • 2015-09-26
相关资源
最近更新 更多