【问题标题】:How to extract random intercepts from mixed effects Tidymodels如何从混合效果 Tidymodels 中提取随机截距
【发布时间】:2021-08-31 22:03:46
【问题描述】:

我正在尝试使用 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() 

使用 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()

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

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

【问题讨论】:

    标签: r lme4 tidymodels


    【解决方案1】:

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

    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)))
    

    如果你真的想要随机截取(仅)我猜你可以predicted_df_tidy %&gt;% filter(Days==0)

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

    【讨论】:

    • purrr::cross_df() 是个好建议!调查一下,它看起来可能会因为 tidyr::expand_grid() github.com/tidyverse/purrr/issues/406 而贬值
    • 啊,我跟不上 tidyverse。
    • 我也没有!我在 tidymodels 上坚持了这么久,但我正在努力!
    猜你喜欢
    • 2019-09-05
    • 2018-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多