西先生 | これから40年どんな手段で世の中を良くするのか?技術や考え方をビジョン化し、具体的に説明しなさい |
山田先生 | 講義内での課題を、A4一枚ぐらいまで膨らませて |
水戸先生 | ここにおいてある標示資料の一番最後のページ |
由良先生 | 今日の配付資料のとおり |
山本 | コインの表が出る確率は1/2としても、画鋲の針が上になる確率はいくらか、画鋲を30回、投げてみよう (配布資料の最後のページと下のコード) |
提出期限 | 2011年6月30日(木) 0500pmまで |
提出場所 | 西五号館3階 総合情報学専攻事務室 |
宜しくお願いします。
これはRを用いて計算が可能である。
X.raw <- c(1,0,1,0,0,1,1,1,0,1,0,1,1,0,1,0,0,0,1,1,0,0,1,1,1,0,0,1,0,0,1,0)
n <- length(X.raw) p.hat <- sum(X.raw)/n var.p.hat <- p.hat*(1-p.hat)/n cat("\n", "Point Estimate of p:", p.hat, "\n", "Sample Variance Estimate of p:", var.p.hat, "\n", '95% Confidence Interval:', p.hat-pnorm(1-0.25)*sqrt(var.p.hat), "<=p<=", p.hat-pnorm(0.25)*sqrt(var.p.hat), "\n", "\n")
ベイズ法に関する計算、特に事後分布の算出は、WinBUGSというソフトウェアを用いるのが簡単である。
DATA list(n=32, x=c(1,0,1,0,0,1,1,1,0,1,0,1,1,0,1,0,0,0,1,1,0,0,1,1,1,0,0,1,0,0,1,0))
モデルと事前分布と初期値の指定。
MODEL model{ for ( i in 1:n ) { x[i] ~ dbin(p,1) } p ~ dbeta(2,3) # objective prior # p ~ dbeta(1,1) # flat prior } INIT list {p=0.5}
ここでベータ分布はパラメータを変えると、次のように動く。
ここから先の手順は、多少複雑でこの手引きに頼るとよい。手順だけ記すと、次の通り。
と表示される)
- データを読み込ませる (上で書いたコードのうち、データの記述に相当するlistをマウスで指定してから、〔Specification Tool〕→〔load data〕、成功すると ``data loaded
))
- 初期値を指定する場合、読み込む (〔Specification Tool〕→〔load inits〕、マルコフ連鎖の本数だけ実行する必要あり、不足分があると ``this chain contains uninitialized variables.
)点推定は、モーメント法・最尤法と同じ。データの与え方も同じ。下記のコードで、ブートストラップによる分散の推定と、信頼区間の構成まで行える。
n <- length(X.raw) B <- 100000 p.boot <- NULL for( b in c(1:B) ) { X.boot <- sample(X.raw,size=n, replace=TRUE) p.boot <- append(p.boot, sum(X.boot)/n) } hist(p.boot) quantile(p.boot, probs=c(0.025, 0.975)) cat("\n", "Point Estimate of p:", p.hat, "\n", "Bootstrap Variance Estimate of p:", var(p.boot), "\n", '95% Bootstrap Confidence Interval:', quantile(p.boot, probs=0.025), "<=p<=", quantile(p.boot, probs=0.975), "\n", "\n")
これは点推定の方法は正しくても、分布の仮定がそれほど正しくないかもしれない時に、一番最初の信頼区間とは異なった範囲を示す。
ただし、ブートスラップ反復回数 B の設定には要注意。
# Beta(1,1) plot(c(1:99)/100,dbeta(c(1:99)/100,1,1), xlab="p", ylab="prior probability", type="l", lty=1, xlim=c(0,1), ylim=c(0,4.5)) # Beta(3,2) lines(c(1:99)/100,dbeta(c(1:99)/100,3,2), xlab="p", ylab="prior probability", type="l", lty=2) # Beta(2,3) lines(c(1:99)/100,dbeta(c(1:99)/100,2,3), xlab="p", ylab="prior probability", type="l", lty=3) # Beta(10,5) lines(c(1:99)/100,dbeta(c(1:99)/100,10,5), xlab="p", ylab="prior probability", type="l", lty=4) # Beta(5,10) lines(c(1:99)/100,dbeta(c(1:99)/100,5,10), xlab="p", ylab="prior probability", type="l", lty=5) # Beta(15,5) lines(c(1:99)/100,dbeta(c(1:99)/100,15,5), xlab="p", ylab="prior probability", type="l", lty=6) # Beta(5,15) lines(c(1:99)/100,dbeta(c(1:99)/100,5,15), xlab="p", ylab="prior probability", type="l", lty=7)