【问题标题】:Selecting the statistically significant variables in an R glm model在 R glm 模型中选择具有统计意义的变量
【发布时间】:2013-04-15 17:34:03
【问题描述】:

我有一个结果变量,比如 Y 和一个可能影响 Y 的 100 个维度的列表(比如 X1...X100)。

在运行我的glm 并查看我的模型摘要后,我看到了那些具有统计意义的变量。我希望能够选择这些变量并运行另一个模型并比较性能。有没有一种方法可以解析模型摘要并仅选择重要的那些?

【问题讨论】:

  • 试试glmulti 包。
  • 此外,必须警告您不要以这种方式选择“重要”变量。统计显着性可以通过添加/删除单个自变量来改变。您的问题建议删除第一次运行时无关紧要的 all 变量。在这样做时,一些最初重要的变量将变得微不足道,而您删除的一些变量可能具有良好的预测价值。您真正想要的是逐个删除,逐步比较模型拟合。看到这个线程:bit.ly/ZLVaD5
  • @Maxim.K 逐步回归在 CrossValidated 上不受欢迎。正如我在聊天中所说,我可能会用套索来解决这个问题。无论如何,这里是题外话。

标签: r glm


【解决方案1】:

虽然@kith 铺平了道路,但还有更多工作可以做。实际上,整个过程可以自动化。首先,让我们创建一些数据:

x1 <- rnorm(10)
x2 <- rnorm(10)
x3 <- rnorm(10)
y <- rnorm(10)
x4 <- y + 5 # this will make a nice significant variable to test our code
(mydata <- as.data.frame(cbind(x1,x2,x3,x4,y)))

我们的模型是:

model <- glm(formula=y~x1+x2+x3+x4,data=mydata)

并且系数的布尔向量确实可以通过以下方式提取:

toselect.x <- summary(model)$coeff[-1,4] < 0.05 # credit to kith

但这还不是全部!另外,我们可以这样做:

# select sig. variables
relevant.x <- names(toselect.x)[toselect.x == TRUE] 
# formula with only sig variables
sig.formula <- as.formula(paste("y ~",relevant.x))  

编辑:正如随后的海报所指出的,后一行应该是 sig.formula &lt;- as.formula(paste("y ~",paste(relevant.x, collapse= "+"))) 以包含所有变量。

并且只使用 OP 最初想要的重要变量运行回归:

sig.model <- glm(formula=sig.formula,data=mydata)

在这种情况下,估计值将等于 1,因为我们将 x4 定义为 y+5,这意味着完美的关系。

【讨论】:

  • 这太好了,谢谢!但我不得不稍微改变一下 sig.formula 让它对我有用: sig.formula
  • 确实,其他发帖人已经注意到了这一点。为了清楚起见,我在答案中包含了改进。
  • 当我这样做时,它不适用于变成因子的变量。有没有办法解决这个问题?
【解决方案2】:

对于在使用 Maxim.K 命令时遇到问题的人

sig.formula <- as.formula(paste("y ~",relevant.x))

使用这个

sig.formula <- as.formula(paste("y ~",paste(relevant.x, collapse= "+")))

最终代码会是这样的

toselect.x <- summary(glmText)$coeff[-1,4] < 0.05 # credit to kith
# select sig. variables
relevant.x <- names(toselect.x)[toselect.x == TRUE] 
# formula with only sig variables
sig.formula <- as.formula(paste("y ~",paste(relevant.x, collapse= "+")))  

这修复了您在单独选择第一个变量时面临的错误。

【讨论】:

    【解决方案3】:

    sig.formula

    您仅粘贴相关.x 的第一个变量,其他变量将被忽略(例如,尝试将条件反转为 >0.5)

    【讨论】:

      【解决方案4】:

      您可以通过函数“summary”访问 glm 结果的 pvalues。系数矩阵的最后一列称为“Pr(>|t|)”,保存模型中使用的因子的 p 值。

      这是一个例子:

      #x is a 10 x 3 matrix
      x = matrix(rnorm(3*10), ncol=3)
      y = rnorm(10)
      res = glm(y~x)
      #ignore the intercept pval
      summary(res)$coeff[-1,4] < 0.05
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-12-02
        • 1970-01-01
        • 1970-01-01
        • 2012-11-07
        • 1970-01-01
        • 2015-10-10
        • 1970-01-01
        相关资源
        最近更新 更多