【问题标题】:Predicted glm() values do not match ggplot2 geom_smooth() plot预测的 glm() 值与 ggplot2 geom_smooth() 图不匹配
【发布时间】:2021-11-23 19:29:24
【问题描述】:

我目前正在努力在具有比例变量 (C3_proportion) 沿连续梯度(高程)的数据集上拟合 glm(),并且我正在尝试获取 y=c(0.25,0.5,1) 的 x 值.经过一些研究,似乎二项式 glm 是我最好的选择。所以这是我的数据、模型和我能够想出的 ggplot2 图。

# Library load
library(ggplot2)
library(ggpmisc)

# Example data
df <- data.frame("mountain"="Sumapaz",
                 "C3_proportion"=c(0.2692308,0.2692308,0.2692308,0.2692308,0.3090909,0.3333333,0.3333333,0.3333333,0.3333333,0.3333333,0.3333333,0.3333333,0.3333333,0.3333333,0.3461538,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.3555556,0.3939394,0.3939394,0.3939394,0.3939394,0.3939394,0.3939394,0.3939394,0.3939394,0.3939394,0.4473684,0.4827586,0.4827586,0.4827586,0.4827586,0.4827586,0.4827586,0.4827586,0.4827586,0.4827586,0.6341463,0.7058824,0.7058824,0.7058824,0.7058824,0.7058824,0.7058824,0.7058824,0.7058824,0.7058824,0.7674419,0.8666667,0.8666667,0.8666667,0.8666667,0.8666667,0.8666667,0.8666667,0.8666667,0.8666667,0.875,0.8636364,0.8636364,0.8636364,0.8636364,0.8636364,0.8636364,0.8636364,0.8636364,0.8636364,0.8636364),
                 "elevation"=c(300,350,400,450,500,550,600,650,700,750,800,850,900,950,1000,1050,1100,1150,1200,1250,1300,1350,1400,1450,1500,1550,1600,1650,1700,1750,1800,1850,1900,1950,2000,2050,2100,2150,2200,2250,2300,2350,2400,2450,2500,2550,2600,2650,2700,2750,2800,2850,2900,2950,3000,3050,3100,3150,3200,3250,3300,3350,3400,3450,3500,3550,3600,3650,3700,3750,3800,3850,3900,3950,4000))

# Model
fit=glm(C3_proportion~poly(elevation, 2),data=df, family = "binomial")

# Plot 
ggplot(df, aes(x=elevation, y=C3_proportion)) +
  geom_point(aes(colour=mountain),alpha = 0.8) +
  geom_smooth(method = "glm", method.args = list(family = "binomial"), formula= y ~ poly(x,2), se = F,lwd=0.5, colour="black")+
  stat_smooth(method = "glm", method.args = list(family = "binomial"), formula= y ~ poly(x,2), colour = "black", lty="dotted", geom = "ribbon", fill = NA)+
  xlab("Elevation (m)") + ylab("Proportion of C3 genera")

但是,每当我尝试预测值时,我都无法在 y 轴上运行它,

> predict(fit, newdata = data.frame(C3_proportion=c(0.25,0.5,1)))
Error in poly(elevation, 2, coefs = list(alpha = c(2150, 2150), norm2 = c(1,  : 
  object 'elevation' not found

...即使我尝试使用 x 值这样做,预测的高程与图上拟合曲线显示的高程不一致。

# Predict values
predict(fit, newdata = data.frame(elevation=c(1000,2000,3000)))
#1           2           3 
#-0.88574136  0.07365174  1.03304484 

【问题讨论】:

  • 查找预测函数的参数'type'
  • 谢谢,@Dason。设置参数 type="response" 解决了绘制值和拟合值不一致的问题。关于如何使用 y_axis 预测 x 值的任何提示?我应该在 glm 调用中简单地切换订单吗?
  • 切换不起作用。但是有一些数字方法可以反转或近似您正在谈论的值

标签: r ggplot2 statistics glm


【解决方案1】:

使用广义线性模型,预测可以是响应规模或线性预测变量 (type = "link")。在 R 中,默认值是线性预测器的比例。另一种选择“响应”是在响应变量的范围内。因此,对于默认二项式模型,默认预测是对数赔率(logit 尺度上的概率),type = "response" 给出了预测概率。

【讨论】:

    猜你喜欢
    • 2020-11-14
    • 2012-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-01
    • 2020-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多