【问题标题】:How to estimate multilevel Poisson models in lme4 with large count values?如何估计 lme4 中具有大计数值的多级泊松模型?
【发布时间】:2016-12-26 21:55:23
【问题描述】:

案例: 我正在尝试估计从 55 个起源区 (IDo) 到 54 个目的地区 (IDd) 的迁移重力模型 (mig)。两个重要的预测变量是每个起点和终点区域之间的距离 (dist) 和任何起点-终点对的连续性 (contig) 的指示变量。迁移结果变量是衡量在成对地区之间迁移的人数(范围从零到几千)。下面是一个近似我的数据情况的测试数据集。在实际数据中,迁移结果变量的泊松分布稍微不太理想 (min=0, max=9450, mean=85, median=10)。

library(lme4)

#*** Generate test data set
set.seed=777
td=data.frame(IDo=rep(1:55,each=55),IDd=rep(1:55,times=55),dist=runif(3025,0.186,12.7),contig=rbinom(3025,1,p=0.08), stringsAsFactors=F)
td=td[td$IDo!=td$IDd,]              # remove cases for which origin and destination are the same
td=rbind(td,td)                     # dublicate data for two years
td$year=rep(c(1,0),each=2970)       # generate year dummy variable
td$mig=rpois(5940, lambda = 1)*1000 # generate migrant count variable

# Cross-classified random effects Poisson models
m1=formula(mig~dist+contig+year+(1|IDo)+(1|IDd))
fm0=glmer(m1,data=td,family="poisson",control=glmerControl(optimizer="bobyqa"), nAGQ=0) # Adaptive Gauss-Hermite Quadrature
fm1=glmer(m1,data=td,family="poisson",control=glmerControl(optimizer="bobyqa"), nAGQ=1) # Laplace Approximation

# Regular Poisson models
m2=formula(mig~dist+contig+year+factor(IDo)+factor(IDd))
fm2=glm(m2,data=td,family="poisson")

问题: 我正在使用lme4 运行交叉分类的多级泊松模型。在使用默认的 nAGQ=1 设置 (fm1) 时,我总是收到以下警告消息,并且在实际数据情况下,模型无法收敛 (In checkConv(attr(opt, "derivs"), opt$par, control$checkConv Model failed to converge with max|grad| = 0.00248588 (tol = 0.001, component 1))。

Warning message:
In checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
  Model is nearly unidentifiable: very large eigenvalue
 - Rescale variables?

但是,设置 nAGQ=0 (fm0) 或将其作为常规固定效应模型 (fm2) 运行时不会出现此问题。

有没有人建议如何做才能避免此警告消息背后的问题(并导致真实数据中的收敛问题)?预测变量的规模都相当小,所以无需重新调整这些变量。我可能会重新调整我的结果变量以具有更小的值 (td$mig=round(td$mig/1000,0)) 但这会改变分布并且不应该按照this post 中的指示进行。

【问题讨论】:

  • 参见this cross-validated 对收敛失败的讨论。如果你还没有。
  • 我刚刚看了关于收敛失败的讨论。但我不完全确定我的问题是否与求解器问题有关,或者更多的是当计数值过高时无法使用泊松模型的一般问题。另一方面,泊松模型是专门为这类计数数据设计的,我真的不明白为什么“模型几乎无法识别”。
  • 我的回答解决了您的问题/回答了您的问题吗?
  • @BenBolker 是的,感谢您的帮助!虽然它不能解决我在真实数据中遇到的问题,但使用不同的优化器可以消除用例中的警告。

标签: r lme4 poisson


【解决方案1】:

我真的认为这是误报;拥有如此大数量的计数数据是不寻常的......您是否尝试过使用不同的优化器(请参阅?lme4::convergence)? (我刚刚用control=glmerControl(optim="nloptwrap") 尝试了你的例子,得到了几乎相同的结果。)

我有点担心你的分布假设。我知道这只是一个可重现的例子,但是绘制一个泊松样本并将其乘以 1000 并不会给你一个泊松分布的值......这是一个模拟第 90 个分布的后验预测模拟拟合模型下响应的分位数 -- 方式 与观察值不同 ...

ss <- simulate(fm1,1000,seed=101)
qq <- sapply(ss,quantile,0.9)
hist(qq,breaks=50,col="gray")
summary(qq)
##   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   1106    1153    1167    1168    1182    1255 
quantile(td$mig,0.9) ## 2000

【讨论】:

  • 您对我的人工泊松变量的大值分布是绝对正确的。问题是我真的不知道如何生成计数值在 0 到 9000 范围内的泊松分布变量。但是,我不认为这种情况是“不寻常的”。在较大的聚合单位(例如,县、州、地区、国家等),您通常会以大量特定现象(例如,每个县的事故数量、一个地区的疟疾感染人数、一个国家的儿童体重不足等)。
  • 以下是对我的真实数据使用 lme4::convergence 测试的结果: 1. 我重新调整了自变量(使用比例),但仍然出现收敛失败和大特征值警告。 2. 没有可检测到的奇点问题 any(diag.vals
  • 所以我不得不得出结论,lme4 Poisson 例程对大计数值非常敏感。
猜你喜欢
  • 2018-02-10
  • 2011-08-26
  • 1970-01-01
  • 2021-02-26
  • 1970-01-01
  • 2022-08-04
  • 1970-01-01
  • 1970-01-01
  • 2019-12-02
相关资源
最近更新 更多