Simule a partir de uma distribuição normal de mistura truncada


9

Quero simular uma amostra de uma distribuição normal de mistura, de modo que

p×N(μ1,σ12)+(1−p)×N(μ2,σ22)

é restrito ao intervalo vez de . Isso significa que eu quero simular uma mistura truncada de distribuições normais.R[0,1]R

Eu sei que há algum algoritmo para simular um normal truncado (ou seja, desta pergunta ) e o pacote correspondente em R para fazer isso. Mas como posso simular uma mistura truncada normal? É o mesmo se eu simular duas normais truncadas de e ) para normalizar uma mistura truncada?N ( μ 2 , σ 2 2N(μ1,σ12)N(μ2,σ22


3
Se estiver no intervalo de unidades, por que não usar betas em vez de normais? Para , a distribuição é simétrica e unimodal e limitada no intervalo da unidade. α=β>1
— Sycorax diz Restabelecer Monica

2
Se você não precisa que suas simulações sejam muito rápidas, você pode fazê-lo usando a amostragem por rejeição: (1) amostra da mistura de duas normais, (2) se não estiver em , volte para passo 1, (3) saída . (mas user777 está certo, você tem uma boa razão para escolher esta distribuição em vez de uma mistura de betas?)x [ 0 , 1 ] xxx[0,1]x
— Elvis

1
@ user777 uma mistura Gaussiana truncada tem uma distribuição diferente de uma distribuição Beta e não pode ser trocada apenas porque você pode impor simetria e o mesmo suporte.
— Mjnichol 11/05

Respostas:


13

A simulação de um normal truncado é feita facilmente se você tiver acesso a uma função quantil normal adequada. Por exemplo, em R, simulando , onde e significam os limites inferiores e superiores podem ser feitas invertendo a CDF por exemplo, em R

Nab(μ,σ2)
ab
Φ(σ−1{x−μ})−Φ(σ−1{a−μ})Φ(σ−1{b−μ})−Φ(σ−1{a−μ})

x = mu + sigma * qnorm( pnorm(a,mu,sigma) + 
     runif(1)*(pnorm(b,mu,sigma) - pnorm(a,mu,sigma)) )

Caso contrário, desenvolvi um algoritmo normal de aceitação / rejeição truncado há vinte anos.

Se considerarmos o problema de mistura truncada, com densidade é uma mistura de distribuições normais truncadas, mas com pesos diferentes : Portanto, para simular a partir de um normal truncado mistura, é suficiente tomar

f(x;θ)∝{pφ(x;μ1,σ1)+(1−p)φ(x;μ2,σ2)}I[a,b](x)
f(x;θ)∝p{Φ(σ1−1{b−μ1})−Φ(σ1−1{a−μ1})}σ1−1ϕ(σ1−1{x−μ1})Φ(σ1−1{b−μ1})−Φ(σ1−1{a−μ1})+(1−p){Φ(σ2−1{b−μ2})−Φ(σ2−1{a−μ2})}σ2−1ϕ(σ2−1{x−μ2})Φ(σ2−1{b−μ2})−Φ(σ1−1{a−μ2})
x={x1∼Nab(μ1,σ12)with probability p{Φ(σ1−1{b−μ1})−Φ(σ1−1{a−μ1})}/sx2∼Nab(μ2,σ22)with probability (1−p){Φ(σ2−1{b−μ2})−Φ(σ2−1{a−μ2})}/s
onde
s=p{Φ(σ1−1{b−μ1})−Φ(σ1−1{a−μ1})}+(1−p){Φ(σ2−1{b−μ2})−Φ(σ2−1{a−μ2})}


Por que não podemos simplesmente tirar a amostra da primeira normal com probabilidade p e da segunda distribuição com probabilidade 1 - p?
— Mjnichol 11/05

1
Ah! Eu acho que vejo o problema. Isso ocorre porque a distribuição inteira está sendo truncada, e não cada distribuição separadamente. Se cada subdistribuição da mistura fosse truncada individualmente antes de ser adicionada à mistura, poderíamos simplesmente amostrar da distribuição de acordo com os pesos relativos de cada subdistribuição, certo?
— Mjnichol 11/05

1
@mjnichol É uma mistura, mas com diferentes pesos que o e . p1−p
— Xian

@ Xi'an: Suponha que consideremos uma configuração ligeiramente diferente: e se, em vez de construir a distribuição da mistura a partir de Gaussianos ponderados e depois truncar, em vez disso, misturássemos dois Gaussianos já truncados (com o mesmo suporte). Se os gaussianos fossem truncados antes da mistura, poderíamos amostrar a partir da distribuição, amostrando o primeiro gaussiano truncado com probabilidade p e o segundo com probabilidade 1 - p?
— Mjnichol 12/05

2
@mjnichol: nesse caso, você teria então sim, de fato isso funcionaria.
pNab(μ1,σ12)+(1−p)Nab(μ2,σ22)
— Xian
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.