繁体   English   中英

如何使用glm gamma link = log绘制点和模型的线?

[英]How do I plot points and the model's line with glm gamma link=log?

我将glm与Gamma分布和link = log一起使用来创建回归。 我正在尝试使用visreg创建模型的线,但它只是为响应创建的,并且不显示要点。 我想创建一个包含所有点和模型线的图形。 是否可以使用visreg? 如果不是,是否可以使用另一个软件包来做到这一点?

我已经尝试过使用“ abline”创建模型的行,但是行不通。

MODEL=glm(y~x, family=Gamma(link='log'), data)
visreg(MODEL, scale='response')

我不知道visreg包的实现,但是从头开始创建一行并不难。 遗憾的是,由于直线在y = ax + b的形式上不会是线性的, abline无法工作。 相反,我们可以使用4个小步骤:

  1. 适合自己
  2. 对旧数据进行排序,或者更好地生成一些新数据
  3. 用您的分类数据或新数据预测模型
  4. 根据数据绘制预测

我假设visreg软件包负责步骤2-4。

使用help(glm)gamma模型示例,我将说明如何通过最少的可重现示例来实现这一目标:

让我们从建立模型开始。

#minimum reproducible example 
#From help(glm)
clotting <- data.frame(
    u = c(5,10,15,20,30,40,60,80,100),
    lot1 = c(118,58,42,35,27,25,21,19,18))
summary(fit1 <- glm(lot1 ~ log(u), data = clotting, family = Gamma(link = "log")))

现在我们已经拟合了模型,我们需要实际可视化概率。 为此,我需要一些真实的数据,所以我只使用100个点,在变量u的最小值和最大值之间均匀间隔

rn <- range(clotting$u)
newdata <- data.frame(u = seq(rn[1], rn[2], length.out = 100)) #note the data.frame

为了获得一些可绘制的数据,我使用了predict函数。

plotData <- xy.coords(x = newdata$u, y = predict(fit1, newdata = newdata))

剩下的就是绘制数据。

plot(plotData, ylab = "log( lot1 | u )", main = "Model plot on link scale")

现在,我们得到了以下图:

模型图

为了添加点,可以使用points 请注意,您可能必须像下面所做的那样更改xlimylim参数(这些分别在x和y轴上设置限制)。

plot(plotData, ylab = "log( lot1 | u )", main = "Model plot on link scale",
     ylim = range(clotting$lot1),
     xlim = rng)
points(clotting$u, clotting$lot1)

得出下面的图: 在此处输入图片说明

奖励:以原始比例绘制

如果您想将其绘制在lot1的值中(在您的情况下为y ),只需更改

plotData <- xy.coords(x = newdata$u, y = predict(fit1, newdata = newdata))

plotData <- xy.coords(x = newdata$u, y = predict(fit1, newdata = newdata, type = "response"))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM