La version courte hors contexte
Soit une variable aléatoire avec CDF
Disons que je voulais simuler des tirages de utilisant la méthode CDF inverse. Est-ce possible? Cette fonction n'a pas exactement d'inverse. Là encore, il y a l' échantillonnage par transformation inverse pour la distribution du mélange de deux distributions normales, ce qui suggère qu'il existe un moyen connu d'appliquer l'échantillonnage par transformation inverse ici.
Je connais la méthode en deux étapes, mais je ne sais pas comment l'appliquer à ma situation (voir ci-dessous).
La version longue avec fond
J'ai ajusté le modèle suivant pour une réponse vectorielle, , en utilisant MCMC (spécifiquement, Stan):
où indexe observations, est une matrice de corrélation et est un vecteur de prédicteurs / régresseurs / caractéristiques.N R x
Autrement dit, mon modèle est un modèle de régression dans lequel la distribution conditionnelle de la réponse est supposée être une copule gaussienne avec des marginaux log-normaux gonflés à zéro. J'ai déjà publié des articles sur ce modèle; il s'avère que Song, Li et Yuan (2009, gated ) l'ont développé et ils l'appellent un vecteur GLM ou VGLM. Ce qui suit est leur spécification aussi proche du mot que je pourrais l'obtenir: MonF K G m z q R Γ
La partie zéro gonflée suit à peu près la spécification de Liu et Chan (2010, non fermée ).
Maintenant, je voudrais simuler des données à partir des paramètres estimés, mais je suis un peu confus quant à la façon de procéder. J'ai d'abord pensé que je pouvais simuler directement (en code 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])
}
}
qui n'utilise pas du tout. Je voudrais essayer d'utiliser la matrice de corrélation que j'ai estimée.
Mon idée suivante était de prendre des tirages de , puis de les reconvertir en . Cela semble également coïncider avec les réponses dans Génération d'échantillons à partir de la copule en R et échantillonnage bivarié pour la distribution exprimée dans le théorème de la copule de Sklar? . Mais que diable est mon ici? L'échantillonnage par transformation inverse pour la distribution de mélange de deux distributions normales donne l'impression que cela est possible, mais je ne sais pas comment le faire.y F - 1
la source
Réponses:
La réponse à la version longue avec fond:
Cette réponse à la version longue aborde quelque peu un autre problème et, comme nous semblons avoir des difficultés à formuler le modèle et le problème, j'ai choisi de le reformuler ici, espérons-le correctement.
Pour , le but est de simuler les vecteurs tels que, conditionnellement à une covariable , avec . Par conséquent, si l'on veut simuler des données de ce modèle, on pourrait procéder comme suit: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)
Pour ,1≤i≤I
Si l'on s'intéresse à la génération à partir de la partie postérieure de étant donné le , c'est un problème plus difficile, bien que réalisable par échantillonnage de Gibbs ou ABC.(α,β,μ,σ,R) yik
la source
La réponse à la version courte hors contexte:
"Inverser" un cdf qui n'est pas inversible au sens mathématique (comme votre distribution mixte) est faisable, comme décrit dans la plupart des manuels de Monte Carlo. (Comme le nôtre , voir le lemme 2.4.) Si vous définissez l'inverse généralisé alors Cela signifie que, lorsque a un saut de à , pour . En d'autres termes, si vous dessinez un uniforme et qu'il finit par être plus petit que , votre génération de X ∼ F est équivalent à X = F - ( U ) lorsque U ∼ U ( 0 , 1 )
C'est presque ce que votre code R
Y_hat <- rbinom(1, 1, theta[i, k]) if (Y_hat == 1) Y_hat <- rlnorm(1, mu[i, k], sigma[k])
fait. Vous générez un Bernoulli avec une probabilité et s'il est égal à , vous le transformez en log-normal. Puisqu'il est égal à 1 avec une probabilité vous devriez plutôt le transformer en une simulation log-normale quand il est égal à zéro à la place, pour finir avec le code R modifié:θik 1 θik
la source