我有一个计算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
正如您所看到的,结果并不相同,而其他两个模型也是如此。 有人可以帮帮我吗?
此致
答案 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
拟合的对数似然。