使用ggpredict绘制每日日记研究图时出现droplevels方法错误
解决
ggpredict处理Date类对象时的droplevels报错问题 我在每日日记研究中绘制压力值随时间变化的图表时,遇到了如下报错:
Error in UseMethod("droplevels") :
no applicable method for 'droplevels' applied to an object of class "Date".
报错出现在ggpredict(stress, ~date) %>% plot()这一行。教授协助编写的代码在他电脑上能正常运行,但在我这边不行,代码如下:
library(lme4) library(lmerTest) library(emmeans) library(ggeffects) library(tidyverse) require(lubridate) dat$date <- as.Date(dat$date) dat$participant <- as.factor(dat$participant) #1 stress stress <- lmer(stress ~ date + (1 | participant), data = dat, REML = F) summary(stress) #summary of model output emmeans(stress, ~date) #estimated marginal means ggpredict(stress, ~date) %>% plot() p <- ggplot(dat, aes(y=stress, x=date, group=participant, color=participant)) + geom_point() + geom_smooth(method='glm', se=FALSE)
解决方法
优先更新包版本:这个报错大概率是你电脑上的
ggeffects或相关依赖包版本过旧,不支持直接对Date类型变量执行droplevels操作。教授的环境包版本更新,所以能正常运行。直接更新所有相关包即可:update.packages(c("lme4", "lmerTest", "emmeans", "ggeffects", "tidyverse", "lubridate"))更新完重启R会话再运行代码。
临时替代方案(无法更新包时):把
date转成数值型变量拟合模型,获取预测后再转回Date类型绘图:# 给数据集添加数值型日期列 dat$date_num <- as.numeric(dat$date) # 重新拟合模型 stress <- lmer(stress ~ date_num + (1 | participant), data = dat, REML = F) # 获取预测结果并把数值转回日期 pred_result <- ggpredict(stress, ~date_num) pred_result$x <- as.Date(pred_result$x, origin = "1970-01-01") # 绘图 plot(pred_result)检查
emmeans调用:原代码里emmeans(stress, ~date)对Date变量的处理也可能有版本兼容问题,如果更新包后还是有问题,可以改用emtrends分析时间趋势:emtrends(stress, ~1, var = "date")
内容的提问来源于stack exchange,提问作者Bella
相关产品推荐
相关产品推荐

