我制作了一个相当简单的二项式回归模型:
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)
好,问题出在公式说明中。尽管已经指定了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