【问题标题】:Logistic regression: Drop Insignificant prediction Variables逻辑回归:丢弃不重要的预测变量
【发布时间】:2014-10-18 13:15:16
【问题描述】:

我正在使用 R 对我的数据集执行逻辑回归。我的数据集有 50 多个变量。

挑战在于用 R 编写代码,以评估某些记录和变量(例如 p 值 >.05)的统计有效性,并根据诸如此类的参数从模型中消除记录和变量。

是否有任何已经实现的方法可以做到这一点?任何帮助或建议将不胜感激。谢谢。

【问题讨论】:

  • 查看 stats::step 或 MASS::stepAIC。这当然是基于 AIC 而不是 p 值,但这可能更合适。
  • @J.R.除了它不是(更合适的)。像这样进行特征选择与通过 p 值进行相同,当您通过 AIC 这样做时,您只是使用了不同的 alpha(显着性)级别。
  • 同意加文。使用 AIC 的惩罚相当温和,尤其是在逐步使用时。
  • @GavinSimpson,指出并感谢。有了“可能......”的论点,我在考虑非嵌套模型时只是为了方便。 OP 可以咨询 Cross Validated 进行讨论或其他相关方法。

标签: r regression logistic-regression


【解决方案1】:

这是一个基本函数的实现,它将采用一组预测变量并逐步消除这些变量,直到找到一个仅具有低于所需显着性水平的预测变量的线性模型。

reverse.step <- function(y, b, df, alpha=0.05) {
  # y = dependent variable name (as character) e.g. 'Height', 
  # b = vector of explanatory variable names (as characters) e.g. 
  # c('x1','x2','x3',...), # df = data frame
  sum <- summary(lm(paste(paste(y,' ~ ', sep=''), 
                          paste(b, collapse='+'), sep=''), data=df))
  cat(b)
  cat("\n")
  pvals <- sum$coeff[2:nrow(sum$coeff),4]
  if (pvals[which.max(pvals)] < alpha) {
    return(sum)
  }
  new.b <- names(pvals[-which.max(pvals)])
  if (length(new.b) == 0 | length(new.b) == length(b)) {
    return(sum)
  } else {
    return(reverse.step(y, new.b, df, alpha))
  }
}

它可能不是最强大的功能,但它可以帮助您入门。

您还可以查看库 leaps 中的 regsubsets 方法。

【讨论】:

    猜你喜欢
    • 2020-07-30
    • 2020-08-19
    • 2022-08-24
    • 2016-06-30
    • 2019-03-05
    • 2019-06-07
    • 1970-01-01
    • 2021-01-21
    • 1970-01-01
    相关资源
    最近更新 更多