2014-12-19 7 views
13

Ich habe eine x-Matrix von 8 Spalten. Ich möchte glmnet ausführen, um eine Lasso-Regression zu machen. Ich weiß, ich rufe müssen:Wie alle Interaktionen vor der Verwendung von Glmnet

glmnet(x, y, family = "binomial", ...). 

aber wie kann ich x bekommen auch alle eine Möglichkeit, Wechselwirkungen zu beachten? Muss ich den Datenrahmen manuell neu erstellen: Wenn ja, gibt es einen einfacheren Weg? Ich habe gehofft, ich könnte etwas mit einer R-Formel machen.

Antwort

20

Ja, es gibt einen bequemen Weg dafür. Zwei Schritte sind wichtig.

library(glmnet) 
# Sample data 
data <- data.frame(matrix(rnorm(9 * 10), ncol = 9)) 
names(data) <- c(paste0("x", 1:8), "y") 
# First step: using .*. for all interactions 
f <- as.formula(y ~ .*.) 
y <- data$y 
# Second step: using model.matrix to take advantage of f 
x <- model.matrix(f, data)[, -1] 
glmnet(x, y) 
+0

[-1] ist eine ‚abfangen‘ Spalte zu entfernen, die automatisch erstellt wird in diesem Beispiel mit model.matrix. – theforestecologist

+0

ist es möglich, dies mit caret zu tun? Wenn ich die Modellmatrix mit den gleichen Einstellungen in caret train füttere, wird die Interaktionsvariable – KillerSnail

+0

@KillerSnail nicht ausgeführt. Probieren Sie 'f <- as.formula (~. *.)' Und 'x <- model.matrix (f, TrainData) [, -1] 'und dann' train (x = x, ...) 'nehmen. – Julius

1

f <- as.formula(~ .^2) sollte auch für die Einbeziehung Haupteffekte arbeiten und alle paarweise Wechselwirkungen

Verwandte Themen