如何计算scipy中分布的AIC



我有:

from scipy import stats
data = stats.gamma.rvs(2, loc=1.5, scale=2, size=100000)

所以我试了一下

fitted_params = scipy.stats.gamma.fit(data)

如何从中计算AIC?AIC = 2*k - 2*ln(L),其中k是拟合的参数数量,L是最大对数似然函数

k = len(fitted_params)
aic = 2*k - 2*(logLik)

logLik会是?

我发现了这个片段:

logLik = -np.sum( stats.norm.logpdf(data, loc=yPred, scale=sd) ) 

来自最大似然估计

我的函数是:

# calc SD of fitted distribution
sd = std(loc=fitted_params[1], scale=fitted_params[2])
# sample values from fitted dist same length as original data array
yPred = rvs(fitted_params[0], loc=fitted_params[1], scale=fitted_params[2], size=len(data), random_state=None)
# calc the log likelihood 
logLik = -np.sum( stats.gamma.logpdf(data, loc=yPred, scale=sd) ) 

可能性实际上是在给定参数的情况下观察数据的概率。因此,如果你有一些参数值,即你的拟合值,那么可能性就是数据的概率,其中密度是用拟合值参数化的。

因此,你所做的几乎是正确的。由于您是从伽玛分布中采样的,因此还应该使用该分布来计算可能性。即代替

logLik = -np.sum( stats.norm.logpdf(data, loc=yPred, scale=sd) ) 

进行

logLik = np.sum( stats.gamma.logpdf(data, fitted_params[0], loc=fitted_params[1], scale=fitted_params[2]) ) 

然后你只需要使用你的AIC方程就可以得到。

最新更新