python - 如何获得指数和 Gamma 分布的对数似然

标签 python statistics scipy statsmodels

我有一些数据,我可以使用例如取自 Fitting a gamma distribution with (python) Scipy 的这段代码来拟合 Gamma 分布.

import scipy.stats as ss
import scipy as sp

生成一些 Gamma 数据:

alpha=5
loc=100.5
beta=22
data=ss.gamma.rvs(alpha,loc=loc,scale=beta,size=10000)    
print(data)
# [ 202.36035683  297.23906376  249.53831795 ...,  271.85204096  180.75026301
#   364.60240242]

这里我们将数据拟合成 Gamma 分布:

fit_alpha,fit_loc,fit_beta=ss.gamma.fit(data)
print(fit_alpha,fit_loc,fit_beta)
# (5.0833692504230008, 100.08697963283467, 21.739518937816108)

print(alpha,loc,beta)
# (5, 100.5, 22)

我还可以对同一数据拟合指数分布。但是我想做一个 likelihood ratio test .为此,我不仅需要拟合分布,还需要返回可能性。你怎么能在 python 中做到这一点?

最佳答案

您可以通过调用stats.gammalogpdf 方法然后对数组求和来计算数据 的对数似然。

第一段代码来自您的示例:

In [63]: import scipy.stats as ss

In [64]: np.random.seed(123)

In [65]: alpha = 5

In [66]: loc = 100.5

In [67]: beta = 22

In [68]: data = ss.gamma.rvs(alpha, loc=loc, scale=beta, size=10000)

In [70]: data
Out[70]: 
array([ 159.73200869,  258.23458137,  178.0504184 , ...,  281.91672824,
        164.77152977,  145.83445141])

In [71]: fit_alpha, fit_loc, fit_beta = ss.gamma.fit(data)

In [72]: fit_alpha, fit_loc, fit_beta
Out[72]: (4.9953385276512883, 101.24295938462399, 21.992307537192605)

计算对数似然的方法如下:

In [73]: loglh = ss.gamma.logpdf(data, fit_alpha, fit_loc, fit_beta).sum()

In [74]: loglh
Out[74]: -52437.410641032831

关于python - 如何获得指数和 Gamma 分布的对数似然,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25585590/

相关文章:

python - API测试: Postman vs Python Requests

python - 在 scipy.optimize.root 中计算 Jacobian 的默认选项

algorithm - 计算数字集的均匀性或差异性的快速方法

r - 在R中实现my函数时出现错误

scipy - 如何在没有超时的情况下在Travis CI上安装某些软件?

python - scipy::crs_matrix 的棋盘子矩阵

python - 抓取两个页面时忽略请求

python - 如何用函数记录一个文件?

python - 我怎样才能杀死一个 cron 程序?

r - 根据分位数信息确定正态分布