簡體   English   中英

在 R 中的單個圖上繪制來自不同 GAM 的兩個平滑項

[英]Plotting two smooth terms from different GAM's on a single plot in R

如果使用相同形式的數據估計這些術語,是否可以在 R 中顯示來自不同 GAM 的平滑術語?

我有兩個生態數據集,具有沿海拔梯度的物種多樣性值。 一個站點的范圍為 1700-2800 m asl,而另一個站點的范圍為 2500-3800 m asl 我已經使用 R 中的gam對物種多樣性與海拔的關系進行了建模,並且我想顯示每個站點的 GAM 中的平滑項。情節區域。 像這樣的東西:

在此處輸入圖像描述

我知道您可以使用compare_smooths來比較兩個 GAM 之間的平滑度,但我想知道是否有更通用的方法。

希望這個問題在沒有可重復數據的情況下很好。

您可以將每個站點的子集傳遞給幾個不同的geom_smooth() 像這樣的東西:

your_plot +
    geom_smooth(data = subset1)+
    geom_smooth(data = subset2)

如果你提供一個代表,我可能會更准確。

最簡單的方法是從覆蓋您想要的海拔范圍的兩個模型創建預測,然后繪制擬合值。

例如(代碼沒有檢查,因為我現在是 AFK)

library("gratia")
library("dplyr")

newd <- data.frame(Elevation = c(seq(1700, 2800, length = 100), 
                                 seq(2500, 3800, length = 100)),
                   Site = rep(c("A", "B"), each = 100))
fv1 <- fitted_values(gam1, data = filter(newd, Site == "A"),
                     type = "response")
fv2 <- fitted_values(gam2, data = filter(newd, Site == "B"),
                     type = "response")
fv <- bind_rows(fv1, fv2)

然后你應該在fv中有足夠的數據來繪制,比如說

library("ggplot2")

fv %>% ggplot(aes(x = Elevation, colour = Site)) +
  geom_ribbon(aes(ymin = lower, ymax = upper), alpha = 0.2) +
  geom_line(aes(y = fitted)) +
  geom_point(data = foo, aes(x = Elevation, y = Diversity))

(最后一行用於添加原始數據,但我不確定你是如何安排的,所以自己弄清楚。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM