如何用gamm4绘制带置信区间的差异平滑曲线及验证模型正确性
关于gamm4拟合差异平滑曲线的问题解答
1. 是否可用gamm4绘制带置信区间的差异平滑曲线?
可以。gamm4拟合后返回的对象包含兼容mgcv包的gam组件,有两种实现方式:
- 用
mgcv自带的plot.gam()函数,设置shade=TRUE即可显示平滑项的置信区间; - 结合
predict()函数生成预测值及标准误,手动计算置信区间后用ggplot2绘制定制化曲线。
2. 尝试的差异平滑模型是否正确?
模型方向没问题,但存在细节需要调整:
核心问题点
若SoundType.ordered是二分类变量(STA/DEV),同时加入SoundType.ordered固定效应和s(Trial_no, by = SoundType.ordered)差异平滑项会造成冗余——差异平滑项已能捕捉两组间的所有差异(包括线性趋势),单独的固定效应反而可能引发共线性。
根据“允许不同SoundType水平的样条曲线存在差异”的需求,推荐两种建模选项:
调整后的模型选项
选项1:拟合两组完全独立的样条曲线
适合关注每组自身的变化趋势,直接为每个SoundType水平设置独立平滑项:
ME_spline.diff <- gamm4(RT ~ s(Trial_no, by = SoundType.ordered, bs = "bs"), random = ~(1 + SoundType.ordered | VP), data = data)
选项2:拟合“参考组基线平滑 + 组间差异平滑”(对应Sóskuthy 2017的差异平滑思路)
适合重点关注两组间的差异趋势,基线平滑为参考组的变化,差异平滑项表示另一组相对参考组的偏离:
ME_spline.diff <- gamm4(RT ~ s(Trial_no, bs = "bs") + s(Trial_no, by = SoundType.ordered, bs = "bs"), random = ~(1 + SoundType.ordered | VP), data = data)
注:fx=FALSE是mgcv样条的默认参数,可省略不写。
随机效应部分
你设置的random = ~(1 + SoundType.ordered | VP)是正确的,实现了每个VP的随机截距和SoundType的随机斜率,符合分层数据的需求。
绘图示例(群体水平带置信区间)
以选项2的模型为例,用ggplot2绘制:
# 构造预测数据集 new_data <- expand.grid( Trial_no = seq(min(data$Trial_no), max(data$Trial_no), length.out = 100), SoundType.ordered = unique(data$SoundType.ordered), VP = sample(data$VP, 1) # 忽略随机效应时可任意选一个VP,re.form=NA会自动边际化 ) # 生成预测值与置信区间 preds <- predict(ME_spline.diff$gam, newdata = new_data, type = "response", se.fit = TRUE, re.form = NA) new_data$fit <- preds$fit new_data$lower <- new_data$fit - 1.96 * preds$se.fit new_data$upper <- new_data$fit + 1.96 * preds$se.fit # 绘图 library(ggplot2) ggplot(new_data, aes(x = Trial_no, y = fit, color = SoundType.ordered)) + geom_line(linewidth = 1) + geom_ribbon(aes(ymin = lower, ymax = upper, fill = SoundType.ordered), alpha = 0.2, color = NA) + labs(x = "试次编号", y = "反应时(RT)") + theme_minimal()
内容的提问来源于stack exchange,提问作者user25610677
相关产品推荐
相关产品推荐

