gpt4 book ai didi

r - 从 R 中的线性模型列表映射 emmeans

转载 作者:行者123 更新时间:2023-12-04 01:52:22 25 4
gpt4 key购买 nike

我有一个超过 100 个线性模型的列表,我想为每个模型获取估计均值和标准误差。

让我们以 mtcars 为例。

库(tidyverse);图书馆(magrittr);库(emmeans)

mtcars %<>% 
mutate(
cyl = as.factor(cyl)
)

df <- mtcars %>% select(cyl, hp, mpg)

我可以使用 emmeans 轻松获得每个模型的估计均值和标准误差:

mod <- lm(hp ~ cyl, data = df)
emmeans(mod, "cyl")

但是如果我有一个模型列表呢?

list_lm <- df %>% 
select(-c(cyl)) %>%
map(function(dv) lm(dv ~ df$cyl, data = .))

我不能使用:

emmeans(list_lm$hp, "cyl")
Error in ref_grid(object, ...) : Perhaps a 'data' or 'params' argument is needed

理想情况下,我想要一些东西可以为我提供所有模型的这些统计数据。对于模型的系数,类似于 broom::tidy,但对于 emmeans:

list_lm %>% 
map(broom::tidy)

最佳答案

您的直觉是正确的。该解决方案需要将中间结果保存在列表列中,然后将它们解包,但考虑到 emmeans 输出的结构,broom::tidy() 不是必需的。只需将 emmeans 输出转换为 data.frames 和 unnest() 的列表列。

library(dplyr)
library(purrr)
library(tidyr)
library(emmeans)

ds_mtcars <-
mtcars %>%
mutate(cyl = as.factor(cyl))

ds_nest <-
ds_mtcars %>%
group_by(am) %>%
nest()

foo_model <- function(data){
lm(hp ~ cyl, data = data)
}

ds_nest <- ds_nest %>% mutate(model = map(.x = data, .f = foo_model))

ds_temp <-
ds_nest %>%
mutate(
emmeans = pmap(
.l = list(
object = model,
specs = "cyl"
),
.f = emmeans
)
)

ds_temp %>%
mutate(emm2 = map(emmeans, data.frame)) %>%
unnest(emm2)

还有 purrr 函数 map()pmap() 可能会让人费解,但我尽力自己走新用户通过我的这些功能 blog .

关于r - 从 R 中的线性模型列表映射 emmeans,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52396105/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com