我使用具有Gamma分布和link = log的glm来创建回归。我正在尝试使用visreg创建模型的线,但它只是为响应创建的,并且不显示要点。我想创建一个包含所有点和模型线的图形。是否可以使用visreg?如果不是,是否可以使用另一个软件包来做到这一点?
我已经尝试使用'abline'创建模型的行,但是行不通。
MODEL=glm(y~x, family=Gamma(link='log'), data)
visreg(MODEL, scale='response')
答案 0 :(得分:0)
我不知道visreg
包的实现,但是从头开始创建一行并不难。遗憾的是,abline
无法正常工作,因为在y = ax + b
格式上直线不是线性的。相反,我们可以使用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")
现在我们有一个情节如下:
要添加点,可以使用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"))