访问 R 中模型对象内的估计
Access the estimate inside a model object in R
我是 运行 模拟,想知道是否有办法使用 broom、dplyr、modelr 或 purrr 访问我模型内部的 "x" 估计值。
这正是我想要的,但我不想在最后一段代码中使用 [[1]]
。
library(tidyverse)
library(purrr)
library(broom)
mod <- function(df) {
lm(y ~ x, data = df)
}
sim <- tibble(
model = "model1",
mu = 5, #this is unknown in practice
beta = 2.7, #this is unknown in practice
sigma = 0.15, #this is unknown in practice
mu_e = 0,
sigma_e = 1
)
sim_dat <- sim %>%
crossing(replication = 1:10000) %>%
mutate(e = rnorm(mu_e, mu_e),
x = sample(c(0,1),size=n(),replace = TRUE,prob=c(0.5, 0.5)),
y = mu+x*beta+e) %>%
group_by(model) %>%
nest() %>%
mutate(model_fit = map(data, mod))
broom::tidy(sim_dat$model_fit[[1]]) %>%
filter(term=="x") %>%
select(estimate)
你可以使用 purrr::map_df()
:
map_df(sim_dat$model_fit, broom::tidy) %>%
filter(term=="x") %>%
select(estimate)
您也可以像这样将其放入 mutate(model_fit = ...)
:
sim_dat <- sim %>%
crossing(replication = 1:10000) %>%
mutate(e = rnorm(mu_e, mu_e),
x = sample(c(0,1),size=n(),replace = TRUE,prob=c(0.5, 0.5)),
y = mu+x*beta+e) %>%
group_by(model) %>%
nest() %>%
mutate(model_fit = map(data, mod),
# you can pipe inside of mutate()
x_coef = map_dbl(model_fit, ~broom::tidy(.) %>%
filter(term =="x") %>%
select(estimate) %>%
unlist() ) )
根据你想要 return 为 x_coef
的对象 class,你可以随意使用 map_suffix()
并可能删除 unlist()
我只是觉得 dbl
有道理。
我是 运行 模拟,想知道是否有办法使用 broom、dplyr、modelr 或 purrr 访问我模型内部的 "x" 估计值。
这正是我想要的,但我不想在最后一段代码中使用 [[1]]
。
library(tidyverse)
library(purrr)
library(broom)
mod <- function(df) {
lm(y ~ x, data = df)
}
sim <- tibble(
model = "model1",
mu = 5, #this is unknown in practice
beta = 2.7, #this is unknown in practice
sigma = 0.15, #this is unknown in practice
mu_e = 0,
sigma_e = 1
)
sim_dat <- sim %>%
crossing(replication = 1:10000) %>%
mutate(e = rnorm(mu_e, mu_e),
x = sample(c(0,1),size=n(),replace = TRUE,prob=c(0.5, 0.5)),
y = mu+x*beta+e) %>%
group_by(model) %>%
nest() %>%
mutate(model_fit = map(data, mod))
broom::tidy(sim_dat$model_fit[[1]]) %>%
filter(term=="x") %>%
select(estimate)
你可以使用 purrr::map_df()
:
map_df(sim_dat$model_fit, broom::tidy) %>%
filter(term=="x") %>%
select(estimate)
您也可以像这样将其放入 mutate(model_fit = ...)
:
sim_dat <- sim %>%
crossing(replication = 1:10000) %>%
mutate(e = rnorm(mu_e, mu_e),
x = sample(c(0,1),size=n(),replace = TRUE,prob=c(0.5, 0.5)),
y = mu+x*beta+e) %>%
group_by(model) %>%
nest() %>%
mutate(model_fit = map(data, mod),
# you can pipe inside of mutate()
x_coef = map_dbl(model_fit, ~broom::tidy(.) %>%
filter(term =="x") %>%
select(estimate) %>%
unlist() ) )
根据你想要 return 为 x_coef
的对象 class,你可以随意使用 map_suffix()
并可能删除 unlist()
我只是觉得 dbl
有道理。