Logistic回归子集选择如何做?


47

我在R中拟合一个二项式族glm,并且我有一个完整的解释变量组合,所以我需要找到最好的(R平方作为度量是可以的)。缺少编写脚本以遍历解释变量的随机不同组合然后记录执行效果最好的脚本的过程,我真的不知道该怎么办。leaps程序包突飞猛进的功能似乎并没有进行逻辑回归。

任何帮助或建议,将不胜感激。


存在执行自动搜索的功能。您应该看一下step函数。5.4节说明了这一点:data.princeton.edu/R/glms.html
ocram 2011年

抱歉,我的帖子已被编辑,因此不再询问我的问题。我的逻辑回归模型中有35个(26个有效)解释变量。我需要8的最佳组合,而不是最佳子集,而且我一点也不对逐步或所有子集样式方法感兴趣。在这8个空间中没有摆动的空间。我只是以为有人可能知道我该如何适应8个外植变量的所有组合,并且它可以告诉我哪个最大化了可能性(对R平方脑放屁很抱歉,但AIC不相关,因为我有固定数量的参数,8)。
Leendert'Mar

您可以还原到帖子的先前版本,也可以将两个修改合并在一起。我确信@mpiktas在尝试改善其外观时是好主意,只是没有注意到No.参数。
chl

// @大家:非常感谢。最后,我使用了许多不同的方法,希望它们都能给出相似的答案。他们做到了。我使用了BMA,bestglm和glmnet软件包以及step函数。将所有模型拟合在一起,并且在maxcol = 9且step被认为是最佳模型的BMA中没有差异。我周围这个领域的所有专家似乎对这些变量都非常满意,并认为它是相当进步的。因此,感谢您的所有投入。我真的用完了。
Leendert

glmulti也是用于最佳子集选择的一个很好的软件包,它允许您指定模型中变量的最大nr,并且还可以考虑所有可能的一阶交互作用
Tom Wenseleers 17-4-4

Answers:


28

逐步和“所有子集”方法通常是不好的。请参阅逐步停止:为什么逐步方法不好,以及 David Cassell和我本人(我们使用SAS,但该课程适用)应使用的内容或Frank Harrell回归建模策略。如果需要自动方法,建议使用LASSO或LAR。此处提供用于逻辑回归的LASSO软件包,另一篇有趣的文章是关于用于Logistic迭代LASSO


6
(+1)关于R包,还有glmnet(使用协调下降算法,Friedman和coll。的实现)和受罚的(允许使一些变量不受惩罚)。值得注意的是,F。Harrell为GLM提供了惩罚性的ML估计(lrm有关更多信息,请参阅,或他的RMS教科书)。
chl

(+1)不错的文章,看来我必须开始超越问题中的作者陈述(不是我第一次没有这样做)。@chl(+1)也是完美的替代建议。
Dmitrij Celov 2011年

@chl:+1为glmnet,这是一个很棒的程序包。
Zach

1
@chl谢谢!R的问题之一是跟踪软件包(数量太多!),而这是最好的。任务视图确实有帮助
彼得·弗洛姆

2
如果您的变量是共线的,那么最好使用glmnet使用弹性网,例如alpha = 0.5,因为LASSO倾向于从模型中随机剔除高度共线的变量
Tom Wenseleers 17-4-4

15

首先,对于Logistic回归而言不是合适的拟合优度度量,例如,以信息准则或为例。R2AICBIC

Logistic回归是通过最大似然法估算的,因此leaps此处不直接使用。leapsglm()功能的扩展是bestglm软件包(通常遵循以下建议,请查阅那里的小插图)。

您可能也对David W. Hosmer,Borko Jovanovic和Stanley Lemeshow的最佳子集Logistic回归 // Biometrics Vol。1 的文章感兴趣。45,第4号(1989年12月),第1265-1270页(通常可通过大学网络访问)。


2
尽管您对评论比差通常是有用的,但除非您要比较不同大小的模型,否则实际上没有什么区别。OP明确指出,他们仅对变量模型感兴趣,因此和将恢复为选择可能性最高的模型。这等效于拟合。R2BIC,AIC8BICAICR2
概率

感谢您的发言,但是下面chl的评论解释了为什么固定数量的解释变量很危险。顺便说一句,答案早于有关变量(最多?)的评论的出现;)8
Dmitrij Celov 2011年

对于任何学术参考R2R2 is not an appropriate goodness-of-fit measure for logistic regression take an information criterion AICAIC or BICBIC
SIslam

关于的注释bestglm,它leaps在后端用于计算!因此,如果数据集中不存在NA,它将失败,并会显示类似以下消息:Error in leaps.setup(x, y, wt = weights, nbest = nbest, nvmax = nvmax, : NA/NaN/Inf in foreign function call (arg 3) 但是有趣的是,我的数据集没有NA而是一些零,但是此函数会抱怨并给出上述确切的消息!
SIslam

glmnet也是一个不错的一个,也可以做到这一点考虑所有可能的一阶交互效应模型
汤姆Wenseleers

6

一种想法是使用随机森林,然后使用其输出的变量重要性度量来选择最佳的8个变量。另一个想法是使用“ boruta”程序包重复此过程几百次,以找到对模型始终最重要的8个变量。


@Zach您是否建议依靠RF进行功能选择,然后应用GLM(在这种情况下,存在过度拟合或过分乐观的风险),或使用RF(具有可变重要性的标准度量,或者所有相关选择)作为独立工具?
chl

@chl:我建议使用RF进行功能选择,然后再应用GLM。我同意存在过度拟合的风险,但OP表示他正好需要8个变量。
Zach

1
@Zach“恰好是8个变量” ...然后,您基于可变重要性的度量(由于基于置换和双重重采样而被认为是无偏差的)对所关注的潜在变量进行了软阈值化,并且然后将它们重新注入到GLM中。恕我直言,您破坏了通过套袋施加的过度拟合的控制。Hastie等人的ESLII中对此进行了描述:交叉验证过程中必须包括特征选择(如果有)(交叉验证包括对模型性能的评估)。
chl

@chl:r包“ boruta”是否通过多次运行随机森林来交叉验证?您基本上是在说我们需要“元交叉验证”,即在其中进行变量选择并使模型适合数据的随机子集吗?
Zach

3
@Zach我的观点是,如果您仍在同一工具链中,则装袋(特别是RF)可以在一定程度上防止过拟合。如果您使用RF的结果,然后查看另一个模型如何使用相同的数据来执行操作,则会中断CV循环。但是,为什么不直接使用RF进行分类呢?另一个解决方案是在训练样本上使用RF,然后在保留的样本上应用GLM(也可能会交叉验证)。
chl

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.