递归生成指数随机变量

用户名

我是R语言中递归的新手。我试图生成满足R中特定条件的指数随机变量。这是一个简单的示例,显示了我尝试生成两个独立的指数随机变量。

代码

#### Function to generate two independent exponential random variable that meet two criteria
gen.exp<-function(q1,q2){
  a=rexp(1,q1)  # generate exponential random variable
  b=rexp(1,q2)  # generate exponential random variable
  if((a>10 & a<10.2) & (a+b>15)){ # criteria the random variables must meet
   return(c(a,b))
  }else{
   return(gen.exp(q1,q2)) #if above criteria is not met, repeat the process again
  } 

}

示例:q1 = .25,q2 = 2

     gen.exp(.25,2)

当我运行上面的代码时,出现以下错误:

  1. 错误:评估嵌套太深:无限递归/选项(表达式=)?
  2. 包装过程中的错误:评估嵌套太深:无限递归/ options(expressions =)?

我已经尝试过修改options(expressions=10000),以便允许R增加迭代次数。这似乎对我的情况没有帮助(也许我没有正确使用该选项)。我了解使用上述严格标准生成连续分布可能是问题所在。话虽如此,还是有避免错误的方法吗?还是至少在发生错误时重复递归?递归在这里是过度杀戮吗?是否有更简单/更好的方法来生成所需的随机变量?我感谢任何见解。

csgillespie

您正在使用具有两个条件的简单拒绝采样器

  • a > 10 & a < 10.2
  • a+ b > 15

但是,将它们都匹配的机会很低,即非常慢。但是,由于您对指数随机数感兴趣,因此我们可以避免模拟将拒绝的数字。

为了生成指数随机数,我们使用以下公式

-rate * log(U)

在哪里U是一个U(0,1)随机数。因此,要从大于10的指数分布生成值(例如),我们只需

-log(U(0, exp(-10*rate))/rate

或在R代码中

-log(runif(1, 0, exp(-10*rate)))/rate

我们可以对上限使用类似的技巧。

从上面使用@Roland的函数,这给出了

gen.exp = function(q1, q2, maxiter = 1e3){
  i = 0
  repeat {
    i = i + 1
    upper = exp(-10*q1)
    lower = exp(-10.2*q1)
    a = -log(runif(1, lower, upper))/q1
    b = -log(runif(1, 0, exp(-4.8*q2)))/q2

    if((a>10 & a<10.2) & (a+b>15)) {message(i); return(c(a,b)) 
    if (i > maxiter) stop(paste("Conditions not fulfilled after", maxiter, "tries."))
  }
}

注意,我还打印了进行了多少次迭代。对于您的参数,我需要大约2次迭代。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从密度函数生成随机变量

来自分类Dev

从密度函数生成随机变量

来自分类Dev

在Powershell中,如何生成具有指定均值的随机变量(指数)?

来自分类Dev

Nginx随机变量

来自分类Dev

如何使用dplyr生成列相关的随机变量

来自分类Dev

使用数学/兰德在golang中生成随机变量

来自分类Dev

使用逆采样从分布函数生成随机变量

来自分类Dev

根据概率分布生成随机变量

来自分类Dev

生成对数正态分布的随机变量

来自分类Dev

如何根据数据类型生成随机变量?

来自分类Dev

如何生成随机变量或类名并稍后使用?

来自分类Dev

Java指向随机变量

来自分类Dev

在Ruby中同步随机变量

来自分类Dev

在列表中选择随机变量

来自分类Dev

Jmeter-随机变量集

来自分类Dev

对象类和随机变量

来自分类Dev

限制PyMC中的随机变量

来自分类Dev

返回随机变量数据的javascript

来自分类Dev

PHP:(不是这样)随机变量

来自分类Dev

R-如何生成离散随机变量的随机样本?

来自分类Dev

R-如何生成离散随机变量的随机样本?

来自分类Dev

如何从R中的已知双变量PDF生成随机变量?

来自分类Dev

使用PyMC估算随机变量的参数,该参数是均匀随机变量的总和

来自分类Dev

如何在Swift中从带有参数个案的枚举中生成随机变量?

来自分类Dev

scipy-生成具有相关性的随机变量

来自分类Dev

生成具有特定标准偏差的相关随机变量

来自分类Dev

嵌套for循环以生成R中具有不同概率的随机变量

来自分类Dev

通过AR算法生成标准正态随机变量的问题

来自分类Dev

如何在python中生成独立的均匀分布(iid)随机变量