为什么我的GLM的预测值是周期性的?

劳伦·普拉特(Lauren Pratt)

我写了一个二项式回归模型来预测火成石的流行率,该模型是v基于考古学上与河流的距离river_dist,但是当我使用predict()函数时,我得到的是奇怪的周期性结果,而不是我期望的曲线。供参考,我的数据:

    v   n river_dist
1 102 256       1040
2   1  11        720
3  19  24        475
4  12  15        611

我适合此模型:

library(bbmle)
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)

这产生了一个系数,当进行逆变换时,该系数表明从河中每米的火成岩可能性降低约0.4%(br = 0.996):

exp(coef(m_r))

很好 但是,当我尝试预测新值时,会出现以下奇怪的值循环:

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")
plot(v~river_dist, data=ig, col="red4")
lines(v ~ river_dist, newdat, col="green4", lwd=2)

预测值示例:

   river_dist          v
1     475.0000 216.855114
2     480.7071   9.285536
3     486.4141  20.187424
4     492.1212  12.571487
5     497.8283 213.762248
6     503.5354   9.150584
7     509.2424  19.888471
8     514.9495  12.381805
9     520.6566 210.476312
10    526.3636   9.007289
11    532.0707  19.571218
12    537.7778  12.180629

为什么这些值会像这样上下波动,在绘制图表时产生疯狂的峰值?

本·博克

为了newdata工作,您必须将变量指定为“原始”值,而不是使用$

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

此时,如@ user20650所建议,您还必须为nin指定一个值(或多个值)newdata

该模型似乎与二项式回归相同:是否有理由不使用

glm(cbind(v,n-v) ~ river_dist, data=ig, family=binomial) 

bbmle:mle2更笼统,但glm更健壮。)(另外:将两个参数拟合到四个数据点在理论上还可以,但是您不应尝试将结果推得过高……尤其是许多默认结果来自GLM / MLE渐近...)

实际上,在仔细检查MLE与GLM的对应关系时,我意识到默认方法(出于历史原因,“ BFGS”)实际上没有给出正确的答案(!);切换到method="Nelder-Mead"改善。添加control=list(parscale=c(a=1,br=0.001))到参数列表缩放河流距离(例如从“ 1 m”到“ 100 m”或“ 1 km”作为单位),也可以解决此问题。

m_r <- mle2(v ~ dbinom(size=n,
        prob = 1/(1+exp(-(a + br * river_dist)))),
            start = list(a = 0, br = 0), data = ig,
            method="Nelder-Mead")
pframe <- data.frame(river_dist=seq(500,1000,length=51),n=1)
pframe$prop <- predict(m_r, newdata=pframe, type="response")
CIs <- lapply(seq(nrow(ig)),
              function(i) prop.test(ig[i,"v"],ig[i,"n"])$conf.int)
ig2 <- data.frame(ig,setNames(as.data.frame(do.call(rbind,CIs)),
              c("lwr","upr")))
library(ggplot2); theme_set(theme_bw())
ggplot(ig2,aes(river_dist,v/n))+
    geom_point(aes(size=n)) +
    geom_linerange(aes(ymin=lwr,ymax=upr)) +
    geom_smooth(method="glm",
                method.args=list(family=binomial),
              aes(weight=n))+
    geom_line(data=pframe,aes(y=prop),colour="red")

在此处输入图片说明

最后,请注意,您位于第三远的站点是一个离群值(尽管样本量较小,意味着伤害不大)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么周期性进口问题消失了?

来自分类Dev

为什么我的ListAdapter周期性地显示项目?

来自分类Dev

为什么在设置多个dropdownlists的值时出现周期性的Uncaught TypeError:无法读取undefined的属性“ value”?

来自分类Dev

为什么Windows中的删除速度经常是周期性的?

来自分类Dev

为什么我的二项式GLM有多个预测行?

来自分类Dev

为什么我的 TensorFlow NN 模型的预测值有上限?

来自分类Dev

使用netwire的周期性vs.at

来自分类Dev

周期性后台任务

来自分类Dev

在算法信号中找到周期性

来自分类Dev

比较周期性数据的快速方法

来自分类Dev

检测数据帧中的周期性

来自分类Dev

用python卷积周期性图像

来自分类Dev

周期性的wifi连接中断

来自分类Dev

游戏期间的周期性滞后

来自分类Dev

Matlab中的周期性结构

来自分类Dev

周期性灰度颜色图

来自分类Dev

熊猫:滚动周期性边界

来自分类Dev

确定列表是否是周期性的python

来自分类Dev

shared_ptr的周期性依赖关系问题是什么?

来自分类Dev

shared_ptr的周期性依赖关系问题是什么?

来自分类Dev

Nginx反向代理的吞吐量周期性下降,那是什么?

来自分类Dev

屏幕边缘出现模糊的、周期性重复的线条的原因可能是什么?

来自分类Dev

具有周期性边界条件的2D插值

来自分类Dev

具有周期性边界条件的2D插值

来自分类Dev

像周期性学习率一样如何做周期性动量?

来自分类Dev

为什么我的预测误差为零?

来自分类Dev

为什么“自我预测”比“从输入预测”差?

来自分类Dev

谁能找出我在录音设备上播放音频时周期性出现的数字失真的原因?

来自分类Dev

如何找到带有R的3D数组(沿维度时间)中周期性出现的NA值

Related 相关文章

热门标签

归档