【问题标题】:Can group by and tidy be used to fit multilevel models (lme) to repeated measures/longitudinal data?是否可以使用 group by 和 tidy 将多级模型 (lme) 拟合到重复测量/纵向数据?
【发布时间】:2018-07-30 15:30:53
【问题描述】:

考虑以下示例纵向/重复测量数据集

library(tidyverse)
library(broom)
library(nlme)

data <- read.csv("https://stats.idre.ucla.edu/stat/data/study2.csv")
data <- data %>% mutate(dbp =rnorm(120, 30:150), sbp = rnorm(120, 50:200),bmi 
= rnorm(120,15:40), chol = rnorm(120,50:350), insulin = rnorm(120,2:40), educ = rnorm(120,5:10))

我可以使用group_by %&gt;% do(tidy(*)) 运行几个未调整和调整的单级回归模型(循环通过结果和风险列表)并将模型结果提取到数据框,如下所示

out <-c("pulse","insulin","chol")
exp <- c("factor(exertype)","sbp","dbp")
conf <- c("bmi","factor(diet)")

#Unadjusted models - single level regression (lm)
#################################################
Unadjusted <- expand.grid(out, exp) %>%
group_by(Var1) %>% rowwise() %>%
summarise(frm = paste0(Var1, "~", Var2)) %>%
group_by(model_id = row_number(),frm) %>%
do(tidy(lm(.$frm, data = data))) %>%
mutate(lci = estimate-(1.96*std.error)) %>%
mutate(uci = estimate+(1.96*std.error))

#Adjusted models - single level regression (lm)
###############################################
Adjusted <- expand.grid(out, exp, conf) %>%
group_by(Var1, Var2) %>%
summarise(Var3 = paste0(Var3, collapse = "+")) %>%
rowwise() %>%
summarise(frm = paste0(Var1, "~", Var2, "+", Var3)) %>%
group_by(model_id = row_number(), frm) %>%
do(tidy(lm(.$frm, data = data))) %>%
mutate(lci = estimate-(1.96*std.error)) %>%
mutate(uci = estimate+(1.96*std.error))

我想使用相同的过程来拟合 多级 模型来解释重复数据。使用示例代码:

lme(sbp ~ pulse+factor(diet)+time, data=data, random= ~time|id, method ="ML")

但是,当我尝试这样做时,例如使用:

#Unadjusted models - multi-level regression (lme)
#################################################
Unadjusted <- expand.grid(out, exp) %>%
group_by(Var1) %>% rowwise() %>%
summarise(frm = paste0(Var1, "~", Var2)) %>%
group_by(model_id = row_number(),frm) %>%
do(tidy(lme(.$frm, data = data, random= ~time|id, method = "ML"))) %>%
mutate(lci = estimate-(1.96*std.error)) %>%
mutate(uci = estimate+(1.96*std.error))

我收到以下错误消息:

Error in UseMethod("lme") : no applicable method for 'lme' applied to an object of class "character"

关于如何使其适用于 lme 类型模型的任何想法?

【问题讨论】:

    标签: r data-manipulation multi-level nlme longitudinal


    【解决方案1】:

    lm 不同,lme 不接受将公式作为字符值。您需要将其显式转换为公式。尝试添加as.formula()

    do(tidy(lme(as.formula(.$frm), ...))) %>%
    

    【讨论】:

    • 谢谢,使用 as.formula 让它运行但输出看起来很奇怪/不正确 - 它给出了不同级别而不是整体的结果,而且它不包括 SE 来推导置信区间??
    • 你能用lme直接运行这些模型吗?它会给出你想要的结果吗?您没有包含所需的结果。我只能摆脱你列出的错误。
    • 我已经找到了问题所在——我需要在调用整洁的数据框时指定“效果 =“固定””。谢谢
    猜你喜欢
    • 2018-10-27
    • 2021-05-25
    • 2011-01-05
    • 2020-07-16
    • 2021-12-23
    • 2013-10-06
    • 1970-01-01
    • 2010-12-22
    • 2011-08-14
    相关资源
    最近更新 更多