大家好,
这是我作为 SE 的第一篇文章……如果答案看起来微不足道,请原谅我!
客户希望能够根据多种统计定律生成随机数据,其中之一就是 ZIP 定律。 在公式编辑器中,可以有随机泊松()...但不能有随机零膨胀泊松()。
有没有办法生成这样的随机分布(Pi:零的百分比和泊松分布的 µ 参数)?
预先感谢,斯特凡
你好,
首先:无聊但重要的是,ZIP( lambda, p ) 通常被建模为泊松 (lambda) 分布和 0 分布的混合,比例分别为 (1-p) 和 p。
由于泊松分布能够自行生成零,因此 ZIP 中零(长期)的实际比例将大于 p,并且等于 p + (1-p)*e^( - lambda)。
因此,客户必须做的第一件事是决定:他们是否希望使用 p 代表数据来自零分布(标准)的概率,或者他们是否希望指定 ZIP 生成的零的总比例过程?
如果是前者,请使用 p,就像我在下面使用的那样。 如果是后者,那么在求解 p` 的 p = p` + (1 - p`) * e^(-lambda) 后,我们看到客户必须用 p` 代替下面的 p,其中 p` = ( p - e^(-lambda)) / ( 1 - e^(-lambda) )。
一旦决定了这一点,由于内置的随机泊松 ( lambda ) 函数,实际生成数据就非常简单。
下面的代码显示了每种情况的结果,假设 lambda = 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,但如果用户想在数据表中执行此操作,则可以将其中任何一个放入公式编辑器中。 我在下面说明了第一种情况。
