嵌套区组设计重复测量中,如何用GAM校正空间自相关并指定模型?
嵌套区组设计与空间自相关校正的GAM建模方案
一、正确指定嵌套区组的随机效应结构
你的实验是区组嵌套物种的设计(每个区组固定包含4个物种),同时存在重复测量,需纳入多级随机效应控制组内相关性:
- 区组层面随机截距:
s(Block, bs='re'),控制不同区组的基线差异 - 区组内物种的嵌套随机效应:
s(Block, Species, bs='re'),捕捉同一区组内特定物种的独特变异 - 若重复测量针对同一区组-物种组合,需额外加入时间维度的随机效应,比如
s(MonitoringMoment, bs='re'),具体取决于重复测量的层级逻辑
调整后的基础模型结构:
model <- gam(SpeciesCount ~ Species + MonitoringMoment + StudyArea + V1 + s(V2, by = Species) + s(V3) + s(SV4) + # 嵌套随机效应 s(Block, bs='re') + s(Block, Species, bs='re'), data = Data, method = 'REML', family = nb())
二、针对性校正空间自相关
仅用二维平滑s(x,y)通常只能拟合空间趋势,无法有效捕捉残差的空间依赖性,推荐以下两种方案:
1. 高斯过程(GP)建模空间自相关
高斯过程(bs='gp')可灵活捕捉空间点间的协方差结构,更适合校正自相关:
# 假设坐标变量为x和y model <- gam(SpeciesCount ~ Species + MonitoringMoment + StudyArea + V1 + s(V2, by = Species) + s(V3) + s(SV4) + s(Block, bs='re') + s(Block, Species, bs='re') + # 空间高斯过程项,k根据样本量调整(一般取样本量的10%-20%) s(x, y, bs='gp', k=50), data = Data, method = 'REML', family = nb())
- 若空间范围较大,可添加
m=c(2,0.5)参数调整平滑度,增强局部空间依赖的拟合能力
2. 结合GAMM与nlme的空间协方差结构
若上述方法无效,可使用mgcv::gamm()结合nlme的空间协方差模型,直接建模残差的空间自相关:
library(nlme) model_gamm <- gamm(SpeciesCount ~ Species + MonitoringMoment + StudyArea + V1 + s(V2, by = Species) + s(V3) + s(SV4), # 随机效应部分 random = list(Block = ~1, Block:Species = ~1), # 指数型空间协方差,加入块金效应捕捉局部随机变异 correlation = corExp(form = ~x + y, nugget = TRUE), data = Data, method = 'REML', family = nb())
- 可根据数据特性替换协方差类型,比如
corGaus(高斯型)或corSpher(球面型)
三、模型验证与调整
- 每次调整后,用
DHARMa::testSpatialAutocorrelation()重新检测空间自相关,直至检验不显著 - 用
mgcv::gam.check()检查平滑项自由度,避免过拟合或欠拟合 - 通过
summary(model)查看随机效应的解释方差,判断是否需要调整层级结构
内容的提问来源于stack exchange,提问作者SasR
相关产品推荐
相关产品推荐

