【问题标题】:Nested for loop in R for simulation在R中嵌套for循环以进行模拟
【发布时间】:2021-02-15 12:18:10
【问题描述】:

尊敬的社区,

我想构建一个嵌套的 for 循环。内循环应重复 (x 10.000) 计算一个支架的 p 值。规范。区用 j 绘制并将其保存在 p_val 中。外循环应为我的 i 次抽奖重复此内循环,其中 i = c(10,50,100,1000) 然后将其平均值保存在 p_val_mean 中,它应该是一个只有四个条目的向量。 下面的代码对我不起作用,我的 p_val_mean 有 1000 个条目,其中只有 4 个包含计算值:

# outer loop

p_val_mean <- rep(NA, 4)
for (i in c(10, 50, 100, 1000)){

# inner loop
n <- 10000
p_val <- rep(NA, 10000)
for(j in 1:n){
  current_data <- rnorm(i,0,1)
  current_t_stat <- t.test(current_data)
  current_p_val <- current_t_stat$p.value
  p_val[j] <- current_p_val
}
p_val_mean[i] <- mean(p_val)
}
p_val_mean

提前感谢您的回复!

【问题讨论】:

    标签: r loops nested simulation


    【解决方案1】:

    我们可以使用map

    library(purrr)
    map_dbl(c(10, 50, 100, 1000), ~ mean(replicate(.x, t.test(rnorm(1000))$p.val)))
    #[1] 0.4030399 0.4840713 0.4791711 0.4960831
    

    【讨论】:

      【解决方案2】:

      您不需要嵌套循环。以下单行代码可以满足您的需要:

      sapply(c(10, 50, 100, 1000), function(x) mean(replicate(x, t.test(rnorm(1000))$p.val)))
      #> [1] 0.4272396 0.5089299 0.4686196 0.4930584
      

      【讨论】:

        【解决方案3】:

        你不能用你的 i 作为索引,用这个代替:

        p_val_mean <- rep(NA, 4)
        N <- c(10, 50, 100, 1000)
        
        for (i in 1:length(N)){
        
          # inner loop
          n <- 10000
          p_val <- rep(NA, n)
          for(j in 1:n){
            current_data <- rnorm(N[i], 0, 1)
            current_t_stat <- t.test(current_data)
            current_p_val <- current_t_stat$p.value
            p_val[j] <- current_p_val
          }
          p_val_mean[i] <- mean(p_val)
        }
        p_val_mean
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-07-14
          • 2020-09-02
          • 2023-03-02
          • 1970-01-01
          • 1970-01-01
          • 2017-04-30
          • 1970-01-01
          • 2018-06-19
          相关资源
          最近更新 更多