我有一个包含 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) 项。为什么?
我有一个包含 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) 项。为什么?
如果没有您提供有关数据结构的更多信息,将很难回答这个问题。
您提供的代码应该可以工作,这表明您可能犯了某种简单的印刷错误。为了确认这一点,让我们做一个快速可重现的例子,看看三向交互确实是从内置数据集中的类似代码生成的:
无交互:
> 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"
是的,是的,他们是。因此,您的代码应该可以工作。也许你只是误解了一些东西?