Bonjour à tous,
C'est mon premier message en tant que SE... pardonnez-moi si la réponse semble anodine !
Un client aimerait pouvoir générer des données aléatoires selon plusieurs lois statistiques, l'une d'elles est la loi ZIP. Dans l'éditeur de formules, il est possible d'avoir Random Poisson() ... mais pas Random Zero Inflated Poisson().
Existe-t-il un moyen de générer une telle distribution aléatoire (avec Pi : % de zéro et µ paramètre de la distribution de Poisson) ?
Merci d'avance, Stéphane
Salut,
Premièrement : ce qui est ennuyeux mais important, un ZIP( lambda, p ) est généralement modélisé comme le mélange d'une distribution poisson (lambda) et d'une distribution 0, dans les proportions (1-p) et p, respectivement.
Étant donné qu'une distribution de Poisson est capable de générer des zéros à elle seule, la proportion réelle de zéros (à long terme) du ZIP sera supérieure à p et égale à p + (1-p)*e^( - lambda).
La première chose que le client doit faire est donc de décider : souhaite-t-il utiliser p pour représenter la probabilité que les données proviennent de la distribution nulle (la norme), ou souhaite-t-il spécifier la proportion TOTALE de zéros générée par le ZIP. processus?
Dans le premier cas, utilisez p comme je l'ai utilisé ci-dessous. Dans ce dernier cas, alors après avoir résolu p = p` + (1 - p`) * e^(-lambda) pour p`, nous voyons que le client doit plutôt remplacer p` par le p ci-dessous, où p` = ( p - e^(-lambda)) / ( 1 - e^(-lambda) ).
Une fois que cela a été décidé, la génération des données est assez simple, grâce à la fonction Random Poisson ( lambda ) intégrée.
Le code ci-dessous montre les résultats pour chaque cas, en supposant que lambda = 5 et p = 0,10
names default to here (1);
lambda = 5;
p = 0.1;
nObs = 1e7; // number of observations
// generate a ZIP, under the standard assumptions. 10% of the time, generate a 0. 90% of the time, generate a poisson ( 5 )
sample1 = J ( nObs, 1, if ( randomuniform () < p, 0, randomPoisson ( lambda ) ) );
// generate a ZIP with TOTAL long-run proportion of zeros == 0.10
p2 = (p - exp(-lambda))/(1 - exp( -lambda));
sample2 = J ( nObs, 1, if ( randomuniform () < p2, 0, randomPoisson ( lambda ) ) );
// check proportion of zeros in each sample
propZero1 = mean ( sample1 == 0 );
propZero2 = mean ( sample2 == 0 );
// report results
print(evalinsert("Poportion of zeros in sample from standard ZIP ( 5, 0.10 :(</img> ^propZero1^."));
print(evalinsert("Poportion of zeros in sample from unconventionally-defined ZIP ( 5, 0.10 :(</img> ^propZero2^."));

Bien qu'il s'agisse de JSL, l'un ou l'autre peut être placé dans l'éditeur de formule si l'utilisateur souhaite le faire dans un tableau de données. J'ai illustré le premier cas ci-dessous.
