0

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

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

Testaha 是数据框。

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

4

1 回答 1

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"

是的,是的,他们是。因此,您的代码应该可以工作。也许你只是误解了一些东西?

于 2018-07-02T14:25:57.200 回答