2014-12-20 26 views
2

glmnet有沒有辦法做一階互動?如何爲Lasso Logistic迴歸生成所有一階互動項?

舉例來說,如果我的X矩陣是:

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

是否有指定它沿着'y上線做一些事情的方式〜V1 + V2 + V3 + V1 * V2 + V2 * V3 + V1 * V3'而無需手動創建列?我的實際矩陣較大,並且手工創建所有一階交叉產品會很痛苦。

回答

6

爲這樣一個公式中適當的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) 
+1

不幸的是,'glmnet'不支持公式。但model.matrix是要走的路。 –