我正在模拟每个医院在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,如本网站上通常建议的那样,但我开始认为潜在的问题可能在于如何设置数据框或模型?
如果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应该是字符串。
好的,因此,根据您在评论中提供的其他信息,我将在Pablo的回答上进行扩展。由于您实际上只对随时间变化的工作量感兴趣,因此唯一固定的影响应该是“月”。现在,您还说您拥有不同的医院以及这些医院所在的地区。这意味着您需要具有嵌套的随机效应结构,在这里您拥有属于不同地区的不同医院。您可以在此处阅读有关嵌套随机效果的更多信息:
http://errickson.net/stats-notes/vizrandomeffects.html
因此,您应该运行的最终模型将如下所示:
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)