我有兩個 GAM,它們具有相同的預測變數但不同的自變數。我想將這兩個 GAM 組合成一組圖,其中每個預測變數的平滑分量(部分殘差)在同一個面板中(用例如顏色區分)。可重現的例子:
# Required packages
require(mgcv)
require(mgcViz)
# Dataset
data("swiss")
# GAM models
fit1 <- mgcv::gam(Fertility ~ s(Examination) s(Education), data = swiss)
fit2 <- mgcv::gam(Agriculture ~ s(Examination) s(Education), data = swiss)
# Converting GAM objects to a gamViz objects
viz_fit1 <- mgcViz::getViz(fit1)
viz_fit2 <- mgcViz::getViz(fit2)
# Make plotGAM objects
trt_fit1 <- plot(viz_fit1, allTerms = T) l_fitLine()
trt_fit2 <- plot(viz_fit2, allTerms = T) l_fitLine()
# Print plots
print(trt_fit1, pages = 1)
print(trt_fit2, pages = 1)
fit1 的圖如下所示:

fit2 像這樣:

因此,我想將兩個考試組合成一個面板,將兩個教育組合成另一個面板,顯示具有不同顏色/線型的自變數(來自不同的 GAM)。
uj5u.com熱心網友回復:
如果您希望它們在同一個圖中,您可以從適合的資料中提取資料trt_fit1[["plots"]][[1]]$data$fit并自己繪制它們。mgcViz我從github查看了情節風格。您可以根據需要添加第二個軸或刻度。
library(tidyverse)
exam_dat <-
bind_rows(trt_fit1[["plots"]][[1]]$data$fit %>% mutate(fit = "Fit 1"),
trt_fit2[["plots"]][[1]]$data$fit %>% mutate(fit = "Fit 2"))
ggplot(data = exam_dat, aes(x = x, y = y, colour = fit))
geom_line()
labs(x = "Examination", y = "s(Examination)")
theme_bw()
theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank())

要簡單地將它們放在同一個面板上,您可以使用gridExtraasfit1并fit2擁有一個ggplot物件。
gridExtra::grid.arrange(
trt_fit1[["plots"]][[2]]$ggObj,
trt_fit2[["plots"]][[2]]$ggObj,
nrow = 1)

由reprex 包于 2022-02-18 創建(v2.0.1)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/427623.html
