创建互动条件时出现问题

时间:2018-07-02 09:23:12

标签: r regression interaction model.matrix

我有一个7000行和36列的data.frame。该列中的一些是类别变量。 现在,我想使用model.matrix为回归创建一个x矩阵。 在该矩阵中应有交互项,例如(V1 * V2 * V3)。 我试图这样做:

formelhas <- formula(k ~ .^3)
 test <-  model.matrix(formelhas,testahah)

Testaha是数据框。

在结果测试中,只有诸如(V1 * V2)之类的交互项,而没有三阶交互(V1 * V2 * V3)项。为什么?

1 个答案:

答案 0 :(得分:0)

如果没有您提供有关数据结构的进一步信息,将很难回答这个问题。

您提供的代码应该有效,这表明您可能犯了某种简单的印刷错误。为了确认这一点,让我们做一个快速可重现的示例,看看从内置数据集中的相似代码确实生成了三向交互:

没有互动:

> str(colnames(model.matrix(mpg ~ ., mtcars)))
 chr [1:11] "(Intercept)" "cyl" "disp" "hp" "drat" "wt" "qsec" "vs" "am" "gear" "carb"

双向交互:

> str(colnames(model.matrix(mpg ~ .^2, mtcars)))
 chr [1:56] "(Intercept)" "cyl" "disp" "hp" "drat" "wt" "qsec" "vs" "am" "gear" "carb" "cyl:disp" ...

三向互动:

> str(colnames(model.matrix(mpg ~ .^3, mtcars)))
 chr [1:176] "(Intercept)" "cyl" "disp" "hp" "drat" "wt" "qsec" "vs" "am" "gear" "carb" "cyl:disp" ...

他们真的在那里吗?

> tail(colnames(model.matrix(mpg ~ .^3, mtcars)))
[1] "qsec:am:carb"   "qsec:gear:carb" "vs:am:gear"     "vs:am:carb"     "vs:gear:carb"   "am:gear:carb"

是的,是的。因此,您的代码应该起作用。也许您只是误解了什么?