如何获得指数分布和伽马分布的对数似然
我有一些数据,可以用代码来拟合一个伽马分布,比如说我从这个网站上找到的关于用(python)Scipy拟合伽马分布的代码。
import scipy.stats as ss
import scipy as sp
生成一些伽马分布的数据:
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]
在这里,我们把数据拟合到伽马分布上:
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)
我也可以把同样的数据拟合到指数分布上。不过,我想做一个似然比检验。为了做到这一点,我不仅需要拟合这些分布,还需要返回似然值。那在python中该怎么做呢?
1 个回答
5
你可以通过调用 stats.gamma
的 logpdf
方法来计算 data
的对数似然值,然后把结果加起来。
下面这段代码是你例子中的一部分:
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