r - 如何从混合效果中提取随机截距 Tidymodels

标签 r lme4 tidymodels

我正在尝试使用 lme4multilevelmod 从 tidymodels 中提取随机截取。我可以使用下面的 lme4 来做到这一点:

使用 R 和 lme4:

library("tidyverse")
library("lme4")

# set up model
mod <- lmer(Reaction ~ Days + (1|Subject),data=sleepstudy)

# create expanded df
expanded_df <- with(sleepstudy,
                    data.frame(
                      expand.grid(Subject=levels(Subject),
                                  Days=seq(min(Days),max(Days),length=51))))

# create predicted df with **random intercepts**
predicted_df <- data.frame(expanded_df,resp=predict(mod,newdata=expanded_df))

predicted_df 

# plot intercepts
ggplot(predicted_df,aes(x=Days,y=resp,colour=Subject))+
       geom_line() 

enter image description here

使用 tidymodels:

# example from
# https://github.com/tidymodels/multilevelmod
library("multilevelmod")
library("tidymodels")
library("tidyverse")
library("lme4")
#> Loading required package: parsnip
data(sleepstudy, package = "lme4")


# set engine to lme4
mixed_model_spec <- linear_reg() %>% set_engine("lmer")


# create model
mixed_model_fit_tidy <- 
  mixed_model_spec %>% 
  fit(Reaction ~ Days + (1 | Subject), data = sleepstudy)


expanded_df_tidy <- with(sleepstudy,
                    data.frame(
                      expand.grid(Subject=levels(Subject),
                                  Days=seq(min(Days),max(Days),length=51))))



predicted_df_tidy <- data.frame(expanded_df_tidy,resp=predict(mixed_model_fit_tidy,new_data=expanded_df_tidy))


ggplot(predicted_df_tidy,aes(x=Days,y=.pred,colour=Subject))+
       geom_line()

enter image description here

使用 predict() 函数似乎只能给出固定效应预测。

有没有办法从 tidymodels 和 multilevelmod 中提取随机截取?我知道该包仍在开发中,因此现阶段可能无法实现。

最佳答案

我认为您可以按如下方式解决此问题:

predicted_df_tidy <- mutate(expanded_df_tidy,
       .pred = predict(mixed_model_fit_tidy,
                       new_data=expanded_df_tidy, 
                       type = "raw", opts=list(re.form=NULL)))

prediction plot with random intercepts

如果您确实想要随机拦截(仅),我想您可以predicted_df_tidy %>% filter(Days==0)

PS如果你想对此更加“整洁”,我认为你可以使用purrr::cross_df()代替expand.grid并通过管道传输结果直接到 mutate() ...

关于r - 如何从混合效果中提取随机截距 Tidymodels,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69005765/

相关文章:

regex - 如何将度分秒转换为 R 中的十进制?

r - 从explain_tidymodels更改颜色图

r - 使用 tidymodels 和 treesnip 包的 LightGBM 算法出错

r - 确定 NA 部分的开始和结束条款

r - 如何用 > < 表示最高和最低值?

引用之前的观察并将字符串与 R 中的条件连接起来

r - Tidymodels 逻辑回归获取系数和标准误差

r - 修复 lme4 中的方差值

R 线性混合效应 - 查找个体固定效应方差(以%为单位)

r - 用 emtrends 得到简单效应的意义