r - 估计 glmnet 中的许多交互项

标签 r formula glmnet

我的理解是 glmnet 采用矩阵,其中每一列都是一个解释变量。

我有一个包含约 10 个解释变量的数据框(其中一些是因子)

我怎样才能使用诸如 y~(x1*x2*x3)+(x4*x5)+x6 之类的公式并使用 glmnet 进行估计?

我相信我必须创建一个矩阵,其中每个交互项都有自己的列,但我不知道如何简单地获取公式和变量(其中一些是因子)的输入并获得输出一个我可以轻松放入的矩阵格莱姆网。

最佳答案

假设您需要形式为 y = b0 + b1*x1*x2 + b2*x3 + noise 的模型,其中目标变量 y以及所有解释变量 x1, x2, x3存储在同一个数据帧中。 ...

编辑:感谢@BenBolker 提示 model.matrix .

使用 model.matrix以下代码提供了解决方案:

library(glmnet)

# the original data frame and formula
set.seed(23)
dat <- data.frame(y=runif(5), x1=runif(5), x2=runif(5), x3=runif(5))
f <- as.formula(y~x1:x2+x3+0)
# no intercept here ('+0') because glmnet adds intercept by default

# transform dataframe to matrices as required by glmnet
x <- model.matrix(f, dat)
y <- as.matrix(dat$y, ncol=1)

# fit glmnet model with penalty parameter 0.001
g <- glmnet(x, y, lambda=0.001)
print(coef(g))
#   3 x 1 sparse Matrix of class "dgCMatrix"
#                   s0
# (Intercept) 0.3506450
# x3          0.2308045
# x1:x2       0.1016138

仅出于完整性考虑,这是我未使用 model.matrix 的原始答案,这需要一些人工干预:
library(glmnet)

# the original data frame
set.seed(23)
dat <- data.frame(y=runif(5), x1=runif(5), x2=runif(5), x3=runif(5))

# transform dataframe to matrices as required by glmnet
x <- with(dat, as.matrix(cbind("x1*x2"=x1*x2, "x3"=x3)))
y <- with(dat, as.matrix(y, ncol=1))

# fit glmnet model with penalty parameter 0.001
g <- glmnet(x, y, lambda=0.001)
print(coef(g))
#   3 x 1 sparse Matrix of class "dgCMatrix"
#                   s0
# (Intercept) 0.3506450
# x1*x2       0.1016137
# x3          0.2308045

关于r - 估计 glmnet 中的许多交互项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16299891/

相关文章:

r - 如何获得 glmnet 多项逻辑回归的混淆矩阵?

r - 如何使用 arima.sim 和估计模型模拟 AR(1) 过程?

R Shiny : not sure why ggplot is failing

grails - GORM 公式未计算

java.util.Random 深入挖掘

r - 如何在glmnet中指定日志链接?

r - 如何删除R中匹配字符串后的所有内容?

r - 在 r 中跨两个数据帧/矩阵按行求和

c - 在 C 中实现求和公式

r - 使用 glm.fit 、 bigglm、 speedglm、 glmnet、 LiblineaR 对逻辑回归进行基准测试