You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

mgcv中bam拟合GAM的合理耗时及运行进度判断咨询

GAM模型拟合耗时与进程判断问题

模型与背景

我正在使用mgcv包拟合以下GAM模型:

m3.2 <- bam(pt10 ~
            s(year, by = org.type) +
            s(year, by = region) +
            s(org.name, bs = 're') +
            s(org.name, year, bs = 're'), 
          data = dat, 
          method = "fREML", 
          family = betar(link="logit"), 
          select = T, 
          discrete = T)

数据集dat包含约58000条观测值,因子org.name有约2500个水平,需要拟合大量随机截距和斜率。为减少计算时间,我使用了bam()函数及discrete = T参数,但模型已运行约36小时仍未完成拟合也未报错。

核心问题

  • 该模型拟合的合理耗时是多少?
  • 是否有方法判断bam()仍在推进还是应终止命令?

设备配置

设备为16GB内存、Intel(R) Core(TM) i7-8565u处理器(主频1.80GHz),Windows任务管理器显示RStudio的CPU使用率为20-30%,内存使用率为20-50%,且数值处于动态变化中。


关于合理耗时

没有绝对统一的标准,但结合你的设备配置和模型复杂度来看:

  • 你的模型包含两个带by分组的平滑函数,加上2500个水平的随机截距+随机斜率项,同时使用了计算量更大的betar分布、fREML优化方法和select=T变量选择,36小时的耗时确实超出常规预期。
  • 通常这类模型在你的配置下,几小时到十几小时是更常见的范围;但如果随机斜率项的设计导致矩阵运算量剧增,耗时可能会拉长,但36小时已经属于偏长的情况。

判断进程是否在推进的方法

  • 启用trace参数:如果还未重启拟合,可以在bam()中添加trace = TRUE(或指定数值如trace = 1),它会输出迭代过程的细节(比如当前迭代次数、对数似然值的变化),能直观看到模型是否在持续更新。
  • 监控临时文件:使用discrete=T时,bam()会在系统临时目录生成离散化相关的临时文件,可查看这些文件的大小或修改时间是否持续变化——如果有更新,说明进程仍在推进。
  • 资源使用率信号:你观察到CPU和内存数值动态变化,大概率说明进程还在运行(若陷入死循环,资源使用率通常会稳定在极低或极高的固定值),但这个信号不够精准,仅作参考。
  • 简化模型测试:可以先拟合简化版模型,比如去掉select=T或只保留部分效应(如仅拟合s(year, by = org.type) + s(org.name, bs='re')),若简化模型能在合理时间内跑完,说明原模型的高复杂度(随机斜率+select=T+betar分布)是耗时过长的主因,而非程序卡死。

提速建议(若需继续拟合)

  • 关闭select=T:该参数会增加额外的变量选择计算,对复杂模型的耗时影响显著,若非必须,可先去掉,后续再单独做变量筛选。
  • 调整gc.level参数:设置gc.level=0可以减少垃圾回收的频率,从而降低额外耗时(你的16GB内存足以支撑,不会出现内存溢出风险)。
  • 替换method参数:尝试使用method="REML"而非fREML,fREML对复杂模型的优化过程更慢,REML在多数场景下速度更快,结果差异极小。
  • 开启多线程:利用nthreads参数启用并行计算,比如你的i7是4核8线程,可设置nthreads=4,充分利用CPU资源加速拟合。

内容的提问来源于stack exchange,提问作者Pat Taggart

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 15:45:23