이 사이트의 다른 곳에서 한 질문 에 따르면, 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가 계산되는 방식을 되돌아 보면 이것이 계산 상 왜 그런지 알 수 있지만 개념적으로 왜 그런지 잘 모르겠습니다. 누군가 그 문제를 설명 할 수 있다면 고맙겠습니다.