Hallo zusammen,
Dies ist mein erster Beitrag als SE ... entschuldigen Sie, wenn die Antwort trivial erscheint!
Ein Kunde möchte in der Lage sein, Zufallsdaten nach mehreren statistischen Gesetzen zu generieren, eines davon ist das ZIP-Gesetz. Im Formeleditor ist „Random Poisson()“ möglich, aber nicht „Random Zero Inflated Poisson()“.
Gibt es eine Möglichkeit, eine solche Zufallsverteilung zu erzeugen (mit Pi: % von Null und µ-Parameter der Poisson-Verteilung)?
Vielen Dank im Voraus, Stéphane
Hallo,
Erstens: Langweilig, aber wichtig: Ein ZIP(Lambda, p) wird typischerweise als Mischung aus einer Poisson-Verteilung (Lambda) und einer 0-Verteilung im Verhältnis (1-p) bzw. p modelliert.
Da eine Poisson-Verteilung in der Lage ist, selbst Nullen zu erzeugen, ist der tatsächliche Anteil der Nullen (langfristig) aus der ZIP größer als p und gleich p + (1-p)*e^( - Lambda).
Der Kunde muss sich also zunächst entscheiden: Möchte er p für die Wahrscheinlichkeit verwenden, dass die Daten aus der Nullverteilung (dem Standard) stammen, oder möchte er den GESAMTEN Anteil der durch die ZIP generierten Nullen angeben? Verfahren?
Wenn ersteres der Fall ist, verwenden Sie p, wie ich es unten verwendet habe. Wenn letzteres der Fall ist, sehen wir nach der Lösung von p = p` + (1 - p`) * e^(-lambda) für p`, dass der Kunde stattdessen p` für das unten stehende p ersetzen muss, wobei p` = ( p - e^(-lambda)) / ( 1 - e^(-lambda) ).
Sobald dies entschieden ist, ist die eigentliche Generierung der Daten dank der integrierten Random-Poisson-Funktion (Lambda) ziemlich einfach.
Der folgende Code zeigt die Ergebnisse für jeden Fall unter der Annahme, dass Lambda = 5 und p = 0,10 ist
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^."));

Obwohl es sich hierbei um JSL handelt, kann jedes dieser Elemente in den Formeleditor eingefügt werden, wenn der Benutzer dies in einer Datentabelle tun möchte. Den ersten Fall habe ich unten dargestellt.
