我已经对患者的疾病筛查模式进行了分类(每年,每两年一次或其他),现在我想根据这种模式对患者的人口统计数据进行回归,同时调整初级保健提供者(PCP)的特征。我很确定这需要多项混合效果模型。
我的响应变量“模式”是一个具有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
在故障排除方面的任何帮助将不胜感激。
答案 0 :(得分:1)
从错误消息中,我可以看到您的代码正在尝试使用family = gaussian
来拟合线性混合效应模型。在这种情况下,因变量需要为numeric
,但您的Pattern
变量为factor
。要适合二进制(不是多项式)混合效果模型,您可能需要定义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