W pytaniu w innym miejscu na tej stronie, w kilku odpowiedziach wspomniano, że AIC jest równoważny walidacji krzyżowej z pominięciem jednego (LOO) i że BIC jest równoważny krzyżowej walidacji K-krotnie. Czy istnieje sposób empirycznego zademonstrowania tego w R, aby techniki zastosowane w LOO i K-fold zostały wyjaśnione i wykazano, że są równoważne wartościom AIC i BIC? Dobrze skomentowany kod byłby pomocny w tym względzie. Ponadto, demonstrując BIC, skorzystaj z pakietu lme4. Poniżej znajduje się przykładowy zestaw danych ...
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))
We wcześniejszych komentarzach poniżej przedstawiłem listę nasion od 1 do 10000, w których AIC i BIC się nie zgadzają. Dokonano tego poprzez proste przeszukanie dostępnych nasion, ale jeśli ktoś mógłby zapewnić sposób generowania danych, który miałby tendencję do uzyskiwania rozbieżnych odpowiedzi na podstawie tych dwóch kryteriów informacyjnych, może to być szczególnie pouczające.
notable.seeds <- read.csv("http://student.ucr.edu/~rpier001/res.csv")$seed
Nawiasem mówiąc, zastanawiałem się nad zamówieniem tych nasion na podstawie tego, w jakim stopniu AIC i BIC się nie zgadzają, co próbowałem określić jako sumę absolutnych różnic AIC i BIC. Na przykład,
AICDiff <- AIC(bad.model) - AIC(good.model)
BICDiff <- BIC(logLik(bad.model)) - BIC(logLik(good.model))
disagreement <- sum(abs(c(AICDiff,BICDiff)))
gdzie moje nieporozumienie ma sens tylko wtedy, gdy obserwacje są godne uwagi. Na przykład,
are.diff <- sum(sign(c(AICDiff,BICDiff)))
notable <- ifelse(are.diff == 0 & AICDiff != 0,TRUE,FALSE)
Jednak w przypadkach, w których AIC i BIC nie zgadzały się, obliczona wartość niezgodności była zawsze taka sama (i jest funkcją wielkości próbki). Patrząc wstecz na sposób obliczania AIC i BIC, widzę, dlaczego tak jest w przypadku obliczeń, ale nie jestem pewien, dlaczego tak jest w przypadku koncepcji. Jeśli ktoś mógłby to wyjaśnić, doceniłbym to.