【问题标题】:R GAM visualisation, geom_smooth not fit to all observed dataR GAM 可视化,geom_smooth 不适合所有观察到的数据
【发布时间】:2022-02-08 00:35:41
【问题描述】:

我使用以下代码在 R 中制作了 GAM 模型:

mod_gam1

mod_gam1$fitted.values

结果

并且输出看起来不错,但是 geom_smooth 错误的阴影区域没有扩展到我的整个数据集(在我的前两个数据点之前停止),我不知道为什么?

任何帮助将不胜感激!

我无法上传图片,因为我是该网站的新手,但是基本上我有两个数据集(观察值和 GAM 建模值),它们都有自己的 SE 置信功能区,但是这些开始两个数据点到我的数据集中不是在第一点。

这些是我的数据点: 鸟数据

ï..x y
1991 17
1992 76
1993 328
1994 131
1995 425
1996 892
1997 501
1998 419
1999 297
2000 277
2001 310
2002 282
2003 189
2004 278
2005 322
2006 444
2007 412
2008 241
2009 242
2010 255
2011 289
2012 335
2013 279
2014 628
2015 500
2016 174
2017 636
2018 420
2019 447

拟合值

[1] 95.56189 177.01468 255.17074 324.97532 380.28813 415.71334 428.67793 420.86624 398.18522 369.06325 [11] 341.72715 321.65585 310.33971 305.81158 304.53360 303.60521 302.21413 301.75501 304.77184 313.43400 [21] 328.37279 348.39076 371.04203 393.66222 414.29754 432.15104 447.48020 461.14595 474.09266

负二项式 link to graph image

【问题讨论】:

  • 有趣的是,当我将 geom_smooth 跨度从 0.8 增加到 1.1 时,两个置信带都移动到包括我的前两个数据点,但是现在 gam 已经平滑了很多 - 太多了。
  • See here 关于制作一个更易于人们帮助的可重现示例。无论如何,数据不应该在图片中,所以你不能上传图片也没关系。如果没有您的数据,我们将无法运行任何代码或查看您尝试更改的图表

标签: r ggplot2 gam


【解决方案1】:

这是因为您使用scale_y_continuous 设置的限制。如果删除该线(或向下调整 y,使其允许平滑的最小 y 值,那么您将完全看到平滑填充。

但是,这里有一个更大的问题。您实际上并没有在平滑中显示 gam 模型(仅显示 gam 点预测)。有几种方法可以做到这一点。最简单的可能是将 Bird.data 直接提供给 ggplot 函数,并使用geom_smooth()methodformula 参数直接请求游戏平滑:

ggplot(Bird.data, aes(x,y)) + 
  geom_point() + 
  geom_smooth(method="gam", formula=y~s(x)) +
  labs(x="Year", y = "Bird Island Total Debris Count")

这种方法的问题在于您也无法获得预测点。这可以通过以下方法解决

  1. 将 se 直接添加到 result 数据框
result$se = c(predict(mod_gam1,se=T)$se, rep(NA,29))
  1. 像以前一样使用ggplot,但使用geom_ribbon,直接设置yminymax
ggplot(result, aes(x = Year, y = data, colour = source, fill=source))+
  geom_point()+ 
  geom_ribbon(aes(ymin=data-1.96*se, ymax=data+1.96*se), alpha=0.2) +
  labs(x="Year", y = "Bird Island Total Debris Count")+
  scale_y_continuous(limits = c(-200,1000))

【讨论】:

  • 非常感谢!太完美了,太有帮助了!!!而且我肯定学到了关于 R 的另一两件事(我对这很陌生,我相信你能说出来!)。
  • @MeghanF,如果它解决了您的问题,您可以并且应该支持/接受答案。
  • 只是为了补充一个问题,我尝试用相同的代码做一个负二项式游戏(只是在添加带有family = nb的数据时调整了代码),它工作得很好,但只是看一下图表该模型的误差阴影似乎远低于第一个高斯模型(但我怀疑这仅仅是因为该模型具有更好的拟合度?)。我只是想仔细检查一下图表是否正常!我将图像嵌入到原始问题中。
猜你喜欢
  • 1970-01-01
  • 2017-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-16
  • 1970-01-01
  • 2017-01-12
  • 2019-06-04
相关资源
最近更新 更多