AIC와 BIC가 어떤 교차 검증 방법과 동등한 지 R에서 어떻게 경험적으로 증명할 수 있습니까?


26

이 사이트의 다른 곳에서 한 질문 에 따르면, AIC는 LOO (Leave-One-Out) 교차 검증과 동일하고 BIC는 K- 폴드 교차 검증과 동일합니다. LOO 및 K-fold에 관련된 기술이 명확하고 AIC 및 BIC 값과 동등한 것으로 입증되도록 R에서 이것을 경험적으로 입증하는 방법이 있습니까? 주석이 달린 코드는 이와 관련하여 도움이 될 것입니다. 또한 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))

앞서 언급 한 바와 같이, 아래에서 나는 AIC와 BIC가 동의하지 않는 1에서 10000까지의 씨앗 목록을 제공했다. 이것은 이용 가능한 시드를 통한 간단한 검색으로 이루어졌지만, 누군가가이 두 정보 기준으로부터 다른 답변을 생성하는 경향이있는 데이터를 생성하는 방법을 제공 할 수 있다면 특히 유익 할 수 있습니다.

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-그래서 좋은 모델은 두 경우 모두에서 승리합니다. 이 수렴에 대한 전체 아이디어는 특정 교차 검증이 해당 IC와 동일한 모델을 선택한다는 것입니다.

나는 간단한 스캐닝을 해왔고, 예를 들어 시드 76 IC에 대해 동의하지 않는다.

1
와우, 이것은 내가 두려워하는 것을 얻기가 더 어려울 것입니다. 전체 토론에서 나의 일반적인 요점은 이러한 정리의 수렴이 너무 약하여 임의의 변동에서 차이가 발생할 수 있다는 것입니다. (그리고 머신 러닝에서는 작동하지 않지만, 이것이 분명하기를 바랍니다.)

답변:


5

내 자신의 질문에 부분적으로 답하기 위해 Wikipedia의 일대일 교차 검증에 대한 설명을 읽었습니다.

원본 데이터의 단일 관측 값을 유효성 검사 데이터로 사용하고 나머지 관측 값을 훈련 데이터로 사용합니다. 이는 샘플의 각 관측치가 검증 데이터로 한 번 사용되도록 반복됩니다.

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
    }

... AIC와 관련된 잔 유값을 산출해야합니다. 실제로 위에서 설명한 LOO 루프의 각 반복에서 제곱 된 잔차의 합은 주목할만한 씨앗에 대한 AIC의 좋은 예측 변수입니다 (r ^ 2 = .9776). 그러나 다른 곳 에서 기고자는 LOO가 AIC와 적어도 동일해야한다고 제안했습니다 (적어도 선형 모델의 경우). r ^ 2가 1에 가깝지 않다는 것이 조금 실망 스럽습니다. 다른 사람이 더 나은 답변을 제공하도록 권장하는 추가 코드와 비슷합니다.

부록 : 고정 표본 크기의 모델에 대한 AIC와 BIC는 상수에 의해서만 변하기 때문에, BIC와 제곱 잔차의 상관 관계는 AIC와 제곱 잔차의 상관 관계와 동일하므로 위에서 취한 접근법은 결실이없는 것으로 보입니다.


이것은 현상금에 대한 귀하의 대답으로 받아 들여질 것입니다. (당신이 현상금을 가장 많이 가진 답변을 선택하지 않은 경우)
robin girard

1
글쎄-현상금을 나에게 수여하는 것은 어리석은 것처럼 보이지만 아무도 대답을 제출하지 않았습니다.
russellpierce
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.