6.4 Comparing models with AIC and model weights
To get the AIC or AICc values for a model fit from a MARSS fit, use fit$AIC
or fit$AICc
. The log-likelihood is in fit$logLik
and the number of estimated parameters in fit$num.params
. For fits from other functions, try AIC(fit)
or look at the function documentation.
Let’s put the AICc values 3 Nile models together:
<- c(kem.0$AICc, kem.1$AICc, kem.2$AICc, kem.3$AICc) nile.aic
Then we calculate the AICc minus the minus AICc in our model set and compute the model weights. \(\Delta\text{AIC}\) is the AIC values minus the minimum AIC value in your model set.
<- nile.aic - min(nile.aic)
delAIC <- exp(-0.5 * delAIC)
relLik <- relLik/sum(relLik) aicweight
And this leads to our model weights table:
<- data.frame(AICc = nile.aic, delAIC = delAIC, relLik = relLik,
aic.table weight = aicweight)
rownames(aic.table) <- c("flat level", "linear trend", "stoc level",
"stoc level w drift")
Here the table is printed using round()
to limit the number of digits shown.
round(aic.table, digits = 3)
AICc delAIC relLik weight
flat level 1313.155 31.379 0.000 0.000
linear trend 1290.882 9.106 0.011 0.007
stoc level 1281.776 0.000 1.000 0.647
stoc level w drift 1283.026 1.250 0.535 0.346
One thing to keep in mind when comparing models within a set of models is that the model set needs to include at least one model that can fit the data reasonably well. Reasonably well' means the model can put a fitted line through the data. Can't all models do that? Definitely, not. For example, the flat-level model cannot put a fitted line through the Nile River data. It is simply impossible. The straight trend model also cannot put a fitted line through the flow data. So if our model set only included flat-level and straight trend, then we might have said that the straight trend model is
best’ even though it is just the better of two bad models.