2016-05-04 3 views
0

у меня есть:Как вычислить AIC для распределения в scipy?

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) где к количеству параметров установлены и 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)) 

ответ

2

Вероятность действительно вероятность наблюдения данные приведены параметры , Следовательно, если у вас есть некоторые значения параметров, т. Е. Ваши установленные значения, то вероятность - это вероятность данных, где плотность параметризуется с установленными значениями.

Следовательно, то, что вы делаете, почти правильно. Поскольку вы выбрали гамма-распределение, вы также должны рассчитать вероятность использования этого распределения. То есть вместо

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, чтобы получить это.

Смежные вопросы