我正在模拟每家医院在第 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 本网站上通常推荐的,但我开始认为潜在的问题可能在于我如何设置数据帧或模型?
好的,根据您在评论中提供的其他信息,我将扩展 Pablo 的答案。由于您实际上只对作业数量随时间的变化感兴趣,因此您唯一的固定效果应该是 Month。现在,你还说你有不同的医院和这些医院所在的地区。这意味着你需要有一个嵌套的随机效应结构,其中你有不同的医院属于不同的区域。您可以在此处阅读有关嵌套随机效果的更多信息:
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)
编辑: 如果您希望将 Month 的随机斜率拟合到随机效果中,它将如下所示:
job_model <- glmer(Jobs ~ Month + (1+Month|Region/Hospital),
data = df_month_region,
family = poisson(link = "log"))
如果区域是字符串 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"))
月份和区域应为字符串。