AIC的两种计算方法的问题

机器算法验证 aic
2022-04-04 12:47:54

我发现有两种计算AIC的方法:

AIC = -2ln(可能性)+ 2K 和
AIC = n*ln(RSS/n)+2K

我有:

crf <- c(0.3333333, 0.5000000, 0.6666667, 0.6666667, 0.6666667, 0.8333333, 0.1666667, 0.3333333, 0.5000000, 0.5000000, 0.8333333, 0.5000000,0.6666667, 0.5000000, 0.6666667, 1.0000000)

co3 <- c(218.20, 243.84, 267.97, 286.31, 315.01, 315.01, 241.09, 242.52, 243.84, 245.04, 246.10, 284.15, 285.79, 287.31, 288.67, 289.49)

n <- length(crf)
model <- lm(crf ~ co3) #y=ax+b
aic1 <- AIC(model, k=2)
RSS <- sum(resid(model)^2)
aic2 <- n*log(RSS/n) + 2*3

我有aic1=-7.220462aic2= -52.62649

但如果我这样做:

aic3 <- n + n*log(2*pi) + n*log(RSS/n) + 2*3

我有aic3=-7.22046我不明白为什么,到处都写着 AIC = n*ln(RSS/n)+2K,这个术语 n + n*log(2*pi) 是什么?

1个回答

您的第一种方法是正确和一般的定义。第二种和第三种方式假设高斯似然。

第二种方法忽略了常数,因此两者不等价。可以忽略常数,因为它只是改变所有模型的 AIC,因此对模型的相对排序没有影响。因此,一些教科书和许多软件使用第二个公式。但是您不能因此从两个公式中比较 AIC。

一般来说,不要比较来自不同软件包的 AIC 值,因为它们经常用常数做不同的事情。一些包(例如,Eviews)也会做一些额外的缩放。