【问题标题】:How to plot a linear regression model and a poisson regression model on the same plot in R?如何在 R 中的同一图上绘制线性回归模型和泊松回归模型?
【发布时间】:2020-07-13 21:50:45
【问题描述】:

我正在使用一组简单的数据来处理大象的年龄(解释性)以及每只大象有多少成功的交配伙伴(响应)。我找到了两个模型:一个是线性回归模型,第二个是泊松回归模型。我想制作一个交配与年龄的关系图,然后将两个模型叠加到同一个图上。然后我会比较哪个更适合视觉。我一直在搞乱 ggplot,只是常规的绘图功能,一些线条的东西。我真的不知道该怎么做。

提前致谢。

【问题讨论】:

  • 我假设“线性回归模型”是指具有正态残差的 OLS 模型(例如 lm),而不是响应 Y ~ Poisson) 的泊松线性回归模型。这两个模型做出了非常不同的假设,并且不可互换。首先,一个模型假设一个连续响应变量 (OLS),另一个模型假设一个离散响应变量 (Poisson)。想要比较它们(你不能!)提出了一个更基本的问题,即理解如何对数据建模以及基本假设是什么。也许这更适合交叉验证?

标签: r plot regression linear-regression poisson


【解决方案1】:

如果您只是想可视化,那么使用predict(, type = "response") 作为显示结果模型的一种方式非常容易。我对这两种模型都使用glm,但从技术上讲,lm 也适用于线性模型:

set.seed(11)
# sample size
n <- 50
# regression coefficients
beta0 <- 0
beta1 <- 0.04
beta2 <- 0.05
# generate covariate values
x <- round(runif(n=n, min=1, max=40))
# compute mu's
mu <- exp(beta0 + beta1 * x + beta2^2 * x)
# generate Y-values
y <- rpois(n = n, lambda=mu)
# data set
data <- data.frame(matings=y, age=x)
data



fitLM <- glm(matings ~ age, data, family = gaussian(link = "identity"))
fitPOIS <- glm(matings ~ age, data, family = poisson(link = "log"))
AIC(fitLM, fitPOIS) # poisson has lower AIC

newdat <- data.frame(age = seq(1,40,0.1))
newdat$predLM <- predict(fitLM, newdata = newdat, type = "response")
newdat$predPOIS <- predict(fitPOIS, newdata = newdat, type = "response")

plot(matings ~ age, data)
lines(predLM ~ age, newdat, col = 2)
lines(predPOIS ~ age, newdat, col = 4)
legend("topleft", legend = c("lm", "poisson"), col = c(2,4), lty = 1)

【讨论】:

  • 我认为这不是一个好的答案;它避免了关键问题,即 OP 不能也不应该比较 OLS 和 Poisson 回归模型。 OLS(或具有高斯恒等链接的 GLM)假设一个连续响应变量。泊松模型假设一个离散的因变量。两种模型的结果无法(视觉上)进行比较。一个更好的答案(可能应该发布在 Cross Validated 而不是这里)可以解释 为什么 这两个模型不具有可比性。可悲的是,展示如何在 R 中做到这一点会导致糟糕的统计实践和非批判性思维。
  • [续] 或者换句话说:仅仅因为你可以在 R 中可视化某些东西并不意味着你应该
  • @MauritsEvers - 我认为您应该再次检查 OP 的要求。仅仅因为这不是您认为他们应该问的问题,就没有理由拒绝投票。关键是您可以直观地比较它们,即使这不是选择模型的方式。
  • 没有。正如我在上一条评论中所说:仅仅因为你可以在 R 中某事并不意味着你应该。在统计上比较 OLS 和 Poisson 回归模型的结果是没有意义的。想要这样做意味着一个更大的问题(即误解这些模型的作用)。 是应该解决的问题。这是经典的XY problem。 [...]
  • [续] Stack Overflow 旨在建立一个包含有用且有意义的问题和答案的数据库,不仅针对个人,而且针对社区。您的“答案”解决了错误的问题,教导了不好的做法,因此不是一个好的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-09
  • 2018-04-28
  • 2019-10-09
  • 2018-05-21
  • 1970-01-01
  • 2020-12-16
  • 2014-05-01
相关资源
最近更新 更多