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

如何用tidymv绘制响应尺度(0-1)的GAM等高线图?

Gamma族GAM模型预测结果的0-1响应尺度转换与绘图

问题描述

使用mgcv构建Gamma族广义可加模型(GAM)后,通过tidymv结合ggplot2绘图时,图中展示的是模型变换尺度(链接函数尺度)的结果,需要将其转换为0-1范围的原始响应尺度进行绘制。

解决步骤

要实现需求,需要两步核心操作:

  1. 生成预测结果时,指定响应尺度而非默认的链接尺度
  2. 对响应尺度的预测值进行0-1归一化处理

修正后的完整代码

首先修正原代码中的数据引用错误(data=cats1应为data=sdata),再按上述步骤调整:

sourceLambda = c(0.0, 0.1, 0.2, 0.0, 0.1, 0.2, 0.0, 0.1, 0.2)
traitLambda = c(0.0, 0.0, 0.0, 0.1, 0.1, 0.1, 0.2, 0.2, 0.2)
meanT = c(1.052590e-04, 1.588049e-04, 9.678802e-05, 1.090665e-04, 1.265542e-04, 8.495936e-05, 1.399897e-04, 2.928686e-04, 2.481759e-04)
sdata = data.frame(sourceLambda, traitLambda, meanT)

library(tidymv)
library(dplyr)
library(viridis)
library(mgcv)

# 构建Gamma族GAM模型
x <- gam(meanT ~ s(sourceLambda, k=2)+s(traitLambda,k=2), data=sdata, family=Gamma)

# 生成响应尺度的预测结果(默认是链接尺度,需指定type="response"转换)
x2 <- predict_gam(x, type = "response")

# 对预测值进行0-1归一化
x2 <- x2 %>%
  mutate(fit_norm = (fit - min(fit)) / (max(fit) - min(fit)))

# 使用归一化后的数值绘图
x2 %>%
  ggplot(aes(sourceLambda, traitLambda, z = fit_norm)) +
  geom_raster(aes(fill = fit_norm)) +
  geom_contour(colour = "white") +
  theme_bw()+
  scale_fill_viridis("归一化T1", option = "A")

关键说明

  • predict_gam(x, type = "response"):Gamma族模型默认使用对数链接函数,指定该参数后,会自动将预测值从对数尺度转换回与原始响应变量meanT一致的尺度
  • 0-1归一化公式:(当前值 - 最小值) / (最大值 - 最小值),通过dplyr::mutate新增归一化列fit_norm,直接用该列绘图即可得到0-1范围的结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 20:06:22