You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用gratia::fitted_values()获取HGAM中全局平滑项的响应预测

提取HGAM全局平滑项拟合值的解决方案

假设你的HGAM模型结构类似(基于mgcv构建):

library(mgcv)
# 示例模型:全局平滑s(OrdDay) + 湖泊分组平滑s(OrdDay, by = Lake)
model <- gam(D ~ s(OrdDay) + s(OrdDay, by = Lake), data = your_dataset, method = "REML")

方法一:直接提取全局平滑项的估计值

用gratia::smooth_estimates()可以精准提取指定平滑项的拟合结果,避开分组项的干扰:

library(gratia)

# 查看模型中所有平滑项名称,确认全局项的标识
smooths(model)

# 提取全局平滑s(OrdDay)的拟合值
global_smooth_fit <- smooth_estimates(model, smooth = "s(OrdDay)")

# 结果中的`est`列即为各OrdDay对应的平均预测值
head(global_smooth_fit)

方法二:通过predict()排除分组项效应

构造仅包含OrdDay的新数据,用exclude参数屏蔽分组平滑项,得到全局平均预测:

# 生成覆盖所有OrdDay取值的新数据框
new_data <- data.frame(OrdDay = unique(your_dataset$OrdDay))

# 排除分组平滑项,只计算全局项+截距的响应值
global_fitted <- predict(model, newdata = new_data, 
                         exclude = "s(OrdDay):Lake", # 需与模型中分组项名称一致
                         type = "response")

# 组合成带OrdDay的结果数据框
global_preds <- cbind(new_data, avg_fitted = global_fitted)

为什么之前fitted_values()只返回单个湖泊结果?

gratia::fitted_values()默认会保留所有模型项的效应,当你未指定Lake变量时,它会自动选取数据集中第一个出现的湖泊值代入计算,因此得到的是单个湖泊的预测而非全局平均。上述两种方法分别从「提取平滑项本身」和「屏蔽分组效应」两个维度解决了这个问题。

内容的提问来源于stack exchange,提问作者David Smith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 08:05:34