我有一个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)项。为什么?
答案 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"
是的,是的。因此,您的代码应该起作用。也许您只是误解了什么?