我正在运行一个包含 10 个自变量和 150,000 个观测值的逻辑模型。我想用每个交互项拟合一个模型,直至六阶。然而,当然,我们知道10选6是210,我不想手动输入这个模型。 R 中是否有一个命令可以用来自动包含最多 6 阶的每个交互项?
编辑:感谢 Dason 指出,实际上总共有 848 个参数,而不仅仅是 210 个六阶交互项。尽管如此,我确实想要拟合一个包含所有 848 个参数的模型。我知道我可以使用 polym() 函数来查找变量的所有六阶多项式,但这当然会比我想要的交互项要多得多的参数。
最佳答案
d <- as.data.frame(matrix(runif(15000),ncol=10))
m <- model.matrix(~.^6,data=d)
ncol(m) ## 848
但是,这不会处理高阶自交互项(例如,对于连续变量,它将有 x、y 和 x*y,但不是 x^2 也不是 y^2),对于连续变量来说,这可以说是一致的模型所必需的。 .
代表“数据框中的所有变量”(如果将响应变量放在公式的LHS上,它将被排除在.
之外); ^6
表示“最多 6 向的所有交互”。如果您想了解它在做什么,请查看 colnames(m)
。
我猜想这对于连续变量来说是可行的,但它太大了——我没有花太多时间考虑变量的数量如何随 n 和 p 缩放,但这很糟糕......
m2 <- do.call(polym,c(as.list(d[1:10,1:8]),degree=6))
ncol(m2) ## already 3002 columns
通过反复试验,我认为项数按 choose(n+p,p)-1
缩放,因此包含 10 个变量的完整六阶多项式模型将具有 8007 列。 ..
关于r - 在 R 中输入高阶交互项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24151580/