A versão curta fora do contexto
Seja uma variável aleatória com CDF
Digamos que eu queira simular empates de usando o método CDF inverso. Isso é possível? Esta função não tem exatamente um inverso. Então, novamente, há amostragem de transformação inversa para distribuição de mistura de duas distribuições normais, o que sugere que há uma maneira conhecida de aplicar amostragem de transformação inversa aqui.
Estou ciente do método de duas etapas, mas não sei como aplicá-lo à minha situação (veja abaixo).
A versão longa com fundo
Eu ajustei o seguinte modelo para uma resposta com valor vetorial, , usando o MCMC (especificamente, Stan):
onde indexa observações, é uma matriz de correlação e é um vetor de preditores / regressores / características.N R x
Ou seja, meu modelo é um modelo de regressão em que a distribuição condicional da resposta é assumida como uma cópula gaussiana com marginais log-normais inflados a zero. Eu postei sobre esse modelo antes; Acontece que Song, Li e Yuan (2009, gated ) o desenvolveram e o chamam de vetor GLM, ou VGLM. A seguir, a especificação deles é o mais aproximada possível: MeuF K G m z q R Γ
A peça inflada com zero segue aproximadamente as especificações de Liu e Chan (2010, sem porta ).
Agora, eu gostaria de simular dados dos parâmetros estimados, mas estou um pouco confuso sobre como fazê-lo. Primeiro, pensei em simular diretamente (no código R):
for (i in 1:N) {
for (k in 1:K) {
Y_hat <- rbinom(1, 1, 1 - theta[i, k])
if (Y_hat == 1)
Y_hat <- rlnorm(1, mu[i, k], sigma[k])
}
}
que não usa em tudo. Eu gostaria de tentar realmente usar a matriz de correlação que estimei.
Minha próxima idéia foi pegar e convertê-los de volta para . Isso também parece coincidir com as respostas em Gerando amostras de Copula na amostragem R e bivariada para distribuição expressa no teorema da cópula de Sklar? . Mas que diabos é o meu aqui? A amostragem de transformação inversa para distribuição de mistura de duas distribuições normais faz parecer que isso é possível, mas não tenho idéia de como fazê-lo.e F - 1
fonte
Respostas:
A resposta para a versão longa com fundo:
Essa resposta para a versão longa aborda um pouco outra questão e, como parecemos ter dificuldades em formular o modelo e o problema, escolhi reformulá-lo aqui, espero que corretamente.
Para , o objetivo é simular vetores modo que, condicional a uma covariável , com . Portanto, se alguém quiser simular dados desse modelo, poderá proceder da seguinte maneira:1≤i≤I yi=(yi1,…,yiK) xi yik={0log(σkzik+βkxi) with probability logit−1(αkxi) with probability 1−logit−1(αkxi) zi=(zi1,…,ziK)∼NK(0,R)
Para ,1≤i≤I
Se alguém está interessado na geração a partir de posterior de dada a , esse é um problema mais difícil, embora possível pela amostragem de Gibbs ou ABC.(α,β,μ,σ,R) yik
fonte
A resposta para a versão curta fora de contexto:
"Inverter" um cdf que não é invertível no sentido matemático (como sua distribuição mista) é viável, conforme descrito na maioria dos livros didáticos de Monte Carlo. (Como o nosso , consulte o Lema 2.4.) Se você definir o inverso generalizado então Isso significa que, quando tem um salto de em , para . Em outras palavras, se você desenhar um uniforme e ele acabar menor que , sua geração de X ∼ F é equivalente a X = F - ( U ) quando U ∼ U ( 0 , 1 )
Isso é quase o que o seu código R
Y_hat <- rbinom(1, 1, theta[i, k]) if (Y_hat == 1) Y_hat <- rlnorm(1, mu[i, k], sigma[k])
está fazendo. Você gera um Bernoulli com probabilidade e, se for igual a , transforma-o em um log-normal. Uma vez que é igual a 1 com probabilidade você deve em vez transformá-lo em uma simulação de log-normal quando é igual a zero, em vez disso, acabar com o código R modificado: 1 θ i kθik 1 θik
fonte