Hola a todos,
Esta es mi primera publicación como SE ... ¡perdónenme si la respuesta parece trivial!
A un cliente le gustaría poder generar datos aleatorios de acuerdo con varias leyes estadísticas, una de ellas es la ley ZIP. En el editor de fórmulas, es posible tener Random Poisson() ... pero no Random Zero Inflated Poisson().
¿Hay alguna forma de generar tal distribución aleatoria (con Pi: % de cero y parámetro µ de la distribución de Poisson)?
Gracias de antemano, Stéphane.
Hola,
Primero: aburrido pero importante, un ZIP( lambda, p ) generalmente se modela como la mezcla de una distribución de Poisson (lambda) y una distribución 0, en proporciones (1-p) y p, respectivamente.
Debido a que una distribución de Poisson es capaz de generar ceros por sí misma, la proporción real de ceros (a largo plazo) del ZIP será mayor que p e igual a p + (1-p)*e^( - lambda).
Entonces, lo primero que debe hacer el cliente es decidir: si desea usar p para representar la probabilidad de que los datos provengan de la distribución cero (el estándar), o si desea especificar la proporción TOTAL de ceros generados por el ZIP ¿proceso?
Si es lo primero, use p como lo he usado a continuación. Si es lo último, luego de resolver p = p` + (1 - p`) * e^(-lambda) para p`, vemos que el cliente debe sustituir p` por la p a continuación, donde p` = ( p - e^(-lambda)) / ( 1 - e^(-lambda) ).
Una vez que se ha decidido esto, generar los datos es bastante sencillo, gracias a la función Random Poisson (lambda) incorporada.
El siguiente código muestra los resultados para cada caso, asumiendo lambda = 5 y 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^."));

Si bien esto es JSL, cualquiera de estos se puede colocar en el editor de fórmulas si el usuario desea hacer esto en una tabla de datos. He ilustrado el primer caso a continuación.
