web-dev-qa-db-ja.com

glmnetを使用する前にすべての対話を行う方法

私は8列のx行列を持っています。 glmnetを実行して、ラッソ回帰を実行したいと思います。私は電話する必要があることを知っています:

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

ただし、xに一方向の相互作用もすべて考慮するようにするにはどうすればよいですか?データフレームを手動で作り直す必要がありますか?もしそうなら、もっと簡単な方法はありますか?私はR式を使って何かをしたいと思っていたと思います。

19
user1357015

はい、そのための便利な方法があります。その中の2つのステップが重要です。

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)
29
Julius Vainora

f <- as.formula( ~ .^2)は、主効果とすべてのペアワイズ交互作用を含めるためにも機能するはずです

2
bgreenwell