【问题标题】:Differences between glm predictions and geom_smooth() using same glmglm 预测和使用相同 glm 的 geom_smooth() 之间的差异
【发布时间】:2020-11-14 09:21:34
【问题描述】:

我正在尝试使用概率模型重现其他人的作品。不幸的是,我没有太多关于他们方法的信息,只有他们的起始数据和他们的模型图。

当我在 ggplot 中绘制数据并使用 geom_smooth(method = "glm", ...) 拟合一条线时,我能够重现之前的工作。但是,当我尝试使用 glm() 在 ggplot 之外拟合(我认为是)一个相同的模型时,我得到了不同的预测。我觉得我犯了一些愚蠢的错误,但我无法完全确定。

这是一个可重现的例子:

library(tidyverse)
set.seed(123)

df <- tibble(x = c(0.006, 0.014, 0.025, 0.05, 0.15, 0.3, 0.5),
             y = c(0.4,   0.733, 0.875, 1,    1,    1,   1))


probit_model <- glm(y ~ x, data = df, family = quasibinomial(link = "probit"))

df <- df %>%
  add_row(x = 0.001, y = NA) %>%  # To underline that these models are different
  mutate(y_pred = predict(probit_model, newdata = ., type = "response"))


df %>%
  ggplot(aes(x, y)) +
  geom_point(size = 4) +
  geom_line(aes(y = y_pred), color = "red", lwd = 1) +
  geom_smooth(formula = y ~ x, color = "blue",
              method = "glm", fullrange = TRUE,
              method.args = list(family = quasibinomial(link = "probit"))) +
  scale_x_log10(limits = c(0.001, 1))

这是它产生的情节。请注意,蓝线和红线描述了不同的拟合。我相信它们应该是相同的(忽略红线的分段性质),因为它们使用相同的模型和数据。

我在排查过程中看了不少帖子,很多回复都暗示geom_smooth()不是建模的替代品。总的来说,我同意。也就是说,我明确地试图弄清楚 geom_smooth() 在这里做什么,然后在 ggplot 之外重现它。

我的问题是:

为什么这两个模型不同? geom_smooth() 怎么打电话给glm()?如何自己调用glm() 来重现geom_smooth() 正在使用的模型?

【问题讨论】:

  • 我认为问题在于您在推断。数据不支持任何低于 0.06 的预测,因此该模型在那里失败是可以理解的。但也许 geom_smooth 中的 glm 通过将预测扩展为超低 x 值来加强预测,并且约束要求它必须在 0 处渐近

标签: r ggplot2 regression glm


【解决方案1】:

模型实际上是相同的。如果设置xlim(0, 0.1) 并删除scale_x_log10,则可以看到这一点。然后你会看到拟合是一致的。

我认为您看到的行为是因为scale_x_log10 在任何统计摘要(例如geom_smooth)之前执行了轴转换。因此,当您运行scale_x_log10 时,geom_smooth 有效地拟合模型y ~ log10(x),而不是y ~ x。如果您使用coord_trans(x="log10") 而不是scale_x_log10,您还会看到模型重合,因为coord_trans任何统计摘要之后进行转换。

【讨论】:

  • 谢谢,这正是问题所在!如果我将模型更改为:probit_model &lt;- glm(y ~ log10(x), data = df, family = quasibinomial(link = "probit")) 或按照您的建议使用 coord_trans(x = "log10"),则模型匹配。
猜你喜欢
  • 1970-01-01
  • 2021-11-23
  • 2020-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-05
  • 1970-01-01
相关资源
最近更新 更多