- いくつかのベータ分布を重み付きで合わせたときの期待値と分散が知りたいとする
- 単一のベータ分布の期待値は
- 単一のベータ分布の分散は
- であるが、なので
- ここにを使えば
- とわかるから
- 任意の値の周りの2次モーメントは
my.beta.2moment <- function(a,b,z){
a*(a+1)/(a+b)/(a+b+1)-2*z*a/(a+b)+z^2
}
my.dirichlet.mean <- function(as){
as/sum(as)
}
my.dirichlet.var <- function(as){
sum.as <- sum(as)
as * (sum.as-as)/(sum.as^2 * (sum.as+1))
}
my.dirichlet.2moment <- function(as,t){
m <- my.dirichlet.mean(as)
my.dirichlet.var(as)+m^2-2*m*t+t^2
}
as <- sample(1:10,5)
bs <- sample(1:10,5)
library(MCMCpack)
rr <- rdirichlet(1,rep(1,length(as)))
N <- 100000
B <- sample(1:length(as),N,replace=TRUE,prob=rr)
X <- rep(0,N)
for(i in 1:N){
X[i] <- rbeta(1,as[B[i]],bs[B[i]])
}
mean(X)
var(X)
EE <- VV <- 0
for(i in 1:length(as)){
EE <- EE + rr[i] * (as[i])/(as[i]+bs[i])
}
for(i in 1:length(as)){
VV <- VV + rr[i] * my.beta.2moment(as[i],bs[i],EE)
}
EE
VV