【问题标题】:How do I calculate the AIC for a distribution in scipy?如何计算 scipy 中分布的 AIC?
【发布时间】:2016-05-05 17:42:51
【问题描述】:

我有:

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 会是?

我找到了这个 sn-p:

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

【问题讨论】:

    标签: python scipy statistics


    【解决方案1】:

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

    因此,您所做的几乎是正确的。由于您是从 gamma 分布中采样的,因此您还应该使用该分布计算似然度。 IE。而不是

    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 方程来得到它。

    【讨论】:

    • 猜猜传递给logpdf函数的参数可以简化为stats.gamma.logpdf(data, *fitted_pa​​rams)
    • 正如@KevinZhu 所说,请参阅this 答案以获取更新的日志可能性
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-09
    • 2019-10-09
    • 1970-01-01
    • 2021-09-12
    • 2019-04-11
    • 2017-12-15
    • 1970-01-01
    相关资源
    最近更新 更多