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

时间:2019-08-01 15:47:28

标签: r graph glm gamma-distribution

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

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

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

1 个答案:

答案 0 :(得分:0)

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

  1. 创建自己的健身姿势
  2. 对旧数据进行排序,或者更好地生成一些新数据
  3. 使用已排序或新数据预测模型
  4. 根据数据绘制预测

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

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

让我们从建立模型开始。

#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")

现在我们有一个情节如下:

Model plot

要添加点,可以使用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)

产生以下图: enter image description here

奖金:以原始比例绘制

如果您想将其绘制为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"))