lme4的GLMM收敛问题

问题描述 投票:0回答:2

我正在模拟每个医院在1-112个月(约10年以上)的工作数量。随着时间的推移,工作数量随医院的不同而不同,因此我将以下多层模型定义为起点:

glmer.nb(Jobs ~ 1 + Region + Month + ( Month | factor(Region)),
                     data = df_month_region, 
                     family = poisson(link = "log"))

我的数据看起来与此非常相似:

df <- data.frame(
  Region = rep(1:14, each=112),
  Month = rep(seq(1,112,1),14),
  Job = rpois(112*14, 0.7)
)

我想知道:

1)以这种格式对数据建模是否有意义?分别为年份和月份创建一列是否更有意义?

2)如何克服此错误:“模型无法收敛,max | grad | = 0.00361688(tol = 0.001,组件1)模型几乎无法识别:特征值非常大”? -我已按照此处的步骤操作:https://rstudio-pubs-static.s3.amazonaws.com/33653_57fc7b8e5d484c909b615d8633c01d51.html,如本网站上通常建议的那样,但我开始认为潜在的问题可能在于如何设置数据框或模型?

r dataframe lme4 poisson
2个回答
0
投票

如果Region是字符串lme4自动检测到这是一个因素。您的模型具有随机截距和随机斜率。月作为随机斜率没有多大意义,月也是一个因素或块变量。

混合效果模型:

glmer(Jobs ~ 1  + ( 1 | Region) + (1| Month),
                 data = df_month_region, 
                 family = poisson(link = "log"))

固定效果模型:

glm(Jobs ~ 1  + Region + Month,
                 data = df_month_region, 
                 family = poisson(link = "log"))

Month和Region应该是字符串。


0
投票

好的,因此,根据您在评论中提供的其他信息,我将在Pablo的回答上进行扩展。由于您实际上只对随时间变化的工作量感兴趣,因此唯一固定的影响应该是“月”。现在,您还说您拥有不同的医院以及这些医院所在的地区。这意味着您需要具有嵌套的随机效应结构,在这里您拥有属于不同地区的不同医院。您可以在此处阅读有关嵌套随机效果的更多信息:

http://errickson.net/stats-notes/vizrandomeffects.html

https://stats.stackexchange.com/questions/228800/crossed-vs-nested-random-effects-how-do-they-differ-and-how-are-they-specified

因此,您应该运行的最终模型将如下所示:

job_model <- glmer(Jobs ~ Month + (1|Region/Hospital),
                     data = df_month_region, 
                     family = poisson(link = "log"))

为了查看Month是否显着改善了模型,您还应该拟合以下模型进行比较。

job_model_null <- glmer(Jobs ~ 1 + (1|Region/Hospital),
                     data = df_month_region, 
                     family = poisson(link = "log"))

然后您将它们与使用anova()函数的似然比检验进行比较,如下所示:

anova(job_model, job_model_null)
© www.soinside.com 2019 - 2024. All rights reserved.