【发布时间】:2020-05-23 17:52:55
【问题描述】:
我做了一个相当简单的二项式回归模型:
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)
【问题讨论】:
-
predict(m_r, newdata=newdat, type="response")仅给出四个值,因此这些值被回收。但是我不知道为什么只有四个值返回,尽管你newdat数据框有 100 行,因为我不知道这个包。