为什么predict()函数为我的GLM循环使用相同的四个值?

为什么predict()函数为我的GLM循环使用相同的四个值?,r,glm,predict,mle,R,Glm,Predict,Mle,我建立了一个相当简单的二项回归模型: 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

我建立了一个相当简单的二项回归模型:

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
newdat <- data.frame(river_dist=seq(min(ig$river_dist), max(ig$river_dist),len=100))
我做错了什么

编辑:通过在我的模型中将“ig$river_dist”更改为“river_dist”,我可以生成看起来像真实预测的结果,但它们仍然遵循一个四值循环(每次略有变化),在我的图形中生成之字形,而不是我所期望的斜率或曲线。如果有人能解释原因,我将不胜感激!我的阴谋:

plot(v~river_dist, data=ig, col="red4")
lines(v ~ river_dist, newdat, col="green4", lwd=2)

好的,问题出在配方说明书上。您将
river\u dist
变量称为
ig$river\u 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
库(bbmle)

ig好,问题出在配方说明书上。您将
river\u dist
变量称为
ig$river\u 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
库(bbmle)

ig
predict(m_r,newdata=newdat,type=“response”)
仅给出四个值,因此这些值被循环使用。但我不知道为什么只有四个值返回,尽管您
newdat
数据帧有100行,因为我不知道这个包。
predict(m_r,newdata=newdat,type=“response”)
只给出四个值,因此这些值被回收。但是我不知道为什么只有四个值返回,尽管您
newdat
数据帧有100行,因为我不知道这个包。谢谢!这至少解决了部分问题。这些数字仍然有一个奇怪的循环(约220,约9-10,约20,约12),在我的情节中创造了疯狂的之字形,而不是我所期待的柔和曲线。(我将编辑文章以显示打印命令)。这可能是我的建模策略的问题,而不是代码本身的问题?有什么想法吗?是的,我明白了。没有抱歉没有想法,不熟悉这种造型。希望我能帮上忙。也许可以尝试交叉验证来获得建模部分的帮助。谢谢!这至少解决了部分问题。这些数字仍然有一个奇怪的循环(约220,约9-10,约20,约12),在我的情节中创造了疯狂的之字形,而不是我所期待的柔和曲线。(我将编辑文章以显示打印命令)。这可能是我的建模策略的问题,而不是代码本身的问题?有什么想法吗?是的,我明白了。没有抱歉没有想法,不熟悉这种造型。希望我能帮上忙。也许可以尝试交叉验证以获得建模部分的帮助。
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