glmnet中是否可以进行一阶交互?

例如,如果我的X矩阵是:

V1 V2 V3
0  1   0
1  0   1
1  0   0
...

有没有一种方法可以指定它沿“y〜V1 + V2 + V3 + V1 * V2 + V2 * V3 + V1 * V3”的方式执行某些操作,而无需手动创建列?我的实际矩阵较大,手工创建所有一阶叉积会很麻烦。

最佳答案

此类公式的正确R语法为

y~(V1+V2+V3)^2

例如
set.seed(15)
dd <- data.frame(V1=runif(50), V2=runif(50), V3=runif(50), y=runif(50))
lm(y~(V1+V2+V3)^2, dd)

Call:
lm(formula = y ~ (V1 + V2 + V3)^2, data = dd)

Coefficients:
(Intercept)           V1           V2           V3        V1:V2        V1:V3        V2:V3
    0.54169     -0.10030     -0.01226     -0.10150      0.38521     -0.03159      0.01200

或者,如果您要为y以外的所有变量建模,
lm(y~(.)^2, dd)

Call:
lm(formula = y ~ (.)^2, data = dd)

Coefficients:
(Intercept)           V1           V2           V3        V1:V2        V1:V3        V2:V3
    0.54169     -0.10030     -0.01226     -0.10150      0.38521     -0.03159      0.01200

两者都一样
lm(y~V1+V2+V3+V1:V2+V1:V3+V2:V3, dd)

Call:
lm(formula = y ~ V1 + V2 + V3 + V1:V2 + V1:V3 + V2:V3, data = dd)

Coefficients:
(Intercept)           V1           V2           V3        V1:V2        V1:V3        V2:V3
    0.54169     -0.10030     -0.01226     -0.10150      0.38521     -0.03159      0.01200

您可以将这些公式与model.matrix一起使用以创建矩阵
model.matrix(y~(V1+V2+V3)^2,dd)

09-04 15:47