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

如何在GAM框架中仅当虚拟变量为TRUE时估计平滑效应?

在GAM中仅对特定子集拟合平滑项(针对夜间月光效应场景)

要实现仅当isnight == TRUE时估计月光占比的非线性平滑效应,你可以利用mgcv包中s()函数的by参数,这是最直接且符合GAM语法的方案:

核心实现代码

m2 <- gam(activity ~ s(hourofday, bs = "cr", k = 10) +  # 昼夜节律平滑项
             s(moonfraction, bs = "cr", k = 8, by = isnight) +  # 仅夜间生效的月光平滑项
             s(id, bs = "re"),  # 个体随机效应
           data = df,
           family = "binomial")

原理说明

  • by = isnight参数会让月光的平滑项s(moonfraction)的效应与isnight变量相乘:
    • 对于白天样本(isnight = 0),该平滑项的贡献直接为0,完全不参与模型拟合;
    • 对于夜间样本(isnight = 1),平滑项会正常估计月光占比与活动概率之间的非线性关系,完全匹配你的研究假设。

注意事项

  • 确保isnight是数值型(0/1)或二分类因子,mgcv会自动识别并处理by变量的作用;
  • 可根据数据量和预期的非线性程度调整k值(平滑项的基函数数量),k越大允许的非线性越复杂,但也可能增加过拟合风险;
  • 如果需要研究夜间时段下昼夜节律与月光的联合效应,可进一步扩展为s(hourofday, moonfraction, by = isnight),拟合二者的交互平滑项。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 09:33:20