R拟合GAM模型遇Unused argument及下标越界错误求助
解决GAM模型分组平滑的报错问题
1. 确认使用正确的包
首先确保加载的是mgcv包的gam函数,只有这个包的s()函数支持by分组参数。执行以下代码加载包:
library(mgcv)
如果之前加载过其他gam相关包(比如基础gam包),先卸载再重新加载mgcv:
detach("package:gam", unload = TRUE) library(mgcv)
2. 转换分类变量为因子类型
Year必须是**因子(factor)**类型,by参数才能正确识别分组。检查并转换变量类型:
d$Year <- as.factor(d$Year)
3. 正确的分组平滑模型代码
你的需求是为两个年份分别拟合T的平滑曲线,正确的模型公式需要保留Year的主效应,同时加上带by参数的平滑项:
gam1 <- gam(H1 ~ Year + s(T, by = Year), data = d)
这个公式的逻辑是:
Year:控制两个年份的访客小时率基线差异s(T, by = Year):为每个Year水平单独拟合时间变量T的平滑曲线
4. 验证模型输出
拟合完成后,执行summary(gam1)即可正常查看模型统计结果,也可以用plot(gam1)直观对比两个年份的平滑曲线。
报错原因说明
- 第一个错误
unused argument (by = Year):大概率是调用了非mgcv包的s()函数(比如基础gam包的s不支持by参数)。 - 第二个写法
s(T, Year):这是将T和Year当作二维变量拟合平滑曲线,但你的Year只有两个水平,这种二维平滑无实际意义,导致summary时出现下标越界错误。
内容的提问来源于stack exchange,提问作者Einar
相关产品推荐
相关产品推荐

