En una pregunta en otra parte de este sitio, varias respuestas mencionaron que el AIC es equivalente a la validación cruzada de dejar uno fuera (LOO) y que el BIC es equivalente a la validación cruzada K-fold. ¿Hay alguna manera de demostrar esto empíricamente en R de modo que las técnicas involucradas en LOO y K-fold se aclaren y demuestren que son equivalentes a los valores AIC y BIC? Un código bien comentado sería útil a este respecto. Además, para demostrar el BIC, utilice el paquete lme4. Vea a continuación un conjunto de datos de muestra ...
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))
Según comentarios anteriores, a continuación proporcioné una lista de semillas del 1 al 10000 en la que AIC y BIC no están de acuerdo. Esto se realizó mediante una simple búsqueda a través de las semillas disponibles, pero si alguien pudiera proporcionar una forma de generar datos que tendieran a producir respuestas divergentes a partir de estos dos criterios de información, podría ser particularmente informativo.
notable.seeds <- read.csv("http://student.ucr.edu/~rpier001/res.csv")$seed
Por otro lado, pensé en ordenar estas semillas por el grado en que AIC y BIC no están de acuerdo, lo que he intentado cuantificar como la suma de las diferencias absolutas de 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 métrica de desacuerdo solo se aplica razonablemente 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 los casos en que AIC y BIC no estaban de acuerdo, el valor de desacuerdo calculado siempre fue el mismo (y es una función del tamaño de la muestra). Mirando hacia atrás a cómo se calculan AIC y BIC, puedo ver por qué este podría ser el caso computacionalmente, pero no estoy seguro de por qué sería el caso conceptualmente. Si alguien pudiera aclarar ese problema también, lo agradecería.
fuente
Respuestas:
En un intento de responder parcialmente a mi propia pregunta, leí la descripción de Wikipedia de la validación cruzada de dejar uno afuera
En el código R, sospecho que eso significaría algo como esto ...
... se supone que produce valores en residuos que están relacionados con el AIC. En la práctica, la suma de los residuos cuadrados de cada iteración del bucle LOO detallado anteriormente es un buen predictor de la AIC para las semillas notables, r ^ 2 = .9776. Pero, en otra parte , un colaborador sugirió que LOO debería ser asintóticamente equivalente al AIC (al menos para los modelos lineales), por lo que estoy un poco decepcionado de que r ^ 2 no esté más cerca de 1. Obviamente, esto no es realmente una respuesta: más bien como código adicional para tratar de alentar a alguien a que intente proporcionar una mejor respuesta.
Anexo: Dado que AIC y BIC para modelos de tamaño de muestra fijo solo varían de forma constante, la correlación de BIC con los residuos cuadrados es la misma que la correlación de AIC con los residuos cuadrados, por lo que el enfoque que tomé anteriormente parece ser inútil.
fuente