こんにちは、みんな、
これはSEとしての私の最初の投稿です...答えが些細に思えたら許してください!
顧客は、いくつかの統計法則に従ってランダム データを生成できるようにしたいと考えています。そのうちの 1 つが ZIP 法則です。 数式エディターでは、Random Poisson() ... を使用できますが、Random Zero Inflated Poisson() を使用することはできません。
そのようなランダムな分布を生成する方法はありますか (Pi: ゼロの % とポアソン分布の µ パラメータを使用)?
前もってありがとう、ステファン
やあ、
最初に: つまらないことですが、重要なことに、ZIP( lambda, p ) は通常、ポアソン (ラムダ) 分布と 0 分布の混合として、それぞれ (1-p) と p の比率でモデル化されます。
ポアソン分布は単独でゼロを生成できるため、ZIP からのゼロの実際の割合 (長期) は p よりも大きく、p + (1-p)*e^( - ラムダ) に等しくなります。
したがって、顧客が最初に行う必要があるのは、データがゼロ分布 (標準) に由来する確率を表すために p を使用するか、または ZIP によって生成されたゼロの TOTAL 比率を指定するかを決定することです。プロセス?
前者の場合は、以下で使用した p を使用します。 後者の場合、p = p` + (1 - p`) * e^(-lambda) を p` で解決した後、顧客は代わりに以下の p を p` に置き換える必要があることがわかります。ここで、 p` = ( p - e^(-ラムダ)) / ( 1 - e^(-ラムダ) ).
これが決定されると、組み込みのランダム ポアソン (ラムダ) 関数のおかげで、実際にデータを生成するのは非常に簡単です。
以下のコードは、ラムダ = 5 および 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^."));

これはJSLですが、ユーザーがデータテーブルでこれを行いたい場合は、これらのいずれかを式エディターに配置できます。 以下に最初のケースを示しました。
