我有:

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) )


来自Maximum Likelihood Estimate

所以我的功能将是:

# 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方程即可获得该结果。

关于python - 如何计算scipy中的分布的AIC?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37023916/

10-15 20:17