R 上 nls 上的 AIC

Posted

技术标签:

【中文标题】R 上 nls 上的 AIC【英文标题】:AIC on nls on R 【发布时间】:2017-02-21 07:20:33 【问题描述】:

我在计算 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

如您所见,结果不同,其他两个模型的结果相同。 有人可以帮助我吗?

问候

【问题讨论】:

你可以改进你的问题。请阅读how to provide minimal reproducible examples in R。然后进行相应的编辑和改进。 【参考方案1】:

您应始终注意使用一致的 AIC 定义。

AIC 使用 2k-2*ln(L) 的通常定义。对数似然计算,例如,stats:::logLik.lm0.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 仅定义为 加法常数。通常使用不同的常数 用于不同的目的......比较时需要特别小心 适合不同的班级 [...]。

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

【讨论】:

以上是关于R 上 nls 上的 AIC的主要内容,如果未能解决你的问题,请参考以下文章

R计算赤信息指标(Akaike information criterion,AIC)

R语言使用赤信息指标AIC函数比较两个回归分析模型的差异从而决定是否删除某些预测变量(Comparing models with the AIC)

R中的AIC:使用加权数据时手动值与内部值的差异

R中的模型选择,所有模型都给出相同的AIC和BIC

R语言时间序列分析-根据aic值选择arima模型

R语言glm拟合logistic回归模型:模型评估(计算模型拟合的统计显著性)模型评估(赤信息AIC指标计算)