К разделу 'Математика' сайта AlgoList.

Домой Оглавление

Распределение Пуассона

Обозначение
Область значений x – целое,
Параметры Параметр положения
Плотность (функция вероятности)
Математическое ожидание
Дисперсия
Функция распределения

  Связь с другими распределениями


Вероятность того, что пуассонова случайная величина не превосходит x, равна вероятности того, что случайная величина, имеющая распределение хи-квадрат с степенями свободы, больше :. Поскольку хи-квадрат, в свою очередь, является частным случаем гамма-распределения, получаем . Конечно, к этому заключению можно было придти и непосредственно.

Сумма n независимых случайных величин, , i=1..n, где подчиняется распределению Пуассона с параметром , имеет также распределение Пуассона с параметром .

Распределение Пуассона является предельной формой биномиального распределения при , , .

При распределение Пуассона можно аппроксимировать нормальным распределением со средним и дисперсией, равными .


  Генерация случайных чисел


Простой способ мне не известен. Вот трудоемкий:

Вычисляем функцию распределения , x=0..N где N произвольно, но достаточно велико (величина этого "велико" зависит от величины ). Положим , если , где r подчиняется равномерному на [0,1] распределению.

Поскольку вычислять функцию распределения бывает накладно, при малых можно применять следующий метод: , если , , …, , .


  Вычисление функции распределения и ее квантилей


Конечно, при вычислении кумулятивной функции распределения следует воспользоваться упомянутой связью пуассоновского и гамма-распределения (см. функцию poissonDF). Этот способ заведомо лучше непосредственного суммирования уже при n = 10.

Как всегда, когда мы имеем дело с дискретной функцией распределения, вычисление квантилей неосмысленно; при проверке статистических критериев предлагается сравнивать с заданным порогом наблюденные значимости.

Взамен приводится функция rev_poissonDF, которая по известной вероятности y того, что случайная величина, подчиняющаяся распределению Пуассона, не превосходит n, находит параметр этого распределения. Другими словами, эта функция применяется для решения по уравнения .

Она полезна, например, для определения левой и правой границ доверительного интервала.

Файл poissonDF.h

#ifndef __POISSON_H__			// Prevents redefinition

/****************************************************/
/*                 Распределение Пуассона           */
/****************************************************/

double poissonDF(double lambda, double n);
/* Вычисляет вероятность того, что случайная величина,
 * подчиняющаяся распределению Пуассона с средним lambda,
 * не превосходит n.
 */

double rev_poissonDF(double n, double q);
/* По известной вероятности q того, что случайная величина,
 * подчиняющаяся распределению Пуассона, не превосходит n,
 * находит среднее lambda, для которого poissonDF(lambda, n)
 * вернет q.
 */

double rightCI_Poisson(double n, double level);
/* По известному количеству "успехов" вычисляется
 * правая граница доверительного интервала с
 * доверительным уровнем level.
 */

double leftCI_Poisson(double n, double level);
/* По известному количеству "успехов" вычисляется
 * левая граница доверительного интервала с
 * доверительным уровнем level.
 */

#define __POISSON_H__		// To prevent redefinition
#endif				// Ends "#ifndef __POISSON_H__	

Файл poissonDF.cpp

/****************************************************/
/*                 Распределение Пуассона           */
/****************************************************/
#include <assert.h>

#include "gammaDF.h"

ENTRY double
poissonDF(double lambda, double n)
/* Вычисляет вероятность того, что случайная величина,
 * подчиняющаяся распределению Пуассона с средним lambda,
 * не превосходит n.
 */
{
   assert(lambda > 0);
   return (n < 0) ? 0 : 1-GammaDF(n+1).value(lambda);
}/*poissonDF*/

ENTRY double
rev_poissonDF(double n, double q)
/* По известной вероятности q того, что случайная величина,
 * подчиняющаяся распределению Пуассона, не превосходит n,
 * находит среднее lambda, для которого poissonDF(lambda, n)
 * вернет q.
 */
{
   assert((q >= 0) && (q <= 1));
   return (q == 0) ? 0 : ((q == 1) ? 1 : 1-GammaDF(n+1).inv(q));
}/*rev_poissonDF*/

ENTRY
double rightCI_Poisson(double n, double level)
{
   assert((level >= 0.5) && (level < 1));
   return rev_poissonDF(n, (1+y)/2);
}/*rightCI_Poisson*/

ENTRY
double leftCI_Poisson(double n, double level)
{
   assert((level >= 0.5) && (level < 1));
   return rev_poissonDF(n, (1-y)/2);
}/*leftCI_Poisson*/

Дата последней модификации: 30 апреля 2000 г.