En una pregunta en otra parte de este sitio, varias respuestas, mencionó que el AIC es equivalente a dejar-uno-fuera (LOO) validación cruzada y que el BIC es equivalente a K-fold cross validation. Es allí una manera de demostrar empíricamente esta en R tal que las técnicas involucradas en LOO y K-fold está claro y demostrado ser equivalente a la AIC y BIC valores? Bien comentado código sería útil en este sentido. Además, en la demostración de la BIC por favor, utilice el paquete lme4. Véase a continuación un ejemplo de un conjunto de datos...
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))
Por los comentarios anteriores, a continuación tienes una lista de las semillas de 1 a 10000 en el que AIC y BIC en desacuerdo. Esto fue hecho por una simple búsqueda a través de las semillas disponibles, pero si alguien podría proporcionar una manera para generar datos que tienden a producir respuestas divergentes a partir de estos dos criterios de información puede ser particularmente informativo.
notable.seeds <- read.csv("http://student.ucr.edu/~rpier001/res.csv")$seed
Como un aparte, pensé sobre el pedido de estas semillas en la medida en que el AIC y BIC en desacuerdo que he tratado de cuantificar como la suma de las diferencias absolutas de la AIC y BIC. Por ejemplo,
AICDiff <- AIC(bad.model) - AIC(good.model)
BICDiff <- BIC(logLik(bad.model)) - BIC(logLik(good.model))
disagreement <- sum(abs(c(AICDiff,BICDiff)))
donde mi desacuerdo métrica razonablemente se aplica cuando las observaciones son notables. Por ejemplo,
are.diff <- sum(sign(c(AICDiff,BICDiff)))
notable <- ifelse(are.diff == 0 & AICDiff != 0,TRUE,FALSE)
Sin embargo, en casos donde la AIC y BIC de acuerdo, con el calculado desacuerdo valor fue siempre el mismo (y es una función del tamaño de la muestra). Mirando hacia atrás en cómo AIC y BIC se calculan puedo ver por qué esto podría ser el caso computacionalmente, pero no estoy seguro de por qué sería el caso conceptualmente. Si alguien pudiera aclarar esa cuestión, se lo agradecería.