Ciao a tutti,
Questo è il mio primo post da SE...scusate se la risposta vi sembra banale!
Un cliente vorrebbe essere in grado di generare dati casuali secondo diverse leggi statistiche, una delle quali è la legge ZIP. Nell'editor di formule, è possibile avere Random Poisson() ... ma non Random Zero Inflated Poisson().
C'è un modo per generare una tale distribuzione casuale (con Pi: % di zero e parametro µ della distribuzione di Poisson)?
Grazie in anticipo, Stephane
CIAO,
Primo: noioso ma importante, un ZIP( lambda, p ) è tipicamente modellato come la miscela di una distribuzione poisson (lambda) e una distribuzione 0, rispettivamente nelle proporzioni (1-p) e p.
Poiché una distribuzione di Poisson è in grado di generare zeri da sola, la proporzione effettiva di zeri (a lungo termine) dallo ZIP sarà maggiore di p e uguale a p + (1-p)*e^( - lambda).
Quindi la prima cosa che il cliente deve fare è decidere: desidera utilizzare p per indicare la probabilità che i dati provengano dalla distribuzione zero (lo standard) o desidera specificare la proporzione TOTALE di zeri generata dallo ZIP processi?
Nel primo caso, usa p come l'ho usato di seguito. Se quest'ultimo, dopo aver risolto p = p` + (1 - p`) * e^(-lambda) per p`, vediamo che il cliente deve invece sostituire p` per p sotto, dove p` = ( p - e^(-lambda)) / ( 1 - e^(-lambda) ).
Una volta deciso questo, la generazione dei dati è piuttosto semplice, grazie alla funzione Random Poisson ( lambda ) incorporata.
Il codice seguente mostra i risultati per ogni caso, assumendo lambda = 5 e 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^."));

Mentre questo è JSL, uno di questi può essere inserito nell'editor di formule se l'utente desidera farlo in una tabella di dati. Di seguito ho illustrato il primo caso.
