空间自相关场景下GAM模型选型及诊断方法问询
模型选型与诊断建议
核心结论:不能仅依据当前BIC结果选择模型3
当前模型3的残差变异函数与模型1完全一致,说明你写的gamm代码存在语法错误,空间相关结构根本没有生效,此时BIC的比较毫无意义。先修正模型设定,再结合多维度诊断指标综合选型。
第一步:修正模型3的语法错误
你给出的模型3代码存在参数顺序错误,mgcv::gamm的正确语法逻辑是先指定公式,再传入数据集和其他参数:
# 你当前的错误写法 t_anom3 ~ gamm(data, s(tcf_90, k=3) + s(imp_90, k=3)), correlation=corExp(form = ~ lat + lon)) # 正确写法 t_anom3 <- gamm(t_anom ~ s(tcf_90, k=3) + s(imp_90, k=3), data = data, correlation = corExp(form = ~ lon + lat))
语法错误导致模型3完全没有加载空间相关结构,本质上和模型1(仅固定效应平滑项)完全相同,这就是残差变异函数一致的核心原因。修正后重新拟合模型,再进行后续诊断。
模型选型的关键诊断方法
除了BIC和R²,还需要从以下维度综合评估:
1. 残差的空间依赖性诊断
- 局部Moran's I:Global Moran's I只能反映整体空间自相关,局部指标可以定位残差聚集的热点/冷点,判断模型是否遗漏了局部空间模式。
- 分方向变异函数:城市空间往往存在各向异性(如道路网、河流走向导致的空间依赖方向差异),对比不同方向(0°、45°、90°等)的变异函数,判断
corExp(默认各向同性)的假设是否成立,而s(lon,lat)平滑项可以捕捉各向异性的空间效应。 - 残差空间分布图:直接绘制残差的空间热力图,直观观察是否存在未被模型解释的空间聚集区域。
2. 模型预测性能验证
- 空间交叉验证(SCV):普通k-fold CV可能因相邻样本泄露导致预测误差被低估,采用空间块划分(如按城市行政区、网格块)的交叉验证,更贴合实际预测场景,比较三个模型的RMSE、MAE等指标。
- mgcv内置交叉验证:对于gam模型,可使用
method = "REML"拟合后,用cv.gam()计算交叉验证误差,评估模型的泛化能力。
3. 平滑项的可靠性与解释性
- 模型2中预测因子(tcf_90、imp_90)的平滑项更显著,说明
s(lon,lat)有效控制了空间自相关,避免了因空间混淆导致的效应估计偏差。而模型1/未修正的模型3,其平滑项的显著性可能被空间自相关干扰。 - 检查平滑项的拟合曲线:对比三个模型中
s(tcf_90)、s(imp_90)的形状,判断空间控制是否改变了核心预测因子的效应趋势。
4. 模型假设检验
- 残差分布检验:绘制残差的QQ图、直方图,验证正态性假设;绘制残差 vs 拟合值图,检查异方差。
- 相关结构显著性检验:修正模型3后,用
anova(t_anom3$lme, gamm(t_anom ~ s(tcf_90, k=3) + s(imp_90, k=3), data=data)$lme)比较带/不带空间相关结构的模型,判断相关结构是否显著改善模型拟合。 - 平滑项显著性检验:用
summary(t_anom2)查看s(lon,lat)的显著性,判断空间平滑项是否有必要加入。
5. BIC的正确解读
BIC是拟合优度与模型复杂度的权衡,但只有在模型设定正确的前提下才有意义:
- 修正后的模型3,BIC会考虑空间相关结构的参数数量;
- 模型2的
s(lon,lat)(k=27)复杂度较高,可能导致BIC高于模型3,但如果其残差空间自相关更低、预测性能更好,仍然是更优选择。
后续选型思路
- 先修正模型3的语法,确保空间相关结构正确加载;
- 对比三个模型的残差空间自相关、预测性能、平滑项解释性;
- 如果模型3修正后仍无法有效降低残差空间自相关,说明
corExp的各向同性假设不适合你的城市数据,优先考虑模型2(用s(lon,lat)捕捉灵活的空间模式); - 若需要同时控制空间自相关和残差相关,可尝试在gamm中同时加入
s(lon,lat)和空间相关结构,但需注意避免过度拟合(通过交叉验证检验)。
内容的提问来源于stack exchange,提问作者mikealonzo47
相关产品推荐
相关产品推荐

