为什么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)
igpredict(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