我正在尝试应用一个函数,总结曝光变量(exp
)与几个结果变量(out1
,out2
等)之间的线性关系。考虑以下玩具数据,以及辅助函数,以在两个变量之间拟合模型并返回所需的输出:
library(dplyr)
df <- tibble(group = sample(c("a", "b"), size = 100, replace = T),
exp = rnorm(100),
out1 = rnorm(100, 4, 1),
out2 = rnorm(100, 3, 1))
linear_beta <- function(y, x) {
tidy(lm(y ~ x)) %>%
filter(term == "x") %>%
mutate(return = paste0("Beta = ", round(estimate, 2))) %>%
pull(return)
}
如果我使用辅助函数来总结暴露与两个组的单一结果之间的关系,那么
df %>%
group_by(group) %>%
summarize(out1 = linear_beta(out1, exp))
# # A tibble: 2 x 2
# group out1
# <chr> <chr>
# a Beta = 0.01
# b Beta = 0.11
但是,当我尝试使用summarize_at
并找到out1
和out2
的关系时,我收到错误
df %>%
group_by(group) %>%
summarize_at(c("out1", "out2"), linear_beta, .$exp)
summarise_impl(.data,dots)出错:评估错误:变量 长度不同(找到'x')。
我可以说,结果和.$exp
的长度应该相同,但显然我遗漏了一些东西。任何帮助将不胜感激!
更新
似乎第二个参数.$exp
没有应用分组 - 正如这可以证明的那样。
df %>%
# group_by(group) %>%
summarize_at(c("out1", "out2"), linear_beta, .$exp)
# # A tibble: 1 x 2
# out1 out2
# <chr> <chr>
# Beta = 0.08 Beta = 0.06
我不清楚如何将分组应用于.$exp
,或者甚至可能......
答案 0 :(得分:1)
我们可以尝试
df %>%
nest(-group) %>%
mutate(Col = map(data, ~ .x %>%
summarise_at(c('out1', 'out2'), linear_beta, .$exp))) %>%
select(group, Col) %>%
unnest
# A tibble: 2 x 3
# group out1 out2
# <chr> <chr> <chr>
#1 a Beta = -0.22 Beta = 0.27
#2 b Beta = 0.1 Beta = 0.06