stats模型中数据的Poisson分布拟合

2024-06-17 12:55:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用statsmodels将Poisson分布拟合到我的数据中,但是我对得到的结果和如何使用库感到困惑。

我的真实数据将是一系列的数字,我认为我应该能够描述为泊松分布加上一些离群值,所以最终我想做一个稳健的数据拟合。

但是出于测试目的,我只是使用scipy.stats.poisson创建一个数据集

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

所以要用statsmodels来拟合,我想我只需要一个常数‘endog’

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

打印摘要()

                          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解释这个结果,其次,如果我对分布的稳健参数估计感兴趣,而不是拟合趋势,我可能会做一些完全不同的事情,但我应该怎么做呢?

编辑 为了回答我问题的第二部分,我真的应该给出更多的细节。

我有一个事件在一个开始时间之后随机发生。当我绘制许多事件的延迟时间直方图时,我看到分布看起来像是比例泊松分布加上几个异常点,这些异常点通常是由底层系统中的问题引起的。所以我只想找到数据集的预期时间延迟,不包括异常值。如果不是异常值,我可以简单地找到平均时间。我想我可以手动排除它们,但我想我可以找到更严格的东西。

编辑 在进一步的思考中,我将考虑其他分布,而不是坚持泊松分布,我的问题的细节可能会分散对原始问题的注意力,但我还是把它们留在这里了。


Tags: 数据编辑dfmodelstats时间事件res
1条回答
网友
1楼 · 发布于 2024-06-17 12:55:40

Poisson模型与广义线性模型族或其他离散数据中的大多数其他模型一样,假设我们有一个将预测限定在适当范围内的变换。

Poisson适用于非负数,且转换为exp,因此所估计的模型假设观测值的期望值,条件是解释变量是

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

为了得到泊松分布的lambda参数,我们需要使用exp,即

>>> np.exp(1.3938)
4.0301355071650118

默认情况下,predict会这样做,但是您可以使用关键字参数请求线性部分。

顺便说一句:statsmodels有争议的术语 恩多格是y exog是x(包含x) (http://statsmodels.sourceforge.net/devel/endog_exog.html

异常值稳健估计

问题最后一部分的答案是,据我所知,目前Python中没有针对Poisson或其他计数模型的异常稳健估计。

对于过度分散的数据,当方差大于平均值时,我们可以使用负多项式回归。对于Poisson中的异常值,我们必须使用R/Rpy或手动修剪异常值。 离群点识别可以基于标准化残差之一。

它将在一段时间内不能在statsmodels中使用,除非有人对此做出贡献。

相关问题 更多 >