で質問他の場所でこのサイトには、いくつかの答えは、AICは(LOO)クロスバリデーションを-1を残し、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))
以前のコメントごとに、以下に、AICとBICが同意しない1〜10000のシードのリストを示しました。これは、利用可能なシードを介した簡単な検索によって行われましたが、これらの2つの情報基準から異なる答えを生成する傾向があるデータを生成する方法を誰かが提供できれば、特に有益です。
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がどのように計算されるかを振り返ると、なぜ計算上そうなるのかがわかりますが、なぜ概念的にそうなるのかはわかりません。誰かが同様にその問題を解明できれば、私はそれを感謝します。