- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
对我来说,一个常见的情况是,我需要运行基本相同的回归模型,但针对一系列不同的结果,并且对于敏感性分析,我同时需要迭代不同的协变量集。
我对 R 还很陌生,但是使用下面的 purrr 我可以迭代结果和协变量,但它当然会并行地遍历成对的列表,当我需要它遍历每个组合时每个列表。
对于如何迭代结果和协变量的所有组合有哪些选项?
另外,有谁知道为什么下面的代码不适用于“map2”?我收到错误消息“as_mapper(.f, ...):参数“.f”丢失,没有默认值”
library(dplyr)
library(purrr)
dataset <- tibble(
y1=rnorm(n=100),
y2=rnorm(n=100),
x1=rnorm(n=100),
x2=rnorm(n=100))
outcomes <- dataset %>%
select(y1,y2)
covars <- dataset %>%
select(x1,x2)
paramlist <- list(covarL,outcomeL)
paramlist %>%
pmap(~lm(.y ~ .x,data=dataset))
最佳答案
在更大的 tidyverse 中,有很多方法可以做到这一点。我是dplyr::rowwise
的粉丝对于这种计算。我们可以使用colnames
而不是实际数据,然后创建一个像 tibble
这样的矩阵与 tidyr::expand_grid
其中包含结果和协变量的所有组合。然后我们可以使用dplyr::rowwise
并使用lm
里面list()
与 reformulate
一起它接受字符串作为输入。要获得结果,我们可以使用 broom::tidy
.
library(dplyr)
library(purrr)
library(tidyr)
dataset <- tibble(
y1=rnorm(n=100),
y2=rnorm(n=100),
x1=rnorm(n=100),
x2=rnorm(n=100))
outcomes <- dataset %>%
select(y1,y2) %>% colnames
covars <- dataset %>%
select(x1,x2) %>% colnames
paramlist <- expand_grid(outcomes, covars)
paramlist %>%
rowwise %>%
mutate(mod = list(lm(reformulate(outcomes, covars), data = dataset)),
res = list(broom::tidy(mod)))
#> # A tibble: 4 x 4
#> # Rowwise:
#> outcomes covars mod res
#> <chr> <chr> <list> <list>
#> 1 y1 x1 <lm> <tibble [2 x 5]>
#> 2 y1 x2 <lm> <tibble [2 x 5]>
#> 3 y2 x1 <lm> <tibble [2 x 5]>
#> 4 y2 x2 <lm> <tibble [2 x 5]>
由 reprex package 于 2021 年 9 月 6 日创建(v2.0.1)
我们可以用 {purrr} 代替 dplyr::rowwise
做同样的事情:
paramlist %>%
mutate(mod = map2(outcomes, covars, ~ lm(reformulate(.y, .x), data = dataset)),
res = map(mod, broom::tidy))
#> # A tibble: 4 x 4
#> outcomes covars mod res
#> <chr> <chr> <list> <list>
#> 1 y1 x1 <lm> <tibble [2 x 5]>
#> 2 y1 x2 <lm> <tibble [2 x 5]>
#> 3 y2 x1 <lm> <tibble [2 x 5]>
#> 4 y2 x2 <lm> <tibble [2 x 5]>
由 reprex package 于 2021 年 9 月 6 日创建(v2.0.1)
另一个纯 {purrr} 解决方案是使用嵌套 map
称呼。由于它是嵌套的,我们需要 flatten
我们可以使用map(summary)
之前的结果在他们身上。
# outcomes and covars are the same strings as above
outcomes %>%
map(~ map(covars, function(.y) lm(reformulate(.y, .x), data = dataset))) %>%
flatten %>%
map(summary)
#> [[1]]
#>
#> Call:
#> lm(formula = reformulate(.y, .x), data = dataset)
#>
#> Residuals:
#> Min 1Q Median 3Q Max
#> -2.20892 -0.56744 -0.08498 0.55445 2.10146
#>
#> Coefficients:
#> Estimate Std. Error t value Pr(>|t|)
#> (Intercept) -0.0009328 0.0923062 -0.010 0.992
#> x1 -0.0809739 0.0932059 -0.869 0.387
#>
#> Residual standard error: 0.9173 on 98 degrees of freedom
#> Multiple R-squared: 0.007643, Adjusted R-squared: -0.002483
#> F-statistic: 0.7548 on 1 and 98 DF, p-value: 0.3871
#>
#>
#> [[2]]
#>
#> Call:
#> lm(formula = reformulate(.y, .x), data = dataset)
#>
#> Residuals:
#> Min 1Q Median 3Q Max
#> -2.11442 -0.59186 -0.08153 0.61642 2.10575
#>
#> Coefficients:
#> Estimate Std. Error t value Pr(>|t|)
#> (Intercept) -0.02048 0.09461 -0.216 0.829
#> x2 -0.05159 0.10805 -0.477 0.634
#>
#> Residual standard error: 0.9197 on 98 degrees of freedom
#> Multiple R-squared: 0.002321, Adjusted R-squared: -0.007859
#> F-statistic: 0.228 on 1 and 98 DF, p-value: 0.6341
#>
#>
#> [[3]]
#>
#> Call:
#> lm(formula = reformulate(.y, .x), data = dataset)
#>
#> Residuals:
#> Min 1Q Median 3Q Max
#> -2.3535 -0.7389 -0.2023 0.6236 3.8627
#>
#> Coefficients:
#> Estimate Std. Error t value Pr(>|t|)
#> (Intercept) -0.08178 0.10659 -0.767 0.445
#> x1 -0.08476 0.10763 -0.788 0.433
#>
#> Residual standard error: 1.059 on 98 degrees of freedom
#> Multiple R-squared: 0.006289, Adjusted R-squared: -0.003851
#> F-statistic: 0.6202 on 1 and 98 DF, p-value: 0.4329
#>
#>
#> [[4]]
#>
#> Call:
#> lm(formula = reformulate(.y, .x), data = dataset)
#>
#> Residuals:
#> Min 1Q Median 3Q Max
#> -2.4867 -0.7020 -0.1935 0.5869 3.7574
#>
#> Coefficients:
#> Estimate Std. Error t value Pr(>|t|)
#> (Intercept) -0.06575 0.10875 -0.605 0.547
#> x2 0.12388 0.12420 0.997 0.321
#>
#> Residual standard error: 1.057 on 98 degrees of freedom
#> Multiple R-squared: 0.01005, Adjusted R-squared: -5.162e-05
#> F-statistic: 0.9949 on 1 and 98 DF, p-value: 0.321
由 reprex package 于 2021 年 9 月 6 日创建(v2.0.1)
关于r - 如何使用 purrr 迭代 lm reg 中协变量和结果的每个组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69077597/
背景 我有一个问题,可能有多种解决方案,但我相信有一个尚未发现的优雅解决方案利用 purrr。 示例代码 我有一个如下的大数据框,为此我在下面提供了一个示例: library(tibble) libr
我正在尝试使用 purrr 的 modify_in 来修改列表的元素。列表示例: tib_list [[1]] #> # A tibble: 5 x 3 #> col_one col_two c
我正在努力了解 purrr,但我正在为一些本应很容易的事情而苦苦挣扎。 假设我有以下男性和女性数据 n 0, "M", "F")), value = rnorm(n) ) 现在,我要计算值列的以下
我想对“ID”以外的所有列应用 Blom 转换。由于它们都是数字,map_if 和 is.numeric 在这里不起作用。 library(rcompanion) data("mtcars") # G
考虑以下数据框列表: library(tidyverse) df1 % set_names(paste0("df", 1:4)) 如果不是这样,我想将 A 和 B 的元素连接到 B 列中。请注意,
我正在尝试使用 purrr对具有相同索引的列表元素求和。这可以使用以下方法在基础 R 中实现: xx % reduce(sum)返回单个值。有谁知道在 purrr 中执行此操作的语法吗? ? 编辑-我
我有类似于df3的数据。要重现数据,请运行以下命令: vec1 % group_by(A) %>% nest() df2 % left_join(df2, by = "A") 我需要使用这样的
我搜索了 ??"~"但这只能指向 rlang::env_bind (大概是 %<~% )和 base::~ .在 RStudio 中,如何找到 Purrr 的 ~的文档?例如,如果我忘记了如何使用 ~
这个问题在这里已经有了答案: Repeat each row of data.frame the number of times specified in a column (9 个回答) 10 个月
我有以下数据框列表,其中包含名为 cyl 的列 # Create 3 dataframes with identical column names mt_list [[1]] #>
我正在查看使用map的example。这里是: mtcars %>% split(.$cyl) %>% # from base R map(~ lm(mpg ~ wt, data = .))
我没有看到任何关于我的问题。我想,当我看到 purrr 很多模型示例时,如何再次使用在数据上创建的模型?一点点代码会告诉你我在追求什么: 这是基本的gapminder许多模型示例。 library(g
这是一个嵌套数据。 df1 % group_by(group) %>% nest() 我需要使用 purrr:map 运行 lm。 map(df2$data, ~lm(A~B, data=.x)) 找
我有一个命名列表,在该列表中我想根据列表的来源名称重命名它们的列。 我的方法的问题似乎是 .x 占位符,我认为它是我唯一的列表名称。但在 rename_with 函数中,.x 似乎是在每个列表数据框中
给定一个 dataframe,比如 iris 默认值,如何配置 purrr::map_dfr() 函数在 的每一行上运行code>dataframe 并执行函数 foo。 这是我的 df 的一行,请注
感谢这个网站,我使用 R purrr 包来聚合基于多列的数据。聚合按我想要的方式工作,但输出却不然。以下是使用 mtcars 数据集的示例。 library(dplyr) library(purrr)
这是一个嵌套数据。 df1 % group_by(group) %>% nest() 我需要使用 purrr:map 运行 lm。 map(df2$data, ~lm(A~B, data=.x)) 找
我有一个命名列表,在该列表中我想根据列表的来源名称重命名它们的列。 我的方法的问题似乎是 .x 占位符,我认为它是我唯一的列表名称。但在 rename_with 函数中,.x 似乎是在每个列表数据框中
给定一个 dataframe,比如 iris 默认值,如何配置 purrr::map_dfr() 函数在 的每一行上运行code>dataframe 并执行函数 foo。 这是我的 df 的一行,请注
也许我遗漏了一些明显的东西,但我试图将 R 中命名列表的命名列表(甚至可能更多嵌套)扁平化为最终一个扁平列表。 purrr和 rlist似乎有工具。我怎样才能实现子列表的名称成为扁平结果列表的名称预加
我是一名优秀的程序员,十分优秀!