【问题标题】:R: How to generate a series of exponential deviates that sum to some numberR:如何生成一系列总和为某个数字的指数偏差
【发布时间】:2011-12-06 14:53:01
【问题描述】:

我正在尝试为马尔可夫链生成一系列等待时间,其中等待时间是指数分布的数字,速率等于 1。但是,我不知道该过程的转换次数,而是该过程花费的总时间。

所以,例如:

t <- rexp(100,1)
tt <- cumsum(c(0,t))

t是连续独立等待时间的向量,tt是从0开始的实际转换时间向量。

同样,问题是我不知道 t 的长度(即转换次数),而是要经过多少总等待时间(即 tt 中最后一个条目的下限)。

在 R 中生成这个的有效方法是什么?

【问题讨论】:

  • 另外,由于我要为系列引入一个端点,或者更确切地说是最后一个过渡时间的端点,我是否混淆了过渡时间独立性的统计假设?
  • 我认为这可能是 stats.stackexchange.com 的问题 ...
  • @BenBolker 似乎更多与我有关的编程,减去我的评论。一个for循环解决了这个问题,我只是想知道是否有一个更简单的方法我忽略了?

标签: r markov-chains


【解决方案1】:

Poisson process 的维基百科条目包含您需要的一切。区间内的到达次数呈泊松分布,一旦知道到达次数,到达时间就会在区间内均匀分布。例如,假设您的区间长度为 15。

N <- rpois(1, lambda = 15)
arrives <- sort(runif(N, max = 15))
waits <- c(arrives[1], diff(arrives))

这里,arrives 对应于您的 ttwaits 对应于您的 t(顺便说一下,将向量命名为 t 不是一个好主意,因为 t 是为转置保留的功能)。当然,waits 的最后一个条目已被截断,但你提到只知道tt 的最后一个条目的楼层,反正。如果他真的需要你可以用一个独立的指数替换他(如果你愿意,比waits[N])大。

【讨论】:

  • 太好了。我得到了泊松分布的事件数量,但不是区间内的均匀分布(尽管事后看来很明显!)
【解决方案2】:

如果我猜对了:您想知道需要多少次转换才能填满您的时间间隔。由于转换是随机且未知的,因此无法预测给定样本。以下是找到答案的方法:

tfoo<-rexp(100,1)   
max(which(cumsum(tfoo)<=10))  
[1] 10  

tfoo<-rexp(100,1)   # do another trial 
max(which(cumsum(tfoo)<=10))  
[1] 14  

现在,如果您预计需要抽取大量样本,例如rexp(1e10,1),那么也许你应该画“块”。抽取 1e9 个样本,看看sum(tfoo) 是否超过了你的时间阈值。如果是这样,请通过 cumsum 挖掘。如果没有,再抽取 1e9 个样本,以此类推。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多