2014-12-19 32 views
13

8 sütun x matrisim var. Bir kement regresyon yapmak için glmnet çalıştırmak istiyorum. Ben aramam gerekiyor biliyorum:glmnet kullanmadan önce tüm etkileşimleri nasıl yapılır

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

Ancak, nasıl ben de bütün tek yönlü etkileşimleri dikkate x alabilirim? Veri çerçevesini manuel olarak yeniden uyarlamak zorunda mıyım: eğer öyleyse, daha kolay bir yol var mı? Sanırım bir R formülünü kullanarak bir şeyler yapmayı umuyordum.

cevap

20

Evet, bunun için uygun bir yol var. İçinde iki adım önemlidir.

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] otomatik Bu örnekte model.matrix kullanılarak oluşturulan bir 'kesişme' sütununu kaldırmaktır. – theforestecologist

+0

bunu karet ile yapmak mümkün mü? Model matrisini aynı ayarlarla caret trenine beslediğimde, – KillerSnail

+0

@KillerSnail etkileşim değişkenlerini çalıştırmaz, 'f <- as.formula (~. *.)' Ve 'x <- model.matrix (f, TrainData), [, -1] 've sonra da (x = x, ...)' demesini al. – Julius

1

f <- as.formula(~ .^2), ana etkileri ve ikili etkileşimler de dahil olmak üzere çalışmalıdır

İlgili konular