R 如何绘制点和模型';带glm伽马链的s线=对数?

R 如何绘制点和模型';带glm伽马链的s线=对数?,r,graph,glm,gamma-distribution,R,Graph,Glm,Gamma Distribution,我使用glm和Gamma分布以及link=log来创建回归。我试图用visreg创建模型的线条,但它只是为了响应而创建,没有显示点。我想创建一个包含所有点和模型线的图形。可以使用visreg吗?如果不是的话,我是否可以使用另一个软件包来实现这一点 我已经尝试过使用“abline”创建模型的线条,但没有成功 MODEL=glm(y~x, family=Gamma(link='log'), data) visreg(MODEL, scale='response') 我不知道visreg包的实现,但

我使用glm和Gamma分布以及link=log来创建回归。我试图用visreg创建模型的线条,但它只是为了响应而创建,没有显示点。我想创建一个包含所有点和模型线的图形。可以使用visreg吗?如果不是的话,我是否可以使用另一个软件包来实现这一点

我已经尝试过使用“abline”创建模型的线条,但没有成功

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

我不知道
visreg
包的实现,但是从头开始创建一行并不是那么困难。遗憾的是,
a行
无法工作,因为该行在表单上不会是线性的
y=ax+b
。相反,我们可以使用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")))
    
    为了获得一些可绘制的数据,我使用了
    predict
    函数

    plotData <- xy.coords(x = newdata$u, y = predict(fit1, newdata = newdata))
    
    现在我们有一个图,如下所示:

    要添加点,可以使用
    。请注意,您可能必须更改
    xlim
    ylim
    参数,正如我在下面所做的那样(它们分别设置了x轴和y轴上的限制)

    其结果如下:

    奖励:按原始比例绘制 如果您想将其绘制为
    lot1
    (或者在您的情况下为
    y
    )的值,只需更改即可

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

    plotData图形不显示点,只显示模型的线。有没有办法在这张图上画出这些点?当然,我错过了那个点。答案将在15秒后出现。
    
    plot(plotData, ylab = "log( lot1 | u )", main = "Model plot on link scale")
    
    plot(plotData, ylab = "log( lot1 | u )", main = "Model plot on link scale",
         ylim = range(clotting$lot1),
         xlim = rng)
    points(clotting$u, clotting$lot1)
    
    plotData <- xy.coords(x = newdata$u, y = predict(fit1, newdata = newdata))
    
    plotData <- xy.coords(x = newdata$u, y = predict(fit1, newdata = newdata, type = "response"))