**MuMInパッケージを利用するので、事前にインストールが必要

 

真のモデル:

yは平均μ、σ=sdの正規分布に従い

μ=1.5X1-1.1X2+20

*簡単のため、X1とX2は直交しているものとする。

 

データ:

真のモデルからn個のサンプルをランダムに抽出

 

推定:

線形回帰モデルを作り、n個のサンプルを使ってパラメータを最尤推定する

 

変数選択:

y~X1+X2+Intercept

をフルモデルと見なし、情報量基準が最小のモデルを”ベストモデル”として採用する

 

結果の格納:

ベストモデルにおける各パラメータの最尤推定値を保存する

===========================

以上のプロセスを1万回反復することで、post-model selectionにおける最尤推定値の挙動を確認できる。

通常、最尤推定量が”良い”推定量とみなされるのは

1)漸近正規性

2)普遍性

3)一致性

という三つの性質を備えていることが根拠であるが、モデル選択後の推定量では1や2の性質が容易に失われることが確認出来る。

 

##関数の作成

BIC_sim<-function(n,sd){

library(MuMIn)

options(na.action = "na.fail")

x1<-matrix(0,nrow=10000,ncol=n)

x2<-matrix(0,nrow=10000,ncol=n)

y<-matrix(0,nrow=10000,ncol=n)

for (i in 1:10000){

x1[i,]<-runif(n,0,100)

x2[i,]<-rnorm(n,0,10)

y[i,]<-1.5*x1[i,]-1.1*x2[i,]+20+rnorm(n,mean=0,sd=sd)

 

}

temp_x<-matrix(0,nrow=10000,ncol=3)

for (i in 1:10000){

temp1<-lm(y[i,]~x1[i,]+x2[i,])

temp2<-dredge(temp1,rank="BIC",trace=FALSE) ###引数rankを変更することで、他の情報量基準における挙動も確認できる

temp_x[i,1]<-temp2[1,1]

temp_x[i,2]<-temp2[1,2]

temp_x[i,3]<-temp2[1,3]

 

}

return (temp_x)

}

 

##シミュレーションの実行

a<-(BIC_sim(100,300))

##最尤推定値の確認

summary(a)

hist(a[,2])