r - 是否可以使用 group by 和 tidy 将多级模型 (lme) 拟合到重复测量/纵向数据?
问题描述
考虑以下示例纵向/重复测量数据集
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 %>% 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 类型模型的任何想法?
解决方案
不像lm
,lme
不会接受公式作为字符值。您需要将其显式转换为公式。尝试添加as.formula()
do(tidy(lme(as.formula(.$frm), ...))) %>%
推荐阅读
- r - 在 ubuntu 16.04 上安装 rgdal
- php - jQuery Validate 在 PHP 中无法正常工作
- python - 如何切片 MultiIndex 和列?
- c# - C# WFP 不确定进度条动画
- javascript - 如何使用输入组件数组中的输入值创建一个数组?
- java - 将火花行对象转换为 java pojo
- python - 如何在 Python 3 中划分列表列表?
- mule - vars 在 Mule 4 中的 http 请求者的主体中没有被评估
- php - AMPPS:Apache 使用端口 8080,可以访问 Wordpress 管理员,但无法加载主页
- sql-server - SQL Server 共享中可见的两个 FileTable