为什么predict()函数为我的GLM回收相同的四个值?

问题描述 投票:1回答:1

我制作了一个相当简单的二项式回归模型:

m_r <- mle2(ig$v ~ dbinom(size=ig$n, prob = 1/(1+exp(-(a + br * ig$river_dist)))),
    start = list(a = 0, br = 0), data = ig)

基于此数据框:

> ig
    v   n ig_dist river_dist tam_dist       site
1 102 256     950       1040     1040     Boveda
2   1  11    4800        720      832 Cuchaconga
3  19  24    2000        475      475   Ishpingo
4  12  15    3400        611      800    La Joya

现在,我想绘制一系列可能的'river_dist'值的预测结果。为此,我创建了一个新的数据框:

newdat <- data.frame(river_dist=seq(min(ig$river_dist), max(ig$river_dist),len=100))

并尝试根据模型添加预测值:

newdat$v <- predict(m_r, newdata=newdat, type="response")

但是它似乎一遍又一遍地循环使用相同的四个值(简短的样本,但是数字不断重复):

> head(newdat)
  river_dist         v
1   475.0000 95.110424
2   480.7071  7.450936
3   486.4141 20.330167
4   492.1212 11.456229
5   497.8283 95.110424
6   503.5354  7.450936

我在做什么错?

编辑:通过在模型中将'ig $ river_dist'更改为'river_dist',我可以产生看起来像真实的预测的结果,但是它们仍遵循四个值的周期(每次都有微小的变化),在我的图形中产生锯齿形,而不是我期望的斜率或曲线。如果有人可以解释原因,我将不胜感激!我的情节:

plot(v~river_dist, data=ig, col="red4")
lines(v ~ river_dist, newdat, col="green4", lwd=2)
r glm predict mle
1个回答
0
投票

好,问题出在公式说明中。尽管已经指定了data参数,但您将river_dist变量称为ig$river_dist。因此,拟合过程中使用的变量名与predict函数使用的数据的变量名不匹配。

library(bbmle)

ig <- tibble::tribble(
    ~v,   ~n, ~ig_dist, ~river_dist, ~tam_dist,        ~site,
  102L, 256L,     950L,       1040L,     1040L,     "Boveda",
    1L,  11L,    4800L,        720L,      832L, "Cuchaconga",
   19L,  24L,    2000L,        475L,      475L,   "Ishpingo",
   12L,  15L,    3400L,        611L,      800L,    "La Joya"
  )

m_r <- mle2(ig$v ~ dbinom(size=ig$n, prob = 1/(1+exp(-(a + br * river_dist)))),
            start = list(a = 0, br = 0), data = ig)

newdat <- data.frame(river_dist=seq(min(ig$river_dist), max(ig$river_dist),len=100))

newdat$v <- predict(m_r, newdata=newdat, type="response")

head(newdat$v)

#> [1] 216.855114   9.285536  20.187424  12.571487 213.762248   9.150584
© www.soinside.com 2019 - 2024. All rights reserved.