2016-10-12 11 views
0

AICを計算する際に問題があります。実際、私は私の3つのモデルのパラメータを推定します:線形モデルである "mod_linear"と2つの非線形モデルである "mod_exp"と "mod_logis"。AIC on nls on R

Iは機能AIC()使用:

AIC(mod_linear,mod_exp,mod_logis) 

      df  AIC 
mod_linear 4 3.015378 
mod_exp  5 -11.010469 
mod_logis 5 54.015746 

をしかし、私はフォーミュラAIC = 2K + nlog Kはパラメータの数である(RSS/n)は、n個とAICを計算しようとしましたサンプルRSSの残余平方和をRSSで計算します。

k=4 
n=21 
#Calcul of nls for the linear model: 
mod_linear=nls(data$P~P_linear(P0,K0,a),data=data, 
start=c(P0=4.2,K0=4.5,a=0.) 

2*k+n*log(sum(residuals(mod_linear)^2)/n) 
-56.58004 

ご覧のとおり、これは他の2つのモデルでも同じ結果です。 誰かが私を助けることができますか?

よろしく

+0

あなたの質問を改善することができます。 [Rで最小限の再現可能な例を提供する方法](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example#answer-5963610)をお読みください。それに応じて編集して改善してください。 – lukeA

答えて

4

あなたはいつもあなたがAICの一貫した定義を使用世話をする必要があります。

AICは、2k-2 * ln(L)の通常の定義を使用します。対数尤度は、例えば、stats:::logLik.lmによって計算され、0.5 * (- N * (log(2 * pi) + 1 - log(N) + log(sum(res^2))))である。

例は:

fit <- lm(Sepal.Length ~ Sepal.Width, data = iris) 
AIC(fit) 
#[1] 371.9917 
logL <- 0.5 * (- length(residuals(fit)) * (log(2 * pi) + 1 - log(length(residuals(fit))) + log(sum(residuals(fit)^2)))) 

2 * (fit$rank + 1) - 2 * logL 
#[1] 371.9917 

しかし、help("AIC")は警告:

対数尤度したがってAIC/BICのみ 添加定数まで定義されています。さまざまな目的のために異なる定数が従来使用されていた ...異なるクラス[...]の を比較するときには特別な注意が必要です。

は、対数尤度がnlsフィットのために計算される方法のためstats:::logLik.nlsを参照してください。