【问题标题】:Nested for loop to generate random variables with differing probabilities in R嵌套for循环以在R中生成具有不同概率的随机变量
【发布时间】:2021-01-05 21:11:49
【问题描述】:

我正在尝试编写一个 for 循环,该循环使用不同的概率值从几何分布中生成随机变量。但是,我写的代码只使用序列中的最后一个概率来生成随机变量,见下文。

x <- list()
y <- list()
probs <- seq(0.1, 0.9, 0.1)
for (i in 1:length(probs)) {
  for (j in 1:10000) {
    x[j] <- rgeom(n=1, prob=probs[i])+1
    y[j] <- probs[i]
  }
}

如何循环概率以为每个概率生成 10000 RV?

【问题讨论】:

    标签: r loops nested


    【解决方案1】:

    您不需要嵌套循环。如果您只想随机选择一个概率用于rgeom() 函数,经过 10000 次迭代,您可以执行如下操作,使用sample() 函数选择要使用的概率,并将结果存储在一个data.frame.

    x <- vector(mode = "double", length = 10000)
    y <- vector(mode = "double", length = 10000)
    
    probs <- seq(0.1, 0.9, 0.1)
    
    for (i in 1:10000){
     prob <- probs[sample(1:length(probs), size = 1)]
     x[i] <- rgeom(1, prob = prob)
     y[i] <- prob
    }
    
    random_values <- data.frame(
      value = x,
      prob_used = y
    )
    

    结果:

    > head(random_values)
      value prob_used
    1     0       0.6
    2    23       0.1
    3     0       0.6
    4     0       0.6
    5     2       0.1
    6     4       0.3
    

    【讨论】:

      【解决方案2】:

      一个简单的解决方案可能是:

          x <- list()
          y <- list()
          probs <- seq(0.1, 0.9, 0.01)
          j<-1
          for (i in 1:length(probs)) {
            x[[j]] <- rgeom(n=10000, prob=probs[i])+1
            y[[j]] <- rep(probs[i], 10000)
            j<-j+1
          }
          x<- list(unlist(x))
          y<- list(unlist(y))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-06
        • 2020-07-02
        • 2012-02-11
        相关资源
        最近更新 更多