r-模拟结果



我对R很陌生,我正在努力学习如何进行一些模拟。目前,我有一个程序,做以下:

  1. 在一个函数中,使用DGP创建假数据,该数据作为tibble返回
  2. 在另一个函数中,随机将假观察分配给治疗
  3. 在最后一个函数中,将随机分配结果与假数据合并,然后运行回归。我使用以下代码返回一个列表,其中包括估计值和p值
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

然后我用复制来重复这个过程,比如说100次。我最终得到了一个2X100的东西-也许是一个数组?-我想把它变成一个100X2的tibble,也就是说,一个tibble,它有用于估计的列,p值和模拟结果存储为观测值。模拟的结果看起来像

> 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

我应该如何将结果转换为一个好的tibble?

编辑:下面是一个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

Use可以使用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

最新更新