R语言GAM绘图需求:将Y轴改为响应变量Rating
解决GAM绘图中Y轴显示响应变量Rating的问题
你的需求是把GAM绘图的Y轴从平滑项换成响应变量Rating,同时展示每个受试者的原始评分点和对应拟合曲线,下面是修正后的实现方案:
问题分析
你原本的plot(model1)是mgcv包默认的GAM绘图,它展示的是平滑项s(Time)的拟合偏效应(剔除其他协变量影响后的结果),而非原始响应变量的拟合值。你尝试的ggplot代码用lapply+stat_function的方式存在语法适配问题,stat_function更适合单变量函数场景,而GAM的预测需要结合Subject分组变量,先生成完整的预测数据集是更稳妥的实现方式。
修正代码
library(mgcv) library(ggplot2) # 1. 拟合GAM模型(复用你的建模逻辑) fit <- gam(Rating ~ s(Time) + Subject, data = c1152, method = "REML") # 2. 生成覆盖全场景的预测数据集 # 生成连续的时间序列,确保覆盖数据中的时间区间 time_seq <- seq(min(c1152$Time), max(c1152$Time), length.out = 100) # 生成所有时间点与受试者的组合 pred_data <- expand.grid(Time = time_seq, Subject = unique(c1152$Subject)) # 计算每个组合的预测评分 pred_data$Predicted_Rating <- predict(fit, newdata = pred_data) # 3. 绘制原始点+拟合曲线 ggplot() + # 绘制原始评分散点,用透明度避免点重叠 geom_point(data = c1152, aes(x = Time, y = Rating, color = Subject), alpha = 0.6) + # 绘制每个受试者的GAM拟合曲线 geom_line(data = pred_data, aes(x = Time, y = Predicted_Rating, color = Subject), linewidth = 1) + labs(x = "时间", y = "评分(Rating)", color = "受试者") + theme_minimal()
代码说明
- 用
expand.grid生成时间序列与受试者的全组合,保证每个受试者都有连续的预测曲线 - 直接通过
geom_line绘制预测评分,Y轴自然对应Rating(原始点为实际评分,曲线为模型预测评分) - 保留了受试者分组的颜色区分,同时通过
alpha参数优化散点重叠的视觉效果
内容的提问来源于stack exchange,提问作者Dasha
相关产品推荐
相关产品推荐

