Як можна емпірично продемонструвати в R, яким методам перехресної перевірки AIC та BIC є рівнозначними?


26

У запитанні в іншому місці на цьому веб-сайті кілька відповідей згадували, що АПК еквівалентна перехресній валідації "відхід" (LOO) і що BIC еквівалентна перехресній валідації K-кратного. Чи є спосіб емпірично продемонструвати це в R таким чином, щоб методи, які беруть участь у LOO та K-кратному рівні, були зрозумілі та продемонстровані як еквівалентні значенням AIC та BIC? Добре коментований код був би корисний у цьому плані. Крім того, демонструючи BIC, будь ласка, використовуйте пакет lme4. Нижче див. Зразок набору даних ...

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))

Згідно з попередніми коментарями, нижче я надав перелік насіння від 1 до 10000, в якому AIC та BIC не згодні. Це було зроблено шляхом простого пошуку через доступні насіння, але якщо хтось міг би запропонувати спосіб генерувати дані, які, як правило, дають різні відповіді з цих двох інформаційних критеріїв, це може бути особливо інформативно.

notable.seeds <- read.csv("http://student.ucr.edu/~rpier001/res.csv")$seed

Як осторонь я подумав про впорядкування цих насінин у тій мірі, в якій AIC та BIC не згодні, що я намагався кількісно оцінити як суму абсолютних різниць AIC та BIC. Наприклад,

AICDiff <- AIC(bad.model) - AIC(good.model) 
BICDiff <- BIC(logLik(bad.model)) - BIC(logLik(good.model))
disagreement <- sum(abs(c(AICDiff,BICDiff)))

де моя метрика розбіжності застосовується лише тоді, коли спостереження помітні. Наприклад,

are.diff <- sum(sign(c(AICDiff,BICDiff)))
notable <- ifelse(are.diff == 0 & AICDiff != 0,TRUE,FALSE)

Однак у випадках, коли AIC та BIC не погоджувались, обчислена величина розбіжності завжди була однаковою (і є функцією розміру вибірки). Озираючись на те, як розраховуються AIC та BIC, я бачу, чому це може бути обчислено, але я не впевнений, чому це було б так концептуально. Якби хтось міг також з’ясувати це питання, я би вдячний.


+1 Код було б просто написати, але мені дуже цікаво бачити чіткий, ілюстративний набір даних.

Я не впевнений, що потрібно для чіткого та наочного набору даних, але я спробував включити вибірковий набір даних.
russellpierce

Отже, подивіться: те, що ви надали, є прикладом марного набору, оскільки BIC і AIC дають однакові результати: 340 v. 342 для AIC і 349 v. 353 для BIC - настільки good.model виграє в обох випадках. Вся ідея цієї конвергенції полягає в тому, що певна перехресна перевірка вибере ту саму модель, що і її відповідна ІС.

Я зробив просте сканування і, наприклад, для насіння 76, ІС не погоджуються.

1
Ого, боюсь, це ще важче зробити, боюся; мій загальний пункт у всій дискусії полягає в тому, що конвергенція цих теорем є занадто слабкою, щоб різниця могла виникнути від випадкових коливань. (І що це не працює для машинного навчання, але я сподіваюся, що це очевидно.)

Відповіді:


5

Намагаючись частково відповісти на моє власне запитання, я прочитав опис Вікіпедії, що відповідає перехресній валідації

передбачає використання одного спостереження з вихідної вибірки як даних валідації, а решта спостережень як навчальних даних. Це повторюється так, що кожне спостереження у вибірці використовується один раз як дані валідації.

У R-коді я підозрюю, що це означатиме щось подібне ...

resid <- rep(NA, Nobs) 
for (lcv in 1:Nobs)
    {
        data.loo <- data[-lcv,] #drop the data point that will be used for validation
        loo.model <- lm(y ~ a+b,data=data.loo) #construct a model without that data point
            resid[lcv] <- data[lcv,"y"] - (coef(loo.model)[1] + coef(loo.model)[2]*data[lcv,"a"]+coef(loo.model)[3]*data[lcv,"b"]) #compare the observed value to the value predicted by the loo model for each possible observation, and store that value
    }

... повинно давати значення залишків, які пов'язані з АПК. На практиці сума квадратичних залишків від кожної ітерації циклу LOO, детально описана вище, є хорошим прогнозним показником AIC для notable.seeds, r ^ 2 = .9776. Але в іншому випадку вкладач припустив, що LOO має бути асимптотично еквівалентним AIC (принаймні, для лінійних моделей), тому я трохи розчарований, що r ^ 2 не ближче до 1. Очевидно, це насправді не відповідь - більше схожий на додатковий код, щоб спробувати заохотити когось спробувати дати кращу відповідь.

Додаток: Оскільки AIC та BIC для моделей фіксованого розміру вибірки змінюються лише на постійну величину, співвідношення BIC до залишків у квадраті є таким же, як співвідношення AIC до залишків у квадраті, тому підхід, який я застосував вище, виявляється безрезультатним.


зауважте, що це буде вашою прийнятою відповіддю для виграшу (у випадку, якщо ви не вибрали відповідь, щедро автоматично виберіть відповідь з найбільшою кількістю балів)
Робін Жирард

1
добре - присудження винагороди собі здається дурним - але ніхто більше не відповів.
russellpierce
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.