Em uma pergunta em outro lugar neste site, várias respostas mencionaram que o AIC é equivalente à validação cruzada de não uso único (LOO) e que o BIC é equivalente à validação cruzada de dobras em K Existe uma maneira de demonstrar isso empiricamente em R, de modo que as técnicas envolvidas na LOO e na dobra K sejam esclarecidas e demonstradas como equivalentes aos valores da AIC e da BIC? Um código bem comentado seria útil nesse sentido. Além disso, na demonstração do BIC, use o pacote lme4. Veja abaixo um exemplo de conjunto de dados ...
library(lme4) #for the BIC function
generate.data <- function(seed)
{
set.seed(seed) #Set a seed so the results are consistent (I hope)
a <- rnorm(60) #predictor
b <- rnorm(60) #predictor
c <- rnorm(60) #predictor
y <- rnorm(60)*3.5+a+b #the outcome is really a function of predictor a and b but not predictor c
data <- data.frame(y,a,b,c)
return(data)
}
data <- generate.data(76)
good.model <- lm(y ~ a+b,data=data)
bad.model <- lm(y ~ a+b+c,data=data)
AIC(good.model)
BIC(logLik(good.model))
AIC(bad.model)
BIC(logLik(bad.model))
Pelos comentários anteriores, abaixo, forneci uma lista de sementes de 1 a 10000, nas quais a AIC e a BIC discordam. Isso foi feito por uma pesquisa simples nas sementes disponíveis, mas se alguém pudesse fornecer uma maneira de gerar dados que tenderiam a produzir respostas divergentes a partir desses dois critérios de informação, isso seria particularmente informativo.
notable.seeds <- read.csv("http://student.ucr.edu/~rpier001/res.csv")$seed
Como um aparte, pensei em encomendar essas sementes na medida em que a AIC e a BIC discordam, que tentei quantificar como a soma das diferenças absolutas da AIC e da BIC. Por exemplo,
AICDiff <- AIC(bad.model) - AIC(good.model)
BICDiff <- BIC(logLik(bad.model)) - BIC(logLik(good.model))
disagreement <- sum(abs(c(AICDiff,BICDiff)))
onde minha métrica de desacordo se aplica apenas razoavelmente quando as observações são notáveis. Por exemplo,
are.diff <- sum(sign(c(AICDiff,BICDiff)))
notable <- ifelse(are.diff == 0 & AICDiff != 0,TRUE,FALSE)
No entanto, nos casos em que a AIC e a BIC discordaram, o valor calculado da discordância sempre foi o mesmo (e é uma função do tamanho da amostra). Olhando para trás, como o AIC e o BIC são calculados, posso ver por que isso pode ser o caso computacionalmente, mas não sei por que seria o caso conceitualmente. Se alguém puder esclarecer esse problema também, eu agradeceria.