模拟的争论结果
Wrangling results from simulations
我是 R 的新手,我正在尝试学习如何进行一些模拟。目前我有一个程序执行以下操作:
- 在一个函数中,使用 DGP 创建假数据,return编辑为 tibble
- 在另一个函数中,随机分配假观察到治疗
- 在最终函数中,将随机分配结果与假数据和 运行 回归合并。我 return 一个列表,其中包括估计值和 p-value 使用以下代码
tauhat <- trobust %>% filter(term=="TTRUE") %>% pull(estimate)
pvalue <- trobust %>% filter(term=="TTRUE") %>% pull(p.value)
return(list(tauhat,pvalue))
如果我运行这些功能一次,我得到类似下面的东西
> finitepop(finiteN=20)
[[1]]
[1] 0.3730686
[[2]]
[1] 0.03445962
然后我使用 replicate 重复该过程,比如 100 次。我最终得到一个 2X100 的东西——也许它是一个数组? - 我想把它变成一个 100X2 tibble,也就是说,一个带有估计和 p-value 列的 tibble 以及存储为观察结果的模拟结果。 sim 的结果看起来像
> finitesim <- (replicate(n=reps,finitepop(finiteN=20)))
> finitesim
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] -0.03096849 0.206797 0.2386698 0.09374408 0.1462773 0.2479394 0.2177207
[2,] 0.8850678 0.2622687 0.2105784 0.5990369 0.3279901 0.1063231 0.2489028
[,8] [,9] [,10] [,11] [,12] [,13]
[1,] 0.1661424 0.00977172 -0.08761129 0.1170922 -0.1559203 0.278062
[2,] 0.2086819 0.9390261 0.6071284 0.472165 0.4214389 0.05973561
我应该如何将结果转换为漂亮的小标题?
编辑:下面是一个 MWE,为了方便起见,我将右侧变量更改为 x,并且我没有为 lm_robust
创建聚类结构
library(tidyverse)
library(lmerTest) #for lmer
library(merTools) #for lmer
library(estimatr) #for cluster robust se
finitepop <- function(finiteN){
fakedata <- tibble(
id=1:finiteN,
x=rnorm(n=finiteN),
y=rnorm(n=finiteN)
)
robust <- lm_robust(data=fakedata,y~x,cluster=id)
trobust <- tidy(robust)
tauhat <- trobust %>% filter(term=="x") %>% pull(estimate)
pvalue <- trobust %>% filter(term=="x") %>% pull(p.value)
return(list(tauhat,pvalue))
}
finitesim <- (replicate(n=10,finitepop(finiteN=20),simplify=FALSE))
finitesim
用户可以使用 purrr
包中的 map_df
(tidyverse
的一部分):
finitepop <- function(finiteN){
fakedata <- tibble(
id=1:finiteN,
x=rnorm(n=finiteN),
y=rnorm(n=finiteN)
)
robust <- lm_robust(data=fakedata,y~x,cluster=id)
trobust <- tidy(robust)
tauhat <- trobust %>% filter(term=="x") %>% pull(estimate)
pvalue <- trobust %>% filter(term=="x") %>% pull(p.value)
print(pvalue)
return(tibble(tauhat,pvalue))
}
finitesim <- replicate(n=10,finitepop(finiteN=20),simplify=FALSE) %>%
purrr::map_df(as.data.frame)
> finitesim
tauhat pvalue
1 0.035057186 0.89818890
2 -0.248569087 0.24159959
3 0.111054217 0.75700470
4 0.596779950 0.00223398
5 -0.004052686 0.98418837
6 -0.105390590 0.67410417
7 -0.107913504 0.54778478
8 -0.021681712 0.89834059
9 -0.161811559 0.49091499
10 0.241477999 0.21281508
我是 R 的新手,我正在尝试学习如何进行一些模拟。目前我有一个程序执行以下操作:
- 在一个函数中,使用 DGP 创建假数据,return编辑为 tibble
- 在另一个函数中,随机分配假观察到治疗
- 在最终函数中,将随机分配结果与假数据和 运行 回归合并。我 return 一个列表,其中包括估计值和 p-value 使用以下代码
tauhat <- trobust %>% filter(term=="TTRUE") %>% pull(estimate)
pvalue <- trobust %>% filter(term=="TTRUE") %>% pull(p.value)
return(list(tauhat,pvalue))
如果我运行这些功能一次,我得到类似下面的东西
> finitepop(finiteN=20)
[[1]]
[1] 0.3730686
[[2]]
[1] 0.03445962
然后我使用 replicate 重复该过程,比如 100 次。我最终得到一个 2X100 的东西——也许它是一个数组? - 我想把它变成一个 100X2 tibble,也就是说,一个带有估计和 p-value 列的 tibble 以及存储为观察结果的模拟结果。 sim 的结果看起来像
> finitesim <- (replicate(n=reps,finitepop(finiteN=20)))
> finitesim
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] -0.03096849 0.206797 0.2386698 0.09374408 0.1462773 0.2479394 0.2177207
[2,] 0.8850678 0.2622687 0.2105784 0.5990369 0.3279901 0.1063231 0.2489028
[,8] [,9] [,10] [,11] [,12] [,13]
[1,] 0.1661424 0.00977172 -0.08761129 0.1170922 -0.1559203 0.278062
[2,] 0.2086819 0.9390261 0.6071284 0.472165 0.4214389 0.05973561
我应该如何将结果转换为漂亮的小标题?
编辑:下面是一个 MWE,为了方便起见,我将右侧变量更改为 x,并且我没有为 lm_robust
创建聚类结构library(tidyverse)
library(lmerTest) #for lmer
library(merTools) #for lmer
library(estimatr) #for cluster robust se
finitepop <- function(finiteN){
fakedata <- tibble(
id=1:finiteN,
x=rnorm(n=finiteN),
y=rnorm(n=finiteN)
)
robust <- lm_robust(data=fakedata,y~x,cluster=id)
trobust <- tidy(robust)
tauhat <- trobust %>% filter(term=="x") %>% pull(estimate)
pvalue <- trobust %>% filter(term=="x") %>% pull(p.value)
return(list(tauhat,pvalue))
}
finitesim <- (replicate(n=10,finitepop(finiteN=20),simplify=FALSE))
finitesim
用户可以使用 purrr
包中的 map_df
(tidyverse
的一部分):
finitepop <- function(finiteN){
fakedata <- tibble(
id=1:finiteN,
x=rnorm(n=finiteN),
y=rnorm(n=finiteN)
)
robust <- lm_robust(data=fakedata,y~x,cluster=id)
trobust <- tidy(robust)
tauhat <- trobust %>% filter(term=="x") %>% pull(estimate)
pvalue <- trobust %>% filter(term=="x") %>% pull(p.value)
print(pvalue)
return(tibble(tauhat,pvalue))
}
finitesim <- replicate(n=10,finitepop(finiteN=20),simplify=FALSE) %>%
purrr::map_df(as.data.frame)
> finitesim
tauhat pvalue
1 0.035057186 0.89818890
2 -0.248569087 0.24159959
3 0.111054217 0.75700470
4 0.596779950 0.00223398
5 -0.004052686 0.98418837
6 -0.105390590 0.67410417
7 -0.107913504 0.54778478
8 -0.021681712 0.89834059
9 -0.161811559 0.49091499
10 0.241477999 0.21281508