glmulti拟合逻辑回归无模型提升时无法自动停止的问题咨询
glmulti模型拟合不自动停止及遗传算法初始化卡住解决方案
问题原因说明
conseq参数仅在遗传算法模式(method="g"或method="h")下生效,你当前未指定method参数,默认使用穷举搜索模式(method="d"),该模式下conseq参数会被忽略,程序会遍历所有可能的变量组合。你的预测变量包含84水平的因子且开启了二阶交互,总模型量极大,因此会持续运行。- 遗传算法初始化卡住的原因是84水平的因子会导致单变量就需要拟合83个回归系数,加上二阶交互项后单模型参数量可达数百甚至上千,初始种群的每个模型拟合耗时都极长,因此长时间没有输出。
具体解决步骤
- 先压缩高基数因子水平
将84水平的预测变量的稀有水平合并,比如将出现频次低于5次的水平统一归为「其他」类,将水平数压缩到10个以内,从根源降低单模型拟合耗时。 - 调整搜索模式及相关参数
明确指定使用遗传算法,同时降低初始种群规模减少初始化压力,也可以替换更快的拟合函数提升效率,示例代码如下:
# 提前安装加载speedglm包可大幅提升高维广义线性模型拟合速度 library(speedglm) detectmodelsexbirdpw <- glmulti::glmulti( outcome ~ sex + bird + year + month + obsname + season, data = detect, level = 1, # 建议先跑主效应测试,确认运行正常后再考虑是否开启二阶交互level=2 method = "g", # 启用遗传算法,此时conseq参数才会生效 popsize = 30, # 降低初始种群规模,默认值为100,可大幅减少初始化计算量 fitfunction = speedglm, # 用speedglm代替原生glm,拟合速度提升显著 crit = "aicc", family = binomial, confsetsize = 10, conseq = 10, deltaM = 0.05, deltaB = 0.05, plotty = F )
- 可选调整项
如果确实需要保留二阶交互,可以在主效应模型运行正常后,再将level改回2,同时适当调大conseq阈值到20~50,避免算法提前收敛到局部最优。
内容的提问来源于stack exchange,提问作者user17047272
相关产品推荐
相关产品推荐

