AIC on Nls on R

时间:2016-10-12 13:09:40

标签: r nls model-comparison

我有一个计算AIC的问题。实际上,我估计了我的3个模型的参数:“mod_linear”,它是线性模型,“mod_exp”和“mod_logis”是两个非线性模型。

我使用了函数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(RSS / n)计算AIC,其中K是参数个数,n是样本数,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

正如您所看到的,结果并不相同,而其他两个模型也是如此。 有人可以帮帮我吗?

此致

1 个答案:

答案 0 :(得分:5)

您应该始终注意使用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仅定义为a   加性常数。通常使用不同的常数   出于不同的目的......比较时需要特别小心   适合不同的班级[...]。

请参阅stats:::logLik.nls了解如何计算nls拟合的对数似然。