2014-12-19 7 views
13

का उपयोग करने से पहले सभी इंटरैक्शन कैसे बनाएं I मेरे पास 8 कॉलम का एक्स-मैट्रिक्स है। मैं एक लासो रिग्रेशन करने के लिए glmnet चलाने के लिए चाहता हूँ। मैं जानता हूँ कि मैं फोन करने की जरूरत है:ग्लैमनेट

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

हालांकि, मैं कैसे x मिलता है के रूप में अच्छी तरह से सभी एक ही रास्ता बातचीत पर विचार के लिए? क्या मुझे डेटा फ्रेम मैन्युअल रूप से रीमेक करना है: यदि हां, तो क्या कोई आसान तरीका है? मुझे लगता है कि मैं एक आर फार्मूला का उपयोग कर कुछ करने की उम्मीद कर रहा था।

उत्तर

20

हां, इसके लिए एक सुविधाजनक तरीका है। इसमें दो कदम महत्वपूर्ण हैं।

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] एक 'अवरोधन' कॉलम है कि ऑटो इस उदाहरण में model.matrix का उपयोग कर बनाई दूर करने के लिए है। – theforestecologist

+0

क्या यह देखभाल के साथ करना संभव है? जब मैं मॉडल मैट्रिक्स को उसी सेटिंग के साथ कैरेट ट्रेन में खिलाता हूं तो यह इंटरैक्शन वैरिएबल – KillerSnail

+0

@ किलरसेल नहीं चलाता है, 'f <- as.formula (~। *।)' और 'x <- model.matrix (f, ट्रेनडाटा) [, -1] 'और फिर' ट्रेन ले लो (एक्स = एक्स, ...) '। – Julius

1

f <- as.formula(~ .^2) भी मुख्य प्रभाव और सभी जोड़ो बातचीत सहित के लिए काम करना चाहिए