如何用tidymv绘制响应尺度(0-1)的GAM等高线图?
Gamma族GAM模型预测结果的0-1响应尺度转换与绘图
问题描述
使用mgcv构建Gamma族广义可加模型(GAM)后,通过tidymv结合ggplot2绘图时,图中展示的是模型变换尺度(链接函数尺度)的结果,需要将其转换为0-1范围的原始响应尺度进行绘制。
解决步骤
要实现需求,需要两步核心操作:
- 生成预测结果时,指定响应尺度而非默认的链接尺度
- 对响应尺度的预测值进行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
相关产品推荐
相关产品推荐

