我正在尝试为马尔可夫链生成一系列等待时间,其中等待时间是速率等于1的指数分布的数。然而,我不知道这个过程的转换次数,而是整个过程中花费的总时间。
所以,举个例子:
t <- rexp(100,1)
tt <- cumsum(c(0,t))
t
是连续的和独立的等待时间的向量,tt
是从0开始的实际转换时间的向量。
同样,问题是我不知道t的长度(即转换次数),而不是总等待时间(即tt中最后一个条目的下限)。
在R中生成它的有效方法是什么?
发布于 2011-12-08 01:38:49
维基百科上关于Poisson process的条目包含了您需要的所有内容。区间内的到达次数服从泊松分布,一旦知道到达次数,到达时间就会均匀地分布在区间内。例如,假设您的间隔长度为15。
N <- rpois(1, lambda = 15)
arrives <- sort(runif(N, max = 15))
waits <- c(arrives[1], diff(arrives))
这里,arrives
对应于您的tt
,waits
对应于您的t
(顺便说一句,将向量命名为t
并不是一个好主意,因为t
是为转置函数保留的)。当然,waits
的最后一个条目已经被截断了,但是您提到的只知道tt
最后一个条目的底线。如果真的需要他,你可以用一个独立的指数来代替他(如果你愿意,比waits[N])
还大。
发布于 2011-12-06 16:16:04
如果我没记错的话:你想知道你需要多少转换才能填满时间间隔。由于转换是随机和未知的,因此无法对给定样本进行预测。以下是如何找到答案:
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个样本,依此类推。
https://stackoverflow.com/questions/8401842
复制