【问题标题】:How to make all interactions before using glmnet如何在使用 glmnet 之前进行所有交互
【发布时间】:2015-02-19 05:29:30
【问题描述】:

我有一个 8 列的 x 矩阵。我想运行glmnet 进行套索回归。我知道我需要打电话:

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

但是,我如何让x 也考虑所有单向交互?我是否必须手动重新制作数据框:如果是这样,有没有更简单的方法?我想我希望使用 R 公式做一些事情。

【问题讨论】:

    标签: r formula interaction glmnet


    【解决方案1】:

    是的,有一种方便的方法。其中两个步骤很重要。

    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)
    

    【讨论】:

    • [, -1] 是删除在此示例中使用 model.matrix 自动创建的“拦截”列。
    • 可以用插入符号来做到这一点吗?当我将模型矩阵提供给具有相同设置的插入符训练时,它不会运行交互变量
    • @KillerSnail,尝试f &lt;- as.formula( ~ .*.) 和x &lt;- model.matrix(f, TrainData)[, -1],然后选择train(x = x, ...)。
    • @RobertKubrick 即使 glmnet 在估算之前对其进行了缩放?
    • 我认为这不包括二次项? IE。自我互动。
    【解决方案2】:

    f &lt;- as.formula( ~ .^2) 也应该适用于包括主效应和所有成对的交互作用

    【讨论】:

      猜你喜欢
      • 2019-01-27
      • 2016-09-11
      • 1970-01-01
      • 2012-07-13
      • 2019-09-08
      • 2017-01-30
      • 2013-04-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多