我正在运行一个包含10个独立变量和150,000个观测值的逻辑模型。我希望适合一个模型,每个交互项都达到六阶。但是,当然,我们知道10选择6是210,我不想手动输入这个模型。在R中是否有一个命令可以用来自动包含每个交互项到第6个订单?
编辑:感谢Dason指出实际上总共有848个参数,而不仅仅是210个六阶交互项。尽管如此,我确实希望使用所有848个参数来拟合模型。我知道我可以使用polym()函数来查找我的变量的所有6阶多项式,但这当然会比我想要的交互项更多的参数。
答案 0 :(得分:2)
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个变量的完整6阶多项式模型将有8007列......