Основные понятия распределения вероятностей

advertisement
Основные понятия распределения вероятностей
ль
Определения
Простые примеры
Класс ProbabilityDistribution
иа
Класс DiscreteProbability
Класс ContinuousProbability
Дискретные распределения вероятностей
ен
ц
Распределение Бернулли
Биномиальное распределение
Геометрическое распределение
Распределение Пуассона
Непрерывные распределения вероятностей
нф
ид
Равномерное распределение
Экспоненциальное распределение
Гамма-распределение
Ко
Нормальное распределение
но
22
Распределение вероятностей
но
Основные понятия распределения вероятностей1
ль
В прикладных программах, таких как моделирование, часто желательно получить значения,
связанные с результатами экспериментов. В таких экспериментах, могут возникать
следующие вопросы:
• Какова вероятность появления определенного события?
Какова вероятность одного из нескольких возможных событий?
•
Чему равна вероятность того, что в следующих N испытаниях, произойдет по
крайней мере одно успешное событие?
•
Сколько успешных событий произойдет в следующих N испытаниях?
•
Сколько надо провести испытаний до следующего успешного события?
иа
•
Определения
Ко
нф
ид
ен
ц
В терминологии моделирования, испытание — это шаг часов модели (шаг часов может быть
представлен секундой, минутой, часом, днем, месяцем или годом, в зависимости от единицы
времени, подходящей для данной модели). Событие или успех — это возникновение
некоторого типа работы, например, прибытие автомобиля на мойку, приход клиента в банк,
поступление неработающего компьютера в мастерскую по ремонту.
В области статистики вероятность того, что событие произойдет, обычно определяется
из большого числа наблюдений реально проведенных испытаний. Например, необходим
длинный ряд наблюдений за ремонтной мастерской, чтобы определить вероятность того,
что в течении фиксированного интервала времени неработающий компьютер поступит в
мастерскую. В течении этого интервала времени, вообще говоря, могут произойти
несколько событий. Множество всех возможных событий называется выборочным
пространством. Функция вероятности на выборочном пространстве определяется
сопоставлением числа между 0 и 1 каждому событию из выборочного пространства.
Вероятность или возможность того, что произойдет по крайней мере одно событие из
выборочного пространства, определяется как 1; если p — вероятность того, что произойдет
событие E, то вероятность того, что E не произойдет, определяется как 1 – p.
Выборочные пространства разделяются на дискретные и непрерывные. Выборочное
пространство дискретно, если оно содержит конечное число возможных событий или
бесконечное число событий, которое взаимно однозначно отображается на множество
положительных целых чисел. Например, шесть возможных исходов бросания игральной
кости составляют дискретное выборочное пространство. Выборочное пространство
непрерывно, если оно содержит упорядоченное бесконечное множество событий, например,
любое число между 1.0 и 4.0. Функции вероятностей на каждом из этих типов выборочных
пространств называются, соответственно, дискретными функциями вероятностей и
непрерывными функциями вероятностей.
Случайная переменная (или случайная величина) — вещественнозначная функция,
определенная на событиях из выборочного пространства. Прилагательные “дискретная” и
“непрерывная” применяются к случайным величинам согласно характеристике их
выборочного пространства. Функция вероятностей случайной величины называется
распределением вероятностей; значения этой функции суть вероятности выпадения
возможных значений случайной величины. Плотность — функция, которая определяет
вероятность в допустимой области случайной величины. Любая функция может быть
1
Точные определения теории вероятностей, а также полное математическое описание всех распределений
вероятностей, которые будут реализованы далее в виде классов, можно найти в книге Феллера В., Введение в
теорию вероятностей и ее приложения, т.1. — М.: Мир, 1964; т.2. — М.: Мир, 1967. — примеч. перев.
ль
но
функцией плотности (дискретной или непрерывной), если она положительна и сумма ее
значений (ее интеграл) равен 1.
Другая полезная функция, которая играет важную роль в моделировании называется
(кумулятивной) функцией распределения. Она определяет вероятность того, что значение
случайной переменной попадает внутрь заданной области. Например, функция
распределения отвечает на вопрос: какова вероятность того, что при броске игральной кости
выпавшее число очков будет меньше или равно 4?
Математическое ожидание (или среднее) случайной величины определяется как
среднее значение, которое может принимать случайная величина. Дисперсия — мера
разброса распределения — определяется как среднее квадратичное отклонение от
математического ожидания.
Простые примеры
c(a,b) = Ëa g(X)
b
ен
ц
иа
До введения детального описания классов вероятностей рассмотрим два примера
выборочных пространств. Предположим, что выборочное пространство — возможные
результаты бросания игральной кости. Оно состоит из событий:
событие1: выпала 1
событие2: выпала 2
событие3: выпала 3
событие4: выпала 4
событие5: выпала 5
событие6: выпала 6.
Тогда для этого дискретного распределения вероятностей функция вероятностей для
каждого события равна
f(событие) = 1/6
Если X — случайная величина над этим выборочным пространством, то g(X) — функция
распределения вероятностей X такова:
g(X=1) = f(событие1) = 1/6, ... , g(X=6) = f(событие6) = 1/6
Функция плотности в данном случае для всех значений X равна 1/6. Кумулятивная
функция распределения X имеет вид
Ко
нф
ид
Например,
c(2,4) = g(X=2) + g(X=3) + g(X=4) = 1/6 + 1/6 + 1/6 = 1/2
Теперь пример непрерывного распределения вероятностей. Пусть выборочным
пространством будет интервал времени, который начинается в 00:00 ночи и заканчивается в
23:59:59.99... ночи.
Функция вероятностей
f(событие) = вероятность (событиеi <= время < событиеj)
где событиеi < событиеj.
Функция плотности X такова:
g(X = любое заданное время) = 0
Предположим, у нас 24-часовые часы. Тогда вероятность того, что взглянув на часы, мы
обнаружим часовую стрелку между 1:00 и 3:00 после полудня, определяется кумулятивной
функцией распределения:
3,00
с(1:00, 3:00) = 8
g(X)
1,00
g(X) постоянна на всем 24-часовом интервале. Поэтому
c(1:00, 3:00) = c(1:00, 2:00) + c(2:00, 3:00) = 1/24 + 1/24 = 1/12.
Класс ProbabilityDistribution
Класс ProbabilityDistribution (РаспределениеВероятностей) — это суперкласс всех
классов распределения вероятностей, который обеспечивает протокол для получения одной
или нескольких случайных выборок из заданного распределения, для вычисления функции
плотности и кумулятивной функции распределения. Он имеет переменную класса U,
superclass
class variable names
class methods
class initialization
ль
ProbabilityDistribution
Stream
U
class name
но
которая является экземпляром класса Random. Класс Random позволяет получить
равномерно распределенную на интервале [0,1] случайную величину.
Как и класс Random, класс ProbabilityDistribution — это поток, в котором очередной
доступный элемент порождается алгоритмически. Всякий раз, когда требуется случайная
next.
величина,
распределению
вероятностей
посылается
сообщение
Класс
ProbabilityDistribution реализует сообщение next как результат посылки сообщения
inverseDistribution: var, где переменная var - случайное число между 0 и 1. Подклассы
ProbabilityDistribution или должны реализовывать сообщение inverseDistribution: для того,
чтобы отображать интервал [0,1] на свое выборочное пространство, или, иначе, они должны
переопределять сообщение next. Сообщение next: наследуется из суперкласса Stream.
иа
initialize
"Равномерно распределенные случайные числа в интервале [0,1]"
U à Random new
instance creation
xself basicNew
instance methods
random sampling
ен
ц
new
нф
ид
next
"Это общий метод порождения случайного числа,
подчиняющегося любому вероятностному закону.
Метод использует равномерно распределенную на
интервале (0,1) случайную величину U как значение
соответствующей функции распределения.
Получает очередное случайное значение и
выполняет обращение.
Метод обращения определяется подклассом."
xself inverseDistribution: U next
testing
atEnd
xfalse
probability functions
Ко
density: x
"Это функция плотности"
self subclassResponsibility
distribution: aCollection
"Это кумулятивная функция распределения.
Аргумент aCollection – область последовательных
значений случайной величины.
Распределение с точки зрения математики - площадь области
под кривой вероятности (функцией плотности)
на заданном интервале."
self subclassResponsibility
private
inverseDistribution: x
self subclassResponsibility
но
computeSample: m outOf: n
"Вычислить число размещений без повторений
по m элементов из набора размера n."
m > n ifTrue: [x0.0].
xn factorial / (n – m) factorial
ль
Чтобы инициализировать переменную класса U, необходимо выполнить выражение
ProbabilityDistribution initialize
Вычисление числа размещений без повторений из n элементов по m предоставляет
полезный метод, разделяемый подклассами.
иа
Класс DiscreteProbability
Два типа распределения вероятностей, дискретный и непрерывный, определяются как
подклассы класса ProbabilityDistribution. Каждый обеспечивает реализацию кумулятивной
функции распределения, которая зависит от функции плотности. Эти реализации
предполагают, что функция плотности будет определена в подклассах.
superclass
instance methods
probability functions
DiscreteProbability
ProbabilityDistribution
ен
ц
class name
нф
ид
distribution: aCollection
"Возвращает сумму дискретных значений функции плотности от
каждого элемента из набора aCollection."
|t|
t à 0.0.
aCollection do: [ :i | t à t + (self density: i)].
xt
Класс ContinuousProbability
class name
superclass
ContinuousProbability
ProbabilityDistribution
instance methods
probability functions
Ко
distribution: aCollection
"Это медленный и грубый метод трапеций для вычисления интеграла,
определяющего площадь области под кривой вероятности y=density(x),
когда x принадлежит заданному численно упорядоченному набору
aCollection."
| t aStream x1 x2 y1 y2 |
t 0.0.
aStream ReadStream on: aCollection.
x2 aStream next.
y2 self density: x2.
[x1 x2. x2 aStream next]
whileTrue:
[y1 y2 .
y2 self density: x2.
t
xt * 0.5
t + ((x2 – x1) * (y2 + y1))].
ль
Дискретные распределения вероятностей
но
Для того, чтобы определить различные виды распределения вероятностей через подклассы
класса DiscreteProbability или класса ContinuousProbability, необходимо реализовать
функцию плотности и функцию обращения распределения (или переопределить ответ на
сообщение next).
число студентов
3
2
4
3
5
3
ен
ц
рост в дюймах
60"
62"
64"
66"
68"
70"
иа
Как пример дискретного распределения вероятностей, определим рост студентов из группы
в 20 человек и составим таблицу, в которой укажем число студентов, имеющих одинаковый
2
рост (рост дается в дюймах ). Таблица могла бы быть, например, такой:
Получив эту информацию, мы можем задать вопрос: какова вероятность случайного выбора
студента ростом в 5 футов 4 дюйма? На этот вопрос можно ответить, вычисляя функцию
плотности дискретной вероятности, связанную с полученной информацией. В частности,
мы можем определить функцию плотности с помощью следующей таблицы:
плотность
3/20
2/20
4/20
3/20
5/20
3/20
нф
ид
рост
60"
62"
64"
66"
68"
70"
Ко
Предположим, что мы определяем подкласс класса DiscreteProbability, который называем
SampleSpace (ПространствоИспытаний), и определяем вышеупомянутую таблицу как
значение переменной экземпляра класса SampleSpace. Ответом на сообщение density: x
будет значение, связанное с x из таблицы (в примере, значение x — возможный рост
студента группы); значение плотности в точке x, когда x вне таблицы, полагаем равным 0.
Вероятность выбора студента заданного роста, очевидно, равна соответствующему
значению функции плотности, то есть числу студентов группы заданного роста, деленному
на число всех студентов в группе. Реализация кумулятивной функции распределения
наследуется из суперкласса.
class name
superclass
instance variable names
SampleSpace
DiscreteProbability
data
class methods
2
1 дюйм = 2,54 см; 1 фут = 12 дюймам. — примеч. перев.
instance creation
instance methods
probability functions
inverseDistribution: x
xdata at: (x * data size) truncated + 1
setData: aCollection
data aCollection
иа
private
ль
density: x
"Аргумент x должен быть из выборочного пространства;
вероятность должна суммироваться по всем вхождениям x
в выборочное пространство"
(data includes: x)
ifTrue: [x(data occurrencesOf: x) / data size]
ifFalse: [x0]
но
data: aCollection
xself new setData: aCollection
Предположим, что heights - экземпляр класса SampleSpace. Его переменная экземпляра
date — массив из 20 элементов, представляющий рост каждого студента из примера, то есть:
SampleSpace data:
ен
ц
heights
# (60 60 60 62 62 64 64 64 64 66 66 66 68 68 68 68
68 70 70 70)
Ко
нф
ид
Теперь мы можем спросить у объекта heights, какова вероятность случайного выбора
студента с ростом 64 дюйма или какова вероятность случайного выбора студента с ростом
между 60 и 64 дюймами? Ответ на первый вопрос — значение функции плотности, то есть,
ответ на сообщение density: 64. Ответ на второй вопрос — значение кумулятивной функции
распределения, то есть, ответ на сообщение distribution: (60: to: 64 by: 2).
Экземпляр класса SampleSpace имеет много общего с дискретным равномерным
распределением. Вообще говоря, дискретное равномерное распределение определяется над
конечной областью значений. Например, мы можем определять равномерное распределение
для шести значений: 1, 2, 3, 4, 5, 6, соответствующих сторонам кости. Функция плотности,
константа 1/6, указывает, что кость — правильная, то есть, вероятность выбросить каждую
из сторон одна и та же.
Мы определим четыре типа дискретных распределений вероятностей, которые полезны
в исследовании моделей. Это распределение Бернулли, биномиальное, геометрическое и
распределение Пуассона. Распределение Бернулли отвечает на вопрос, будет ли успешным
следующее испытание? Биномиальное распределение представляет повторение N
независимых распределений Бернулли, когда N больше или равно единицы. Оно отвечает
на вопрос, сколько будет успешных испытаний в следующих N испытаниях? Становясь на
несколько отличную точку зрения, геометрическое распределение отвечает на вопрос,
сколько независимых испытаний Бернулли необходимо провести до первого успешного
испытания? Распределение Пуассона используется, когда необходимо ответить на вопрос,
сколько событий произойдет в заданном интервале времени? В частности, с помощью
распределения Пуассона можно определить вероятность того, что в некотором интервале
времени произойдет K событий, где K больше или равно 0.
Распределение Бернулли
Распределение Бернулли используется в случае, когда выборочное пространство состоит
всего из двух возможностей, успеха и неудачи, каждая с заданной вероятностью.
Выборочные пространства с двумя возможностями возникают в следующих испытаниях.
Бросание игральной кости, когда спрашивается, выпадет ли число 4? Вероятность
успеха, если кость правильная, 1/6; вероятность неудачи 5/6.
•
Бросание монеты, когда спрашивается, выпадет ли решка?. Вероятность успеха,
если монета правильная, 1/2; вероятность неудачи тоже 1/2.
•
Сдача из колоды карты, когда спрашивается, выпадет ли дама червей? Вероятность
успеха, если колода стандартная (52 листа), 1/52; вероятность неудачи 51/52.
но
•
В соответствии с определением класса Bernoulli (Бернулли), мы создадим пример
распределение Бернулли, выполнив выражение
ль
Bernoulli parameter: 0.17
иа
В этом примере создано распределение Бернулли с вероятностью успеха равной 0.17.
Вероятность успеха в распределении Бернулли равна математическому ожиданию.
Аргумент сообщения parameter:, назовем его prob, — число из интервала (0,1), равное
вероятности одного из двух возможных исходов. Обычно оно обозначает вероятность
успеха. Функция плотности отображает два возможных исхода, 1 или 0, соответственно, на
аргумент prob или на его обращение 1–prob. Кумулятивная функция распределения
наследуется из суперкласса и может возвращать только значения prob или 1.
Bernoulli
DiscreteProbability
prob
class name
superclass
class methods
instance creation
ен
ц
instance variable names
parameter: aNumber
(aNumber between: 0.0 and: 1.0)
ifTrue: [xself new setParameter: aNumber]
ifFalse: [self error: 'Вероятность должна быть между 0.0 и 1.0]
instance methods
accessing
нф
ид
mean
xprob
variance
xprob * (1.0 – prob)
probability functions
density: x
"Пусть 1 обозначает успех"
x = 1 ifTrue: [xprob].
"Пусть 0 обозначает неудачу"
x = 0 ifTrue: [x1.0 – prob].
self error: 'исход испытания Бернулли должен быть равен 1 или 0'
Ко
private
inverseDistribution: x
"В зависимости от случайной переменной x, случайный выбор будет
равен 1 или 0, то есть, успеху или неудаче испытания Бернулли"
x < = prob
ifTrue: [x1]
ifFalse: [x0]
setParameter: aNumber
prob aNumber
но
Предположим, что в некоторый момент игры в карты, мы хотим определить, будет ли туз
первой сданной картой колоды? Тогда возможный (случайно определенный) ответ можно
получить выборкой из распределения Бернулли с аргументом 4/52:
(Bernoulli parameter: 4/52) next
иа
ль
Давайте проследим как происходит выполнение этого выражения.
Метод, связанный с унарным сообщением next, будет найден в словаре методов класса
ProbabilityDistribution. Метод возвращает значение выражения self inverseDistribution: U
next. То есть, случайное число между 0 и 1, полученное как результат выполнения
выражения U next, становиться аргументом сообщения inverseDistribution:. Метод,
связанный с сообщением inverseDistribution:, будет найден в словаре методов класса
Bernoulli. Это функция обращения распределения, отображение значения prob
кумулятивной функции распределения на значение x, при котором prob — вероятность
того, что случайная величина меньше или равна x. В распределении Бернулли x может
принимать только два значения, которые обозначаются целыми числами 1 и 0.
Биномиальное распределение
нф
ид
ен
ц
Когда нужно выяснить, произойдет или нет некоторое событие, например, прибудет ли в
следующую секунду автомобиль на мойку или принесут ли сегодня неработающий
компьютер в мастерскую, используется распределение Бернулли. Биномиальное
распределение отвечает на вопрос: сколько успешных событий произойдет в следующих N
испытаниях? Функция плотности распределения Бернулли определяет вероятность того,
что случится одно из двух возможных событий. Функция плотности биномиального
распределения отвечает на вопрос о том, какова вероятность того, что в следующих N
испытания x испытаний окажутся успешными?
Биномиальное распределение представляет N повторений независимых испытаний
Бернулли. При N = 1 оно совпадает с распределением Бернулли. Класс Binomial — подкласс
класса Bernoulli, определяющий дополнительную переменную экземпляра N, которая
представляет число испытаний. Экземпляр этого класса в ответ на сообщение next
возвращает результат ответа на вопрос: сколько будет успешных испытаний среди N
испытаний?
3
Функция распределения вероятностей для биномиального распределения равна
N!
x
N–x
p (1-p)
x! (N-x)!
где x — число успешных испытаний, а p — вероятность успеха при каждом испытании.
Обозначение “!” представляет математическую функцию факториал. Первое выражение в
формуле можно рассматривать как результат деления числа размещений из N элементов по
x на число размещений из x элементов по x. Таким образом, в определяемых ниже методах
будет использоваться реализованный в суперклассе ProbabilityDistribution метод
computeSample: a outOf: b.
class name
superclass
instance variable names
Binomial
Bernoulli
N
Ко
class methods
instance creation
events: n mean: m
n truncated <= 0
ifTrue: [self error: 'Число событий должно быть > 0'].
xself new events: n mean: m
3
Здесь и далее речь идет о функции плотности распределения вероятностей. — примеч. перев.
instance methods
random sampling
ль
но
next
|t|
"Надежный, но медленный метод реализации N испытаний Бернулли.
Так как распределение Бернулли возвращает 0 или 1, данный
метод возвращает число между 0 и N."
t 0.
N timesRepeat: [t t + super next].
xt
probability functions
иа
density: x
(x between: 0 and: N)
ifTrue: [x((self computeSample: x outOf: N)
/ (self computeSample: x outOf: x))
* (prob raisedTo: x) * (1.0 – prob) raisedTo: N – x]
ifFalse: [x0.0]
private
events: n mean: m
N n truncated.
self setParameter: m/N
"Метод setParameter: реализован в суперклассе."
ен
ц
Пусть, например, подбрасывают монету и проводится пять испытаний, в каждом из которых
вероятность выпадения решки равна 0.5. Тогда экземпляр класса Bernoulli c параметром 0.5
представляет одно испытание:
sampleA
Bernoulli parameter: 0.5
Результатом выражения
нф
ид
sampleA next
будет 1 или 0, отвечая на вопрос, выпала ли решка?
Теперь создадим экземпляр класса Binomial:
sampleB
Binomial events: 5 mean: 2.5
Результатом выражения
sampleB next
будет число между 0 и 5, отвечающее на вопрос, сколько раз выпала решка в 5 испытаниях.
Сообщение
sampleB density: 3
возвращает число между 0 и 1, отвечая на вопрос, какова вероятность выпадения 3-х решек
в 5 испытаниях?
Ко
Геометрическое распределение
Предположим, что мы хотим получить ответ на вопрос: сколько независимых испытаний
Бернулли необходимо провести до первого успешного испытания? Этот новый взгляд на
распределение Бернулли и есть геометрическое распределение. Как и в предыдущих
случаях, вероятность успеха расположена между 0.0 и 1.0; математическое ожидание для
геометрического распределения есть величина обратная вероятности успеха. Так, если мы
создадим геометрическое распределение с помощью выражения
Geometric mean: 5
Geometric
Bernoulli
class name
иа
superclass
ль
но
то математическое ожидание будет равно 5, а вероятность успеха 1/5. Величина
математического ожидания должна быть больше или равна 1.
Геометрическое распределение больше подходит для построения управляемых
событиями моделей, чем распределения Бернулли или биномиальное. Вместо того, чтобы
спрашивать, сколько автомобилей прибудет на мойку в следующие 20 секунд
(биномиальное распределение), геометрическое распределение определит число секунд до
прибытия следующего автомобиля. В управляемых событиями моделях часы модели сразу
перейдут на время следующего события. Таким образом, используя геометрическое
распределение, мы можем определять время, когда произойдет следующее событие, и
соответственно этому устанавливать часы модели. Затем мы можем выполнять все
необходимые действия, потенциально “сохраняя” большую часть реального времени.
Функция распределения вероятностей равна
x–1
p(1–p)
где x — число требуемых испытаний, а p — вероятность успеха в единичном испытании.
class methods
instance creation
instance methods
accessing
mean
x1.0 / prob
ен
ц
mean: m
xself parameter: 1/m
"Сообщение parameter: реализовано в суперклассе."
variance
x(1.0 – prob) / prob squared
нф
ид
probability functions
density: x
x > 0 ifTrue: [xprob * ((1.0 – prob) raisedTo: x – 1)]
ifFalse: [x0.0]
private
inverseDistribution: x
"Метод взят из книги Д.Кнута, т.2, стр. 145-146."
x(x ln / (1.0 – prob) ln) ceiling
Предположим, что в среднем каждую минуту на переправу прибывает два автомобиля. Мы
можем выразить эту статистическую информацию как
sample
Geometric mean: 60/2
Ко
Функцию плотности можно использовать для ответа на вопрос: какова вероятность того,
что потребуется N испытаний до следующего успешного испытания? Например, какова
вероятность того, что пройдет 30 секунд прежде, чем прибудет следующий автомобиль?
sample density: 30
Кумулятивную функцию распределения можно использовать для ответа на вопрос: какова
вероятность того, что следующий автомобиль прибудет через 30 - 40 секунд?
sample distribution: (30 to: 40)
Распределение Пуассона
ен
ц
иа
ль
но
Пусть требуется выяснить, сколько событий произойдет в единицу времени (или в
интервале пространства)? Биномиальное распределение рассматривает случай из двух
независимых событий, таких как вытаскивание короля червей или короля пик из полной
колоды карт. Однако, существуют случайные события, которые происходят в случайные
моменты времени или в случайных точках пространства. Такие события не являются
результатами испытаний. В этих обстоятельствах нет смысла рассматривать вероятность
успешного или неуспешного события. Нет смысла спрашивать, сколько автомобилей не
прибудет на паром или сколько самолетов не приземлится в аэропорту. Разумнее спросить,
сколько автомобилей прибудет на паром или сколько самолетов приземлится в аэропорту в
следующую единицу времени?
Распределение Пуассона применяется в моделировании при выборке потенциальных
запросов клиентов к системе обслуживания, например, к кассирам, коммивояжерам,
техникам или копировальным аппаратам фирмы Xerox. Опыт показал, что частота
обслуживания клиентов хорошо апроксимируется вероятностным законом Пуассона.
Закон Пуассона описывает вероятность того, что в точности x событий произойдет за
единичный интервал времени, когда средняя частота событий за единицу времени задается
переменной mu, где mu >= 0. Тогда для интервала времени dt соответствующая
вероятность равна mu * dt.
Функция распределения вероятностей Пуассона равна
x -a
a e / x!
где a — средняя частота (mu), e — основание натурального логарифма, x — число событий за
единицу времени, ! — знак факториала.
Poisson
DiscreteProbability
mu
class name
superclass
instance variable names
class methods
instance creation
нф
ид
mean: p
"p - среднее число событий, случившихся на единичном интервале"
p > 0.0
ifTrue: [xself new setMean: p]
ifFalse: [self error: ' среднее должно быть больше 0.0']
instance methods
accessing
mean
xmu
variance
xmu
random sampling
Ко
next
"Сколько событий произойдет на следующем единичном интервале?"
|pnq|
p mu negated exp.
n 0.
q 1.0.
[q q * U next.
q >= p]
whileTrue: [n n + 1].
xn
density: x
"Вероятность того, что в единичном интервале времени
произойдет x событий"
x >= 0
ifTrue: [x((mu raisedTo: x) * (mu negated exp)) / x factorial]
ifFalse: [x0.0]
private
setMean: p
mu p.
ль
но
probability functions
иа
Результат, возвращаемый сообщением next, отвечает на вопрос, сколько событий
происходит в единичном интервале времени (или пространства). Функция плотности
определяет вероятность того, что в единичном интервале (времени или пространства)
произойдет x событий. Кумулятивная функция распределения от x определяет вероятность
того, что в единичном интервале произойдет x или меньше событий.
ен
ц
Непрерывные распределения вероятностей
нф
ид
Непрерывную случайную величину можно понимать как любое значение из интервала или
совокупности интервалов. В случае непрерывного распределения возможны вопросы,
подобные тем, что задавались в дискретных случаях, и непрерывные распределения
вероятностей показывают полное соответствие с дискретными. В случае непрерывного
распределения, например, возможен вопрос: какова вероятность получить данную
температуру в определенный момент времени? Температура — это физическое свойство,
которое измеряется на непрерывной шкале.
Мы определим четыре вида непрерывного распределения вероятностей; это
равномерное, экспоненциальное, нормальное и гамма распределения. Равномерное
распределение отвечает на вопрос, какое событие произойдет из данного набора
равновероятных событий? Экспоненциальное распределение используется тогда, когда
надо определить, сколько пройдет времени до первого (или следующего) события, при
условии, что события подчиняются распределению Пуассона? Гамма-распределение имеет
отношение к ответу на вопрос о том, сколько необходимо времени чтобы произошло N
событий? Нормальное распределение (или, иначе, распределение Гаусса) полезно при
апроксимации предельных форм других распределений. Оно играет значительную роль в
статистике, поскольку его просто использовать, оно симметрично относительно
математического ожидания, полностью определяется двумя параметрами —
математическим ожиданием и дисперсией, и, наконец, отражает распределение
повседневных событий.
Равномерное распределение
Ко
Мы уже исследовали равномерное распределение как разновидность выбора дискретных
элементов из конечного выборочного пространства. Вопрос был такой: дан набор
равновероятных событий, которое из них следующее? В непрерывном случае выборочное
пространство представляет собой бесконечное множество, такое как время или интервал
между 0 и 1. Определяемый ниже класс Uniform расширяет возможности класса Random,
генерируя в ответ на сообщение next случайную величину внутри любого интервала.
class name
superclass
instance variable names
Uniform
ContinuousProbability
startNumber
stopNumber
class methods
instance creation
но
from: begin to: end
begin > end
ifTrue: [self error: 'неправильный интервал']
ifFalse: [xself new setStart: begin toEnd: end]
instance methods
mean
x(startNumber + stopNumber) / 2
variance
x(stopNumber – startNumber) squared / 12
иа
probability functions
ль
accessing
density: x
(x between: startNumber and: stopNumber)
ifTrue: [x1.0 / (stopNumber – startNumber)]
ifFalse: [x0]
ен
ц
private
inverseDistribution: x
"x случайное число между 0 и 1"
xstartNumber + (x * (stopNumber – startNumber))
setStart: begin toEnd: end
startNumber begin.
stopNumber end
нф
ид
Экспоненциальное распределение
Ко
Экспоненциальное распределение определяет, сколько времени пройдет до следующего
события, при условии, что события подчиняются распределению Пуассона. Это
распределение предпочтительнее для компьютерного моделирования, чем распределение
Пуассона, по тем же причинам, по которым геометрическое распределение
предпочтительнее биномиального. Благодаря ему, мы можем сразу установить часы модели
на время следующего события, вместо того, чтобы шагать последовательно через заданную
единицу времени.
Как пример использования выборки с экспоненциальным распределением, мы могли бы
спросить, когда следующий автомобиль прибудет на мойку? Значение функции плотности
от аргумента x равно вероятности того, что следующее событие произойдет в интервале
времени x. Пример такого рода вопроса: какова вероятность того, что следующий
автомобиль прибудет на мойку в следующие 10 минут?
Экспоненциальное распределение обычно используется в тех моделях, для которых
ситуация ухудшается со временем. Например, нужно определить вероятность того, что
лампа накаливания или часть электронного оборудования выйдет из строя до некоторого
времени x. В таких случаях применяется экспоненциальное распределение, поскольку чем
дольше мы используем оборудование, тем больше шансов, что оно перестанет
функционировать.
Подобно случаю распределения Пуассона, параметр экспоненциального распределения
mu задается в терминах событий на единицу времени, хотя область определения этого
распределения — время (не события).
Функция экспоненциального распределения вероятностей следующая
x/a
e /a
где a — среднее время ожидания между событиями (mu= 1/a).
superclass
instance variable names
Exponential
ContinuousProbability
mu
но
class name
class methods
instance creation
ль
mean: p
"Так как экспоненциальный параметр mu тот же, что и у распределения
Пуассона, если задано среднее экспоненциального распределения,
то берем обратную величину для получения параметра вероятности"
xself parameter: 1.0 / p
иа
parameter: p
p > 0.0
ifTrue: [xself new setParameter: p]
ifFalse: [self error:
'Параметр вероятности (среднее) должен быть больше 0.0']
instance methods
mean
x1.0 / mu
variance
x1.0 / (mu * mu)
probability functions
ен
ц
accessing
нф
ид
density: x
x > 0.0
ifTrue: [xmu * (mu * x) negated exp]
ifFalse: [x0.0]
distribution: anInterval
anInterval last <= 0.0
ifTrue: [x0.0]
ifFalse: [x1.0 – (mu * anInterval last) negated exp –
(anInterval first > 0.0
ifTrue: [self distribution:
(0.0 to: anInterval first)]
ifFalse: [0.0])]
private
Ко
inverseDistribution: x
"Реализация согласно книге Д. Кнута, т.2, стр. 141-142."
xx ln negated / mu
setParameter: p
mu p
Гамма-распределение
Гамма-распределение относится к экспоненциальному распределению, которое отвечает на
вопрос: сколько времени должно пройти, чтобы произошло N событий? Например, мы
можем использовать гамма-распределение, чтобы определить сколько времени надо ждать
но
прибытия N-го автомобиля на паром. Каждый экземпляр класса Gamma представляет N-е
событие и вероятность появления этого N-го события (наследуется из суперкласса
Exponential). Переменная N, определяемая в классе Gamma, должна быть положительным
целым числом.
Функция вероятностей для гамма-распределения равна
− − − Gamma
Exponential
N
class name
superclass
иа
instance variable names
ль
где mu = 1/a — параметр вероятности, e — основание натурального логарифма, k — целое
положительное число. Как известно, знаменатель (k–1)! равен значению гамма-функции
Эйлера от аргумента k, когда известно, что k – целое число большее 0. Реализация класса
Gamma, приведенная ниже, не делает этого предположения.
class methods
instance creation
events: k mean: p
| events |
events k truncated.
events > 0
ifTrue: [x(self parameter: events / p) setEvents: events]
ifFalse: [self error: 'число событий должно быть больше 0']
instance methods
accessing
mean
xsuper mean * N
ен
ц
нф
ид
variance
xsuper variance * N
probability functions
density: x
|t|
x > 0.0
ifTrue: [t
mu * x.
x(mu raisedTo: N) / (self gamma: N)
* (x raisedTo: N – 1)
* t negated exp]
ifFalse: [x0.0]
private
Ко
gamma: n
|t|
t n – 1.0.
xself computeSample: t outOf: t
setEvents: events
N events
Нормальное распределение
 − 

 
π
class name
superclass
Normal
ContinuousProbability
mu
sigma
нф
ид
instance variable names
ен
ц
иа
ль
но
Нормальное распределение, называемое также распределением Гаусса, применяется для
обобщения или апроксимации других распределений. С помощью нормального
распределения можно ответить на вопрос о том, сколько времени надо ждать следующего
успешного события (подобно дискретному биномиальному распределению) или сколько
событий произойдет в определенном интервале времени (подобно дискретному
распределения Пуассона)? Нормальное распределение может быть использовано для
апроксимации биномиального распределения, когда число событий очень велико, или
распределения Пуассона, когда велико математическое ожидание. Однако, такие
апроксимации точны только в малой окрестности математического ожидания и ошибка
приближения возрастает при удалении от него.
Нормальное распределение применяется, когда есть центральное доминирующее
значение (математическое ожидание) и вероятность уменьшается с увеличением
отклонения от математического ожидания. Если построить график функции плотности
нормального распределения с аргументами на оси x и с соответствующими вероятностями
на оси y, получившаяся кривая будем иметь форму колокола. Эта форма кривой определена
условиями, что вероятности симметричны относительно математического ожидания,
возможные значения аргументов из выборочного пространства заполняют бесконечную
числовую прямую, а площадь области под кривой (сумма всех вероятностей) равна 1.
Нормальное распределение применяется для определения вероятности измерений,
например, когда измеряется размер шара. Результатами измерения будут величины,
группирующиеся, за малым исключением, около центрального значения — математического
ожидания.
Параметры нормального распределения — математическое ожидание mu и стандартное
отклонение sigma, которое должно быть большее 0. Функция вероятностей равна
class methods
instance creation
mean: a deviation: b
b > 0.0
ifTrue: [xself new setMean: a standardDeviation: b]
ifFalse: [self error: 'стандартное отклонение должно быть больше 0.0']
instance methods
accessing
Ко
mean
xmu
variance
xsigma squared
random sampling
next
"Полярный метод для нормального распределения, Д.Кнут,
т.2, стр. 130, 140."
| vl v2 s rand u |
но
rand Uniform from: –1.0 to: 1:0.
[v1 rand next.
v2 rand next.
s vl squared + v2 squared.
s > = 1] whileTrue.
u (-2.O * s ln / s) sqrt.
xmu + (sigma * v1 * u)
private
setMean: m standardDeviation: s
mu m.
sigma s
иа
density: x
| twoPi t |
twoPi 2 * 3.1415926536.
t x – mu / sigma.
x(–0.5 * t squared) exp / (sigma * twoPi sqrt)
ль
probability functions
Ко
нф
ид
ен
ц
В последующих главах мы приведем примеры определения и использования классов,
которые поддерживают дискретные управляемые событиями модели. Распределения
вероятностей, определенные в этой главе, будут активно использоваться во всех примерах
моделей.
Download