[英]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个小步骤:
我假设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
。 请注意,您可能必须像下面所做的那样更改xlim
和ylim
参数(这些分别在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.