Установка распределения Пуассона в данные в статистических моделях

Я пытаюсь сопоставить распределение Пуассона с моими данными с помощью statsmodels, но меня смущают результаты, которые я получаю и как использовать библиотеку.

Мои реальные данные будут представлять собой ряд чисел, которые, как я думаю, я могу описать как имеющие распределение пуассонов плюс некоторые выбросы, поэтому в конечном итоге я хотел бы сделать надежную подгонку к данным.

Однако для целей тестирования я просто создаю набор данных, используя scipy.stats.pisson

samp = scipy.stats.poisson.rvs(4,size=200)

Итак, чтобы соответствовать этому, используя statsmodels, я думаю, что мне просто нужно иметь постоянный "endog"

res = sm.Poisson(samp,np.ones_like(samp)).fit()

print res.summary()

                          Poisson Regression Results
==============================================================================
Dep. Variable:                      y   No. Observations:                  200
Model:                        Poisson   Df Residuals:                      199
Method:                           MLE   Df Model:                            0
Date:                Fri, 27 Jun 2014   Pseudo R-squ.:                   0.000
Time:                        14:28:29   Log-Likelihood:                -404.37
converged:                       True   LL-Null:                       -404.37
                                        LLR p-value:                       nan
==============================================================================
                 coef    std err          z      P>|z|      [95.0% Conf. Int.]
------------------------------------------------------------------------------
const          1.3938      0.035     39.569      0.000         1.325     1.463
==============================================================================

Хорошо, это выглядит неправильно, но если я делаю

res.predict()

Я получаю массив из 4.03 (который был средним для этого тестового образца). Итак, в основном, во-первых, я очень смущен, как интерпретировать этот результат из statsmodel, а во-вторых, я должен, вероятно, делать что-то совершенно другое, если меня интересует надежная оценка параметров дистрибутива, а не подгонка трендов, но как я должен это делать?

Edit Я должен был бы более подробно рассказать, чтобы ответить на вторую часть моего вопроса.

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

Edit При дальнейших размышлениях я буду рассматривать другие дистрибутивы вместо того, чтобы придерживаться Пуассониона, и детали моей проблемы, вероятно, являются отвлечением от исходного вопроса, но я все равно оставил их здесь.

Ответ 1

Модель Пуассона, как и большинство других моделей в обобщенных семействах линейных моделей или для других дискретных данных, предполагает, что мы имеем преобразование, которое ограничивает предсказание в соответствующем диапазоне.

Пуассон работает для неотрицательных чисел, а преобразование exp, поэтому оцениваемая модель предполагает, что ожидаемое значение наблюдения, обусловленное поясняющими переменными,

 E(y | x) = exp(X dot params)

Чтобы получить лямбда-параметр распределения пуассонов, нам нужно использовать exp, т.е.

>>> np.exp(1.3938)
4.0301355071650118

predict делает это по умолчанию, но вы можете запросить только линейную часть (X dot params) с аргументом ключевого слова.

BTW: спорная терминология statsmodels endog - это y exog - это x (в нем есть x) (http://statsmodels.sourceforge.net/devel/endog_exog.html)

Угрожающая оценка Outlier

Ответ на последнюю часть вопроса заключается в том, что в настоящее время нет надежной оценки исходящего трафика в Python для Poisson или других моделей count, насколько мне известно.

Для сверхдисперсных данных, где дисперсия больше среднего значения, мы можем использовать NegativeBinomial Regression. Для выбросов в Пуассоне нам придется использовать R/Rpy или ручную обрезку выбросов. Идентификация выбросов может быть основана на одном из стандартизированных остатков.

Он не будет доступен в statsmodels в течение некоторого времени, если кто-то не внесет это.