2016-05-04 1 views
0

は、私が持っている:scipyで流通のAICを計算するにはどうすればよいですか?

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

をので、私はそれからAICを計算するか、どのように

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

に適合していますか? AIC = 2*k - 2*ln(L) kが取り付けられたパラメータの数であり、Lは次のようになり

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

logLik最大対数尤度関数は?

私はこのスニペットが見つかりました:ので、私の機能があることを行っているMaximum Likelihood Estimate

から

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

答えて

2

可能性が実際にパラメータが与えられたデータを観察する確率であります。したがって、いくつかのパラメータ値、つまり適合値がある場合、尤度はデータの確率であり、密度は適合値でパラメータ化されます。

あなたのやっていることはほぼ正しいです。ガンマ分布からサンプリングしたので、その分布を使って尤度も計算する必要があります。私。代わりに

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

の、あなたはちょうどそれを得るためにあなたのAICの方程式を使用し

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

を行います。

関連する問題