验证随机变量生成的组合方法算法

0 投票
1 回答
533 浏览
提问于 2025-04-18 17:12

我正在实现一种叫做组合方法的算法,它的意思是:

组合方法

生成随机变量的另一种方法是组合方法。假设我们有一个随机变量X,它的累积分布函数(CDF)是Fx,我们想要模拟一个X的值。

我们可以写成:

enter image description here

这里的Fj也是累积分布函数,并且pj大于0,对所有的j来说,pj的总和等于1。

组合算法:

1. Generate I distributed on the non-negative integers so that:

    P(I=j) = Pj
2. If I = j, then simulate Yj from Fj

3. Set X= Yj 

这是我在Python中的实现,关于我设置的这一部分:

Yj = F[j](random.random())

我觉得我应该使用F[j]的反函数。我想确认一下上面的这一行是否正确。

这是算法的其余部分:

def composition_method(F,p):
X =[None]*len(p) #Inicializando list of size p
cont=True
while(cont):
    for j in range (0,len(p)):
        #1.Generate I, non negative integer sych that  P(I=j)= Pj
        I = inverse_transform(p)
        #2. if I=j, simulate Yj from Fj
        if(I=j):
            Yj = F[j](random.random())
            #3. Sets X= Yj 
            X[j]=Yj
    cont = False     
    #4. Verififying x does not have None elements
    for(elm in X):
        if(elm==None):
            cont =True

任何帮助都会非常感谢 :)

1 个回答

2

Fj是一些累积分布函数,它们有两个重要的特点。第一,它们加起来可以形成你想要的Fx,第二,它们本身应该容易生成。最常见的方法是使用反向变换采样。另外一种方法是卷积。具体的细节会根据你选择的Fj的具体情况而不同。

如果你对反向变换或卷积不太了解,那就不应该急着去学习组合这些东西。

撰写回答