我已经对患者的疾病筛查模式(每年、每两年或其他)进行了分类,现在希望根据该模式回归患者人口统计数据,同时调整初级保健提供者 (PCP) 的特征。我很确定这需要多项混合效应模型。
我的响应变量“Pattern”是一个具有 3 个无序因子的字符变量,我的分组变量是“PCP”,即 PCP 的 ID。这是一个简化的可重现示例:
df<-data.frame("ID"=seq(1:20),
"PCP"=rep((seq(1:10)*100),2),
"Pattern"=rep(c("Annual","Biennial","Biennial","Annual","Else"),4),
"Age"=runif(20,50,70))
df$PCP<-as.factor(as.character(df$PCP))
当我运行我认为回归应该是的内容时,我得到以下结果:
mod1<-glmer(Pattern~Age + (1|PCP), data=df)
Error in mkRespMod(fr, REML = REMLpass) : response must be numeric
In addition: Warning message:
In glmer(Pattern ~ Age + (1 | PCP), data = df) :
calling glmer() with family=gaussian (identity link) as a shortcut to lmer() is deprecated; please call lmer() directly
任何故障排除方面的帮助将不胜感激。
最佳答案
从错误消息中,我可以看到您的代码正在尝试使用 family = gaussian
拟合线性混合效应模型。在这种情况下,因变量必须是数字
,但您的Pattern
变量是因子
。为了适应二元(不是多项)混合效应模型,您可能需要定义family
:
library(lme4)
mod1<-glmer(Pattern~Age + (1|PCP), data=df, family = binomial)
summary(mod1)
正如 @user20650 所指出的,glmer
和 family = binomial
将结果变量转换为二进制。我无法使用 glmer
找到解决方案,但其他几个包可能会有所帮助,例如 nnet::multinom()
和 mlogit::mlogit()
.
mod1 <-nnet::multinom(Pattern ~ Age, data=df)
broom::tidy(mod1)
> broom::tidy(mod1)
# A tibble: 4 x 6
y.level term estimate std.error statistic p.value
<chr> <chr> <dbl> <dbl> <dbl> <dbl>
1 Biennial (Intercept) 0.0000124 6.70 -1.69 0.0916
2 Biennial Age 1.21 0.113 1.69 0.0901
3 Else (Intercept) 0.000800 7.36 -0.968 0.333
4 Else Age 1.12 0.125 0.884 0.377
关于r - glmer 中多项混合效应模型的估计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59556790/