Q1.
Given X ~ Bin(N,p), N=100, p=0.37.
Generate ten random number of X using R, given
X1=36,X2=41,X3=47,X4=40,X5=43,X6=39,X7=47,X8=38,X9=40,X10=41.
Maximum Likelihood Method gives ποΏ½=0.412, CI=[ 0.3155298, 0.5084702].
Using Bayesian approach, taking prior as Beta(1,1) which uniformly distributed on [0,1], it gives
ποΏ½= 0.4121756,CI=[ 0.38173 0.44272].
Bias for MLE method is ποΏ½ β π = 0.412 β 0.37 = 0.042 which is slightly smaller than Bias for
Bayesian method ποΏ½ β π = 0.0421756.
MSE=β(ποΏ½ β π)^2, MSE calculated by MLE method is 0.0292, and it is significantly larger than
MLE calculated bayesianly which equals to 0.001778785.
For CI, the one calculated by MLE method has a larger range.
The R code I used is as below.
N=10
n=100
p=0.37
X=rbinom(N,n,p)
*********************************
mse=0
for(i in 1:N){
X[i]=rbinom(1,n,p)
phat[i]=X[i]/n
mse=mse+(phat[i]-p)^2
}
phat=sum(phat)/N
se=sqrt(abs(phat*(1-phat)/n))
phat;mse;phat-1.96*se;phat+1.96*se
*********************************
alpha=1;beta=1
x=seq(0.00001,0.99999,0.00001)
p.beta=dbeta(x,alpha,beta)
pv=seq(0.00001,0.99999,0.00001)
xv=sum(X);nv=n*N
logf1=(xv+alpha-1)*log(pv)+(beta+nv-xv-1)*log(1-pv)
f2=exp(logf1-max(logf1))
intf2=sum(f2)*(pv[2]-pv[1])
post=f2/intf2
pcdf=cumsum(post)/sum(post)
pmean=sum(pv*post)/sum(post)
for(i in seq(0.999,0.001,-0.001))
{
threshold=i*max(post)
within= which(post>=threshold)
coverage=pcdf[max(within)]-pcdf[min(within)]
if(coverage>=0.95) break()
}
CI=pv[range(within)]
mse=(pmean-p)^2
pmean;mse;CI
Q2.
Since Pβ[0,1], we take Beta(1,1) as the prior.
Then generate a random number from Binomial(342,0.1) and note as xv.
Later part is similar to the Thai HIV test.
> pmean;CI
[1] 0.125
[1] 0.09085 0.16040
nv=342
p=0.1
xv=rbinom(1,nv,p)
alpha=1;beta=1
pv=seq(0.00001,0.99999,0.00001)
logf1=(xv+alpha-1)*log(pv)+(beta+nv-xv-1)*log(1-pv)
f2=exp(logf1-max(logf1))
intf2=sum(f2)*(pv[2]-pv[1])
post=f2/intf2
pcdf=cumsum(post)/sum(post)
pmean=sum(pv*post)/sum(post)
for(i in seq(0.999,0.001,-0.001))
{
threshold=i*max(post)
within=which(post>=threshold)
coverage=pcdf[max(within)]-pcdf[min(within)]
if(coverage>=0.95) break()
}
Q3.
1
ππ£ β [0,1], a proper prior should satisfy β«0 π(π₯)ππ₯ = 1, thus a beta distribution is a good choice.
For ππ£ ~ π΅π(πΌ, π½), we have π(ππ£ ) =
ππ£πΌβ1 β(1βππ£ )π½β1
.
π΅π(πΌ,π½)
π
π
With π(ππ£ |ππ£ , ππ£ ) = οΏ½ π£ οΏ½ β ππ£ π£ β (1 β ππ£ )(ππ£ βππ£ ), we have that
ππ£
π(ππ£ |ππ£ , ππ£ ) β
ππ£πΌβ1 β (1 β ππ£ )π½β1
π
π
β οΏ½ π£ οΏ½ β ππ£ π£ β (1 β ππ£ )(ππ£ βππ£ )
ππ£
π΅π(πΌ, π½)
πΌβ1+ππ£
β ππ£
β
β (1 β ππ£ )π½β1+ππ£ βππ£
(ππ£ +πΌ)β1
ππ£
β (1 β ππ£ )π½+ππ£ βππ£ β1
π΅π(ππ£ + πΌ, π½ + ππ£ β ππ£ )
So ππ£ |ππ£ , ππ£ ~ π΅π(ππ£ + πΌ, π½ + ππ£ β ππ£ ).
alpha=1;beta=1
x=seq(0.00001,0.99999,0.00001)
p.beta=dbeta(x,alpha,beta)
plot(x,p.beta,)
pv=seq(0.00001,0.05,0.00001)
xv=51;nv=8197
logf1=(xv+alpha-1)*log(pv)+(beta+nv-xv-1)*log(1-pv)
f2=exp(logf1-max(logf1))
intf2=sum(f2)*(pv[2]-pv[1])
post=f2/intf2
pcdf=cumsum(post)/sum(post)
for(i in seq(0.999,0.001,-0.001))
{
threshold=i*max(post)
within= which(post>=threshold)
coverage=pcdf[max(within)]-pcdf[min(within)]
if(coverage>=0.95) break()
}
CI=pv[range(within)]
plot(post)
Alpha
2
1/2
1
1
1/2
Beta
2
1
1/2
1
1/2
Pmean
0.006462627
0.006281637
0.00628202
0.006342237
0.00628202
CI
0.00477 0.00822
0.00461 0.00802
0.00461 0.00802
0.00467 0.00809
0.00461 0.00802
Q4.
π
π π£ β(1βππ£ )(ππ£βππ£ )
π£
Since ππ£ ~ π΅π(1 + ππ£ , 1 + ππ£ β ππ£ ), we have π(ππ£ ) = π΅π(1+π
π£ ,1+ππ£ βππ£ )
.
π
π
With π(ππ£ |ππ£ , ππ£ ) = οΏ½ π£ οΏ½ β ππ£ π£ β (1 β ππ£ )(ππ£ βππ£ ), we have that
ππ£
π(ππ£ |ππ£ , ππ£ ) β
π
ππ£ π£ β (1 β ππ£ )(ππ£ βππ£ )
π
π
β οΏ½ π£ οΏ½ β ππ£ π£ β (1 β ππ£ )(ππ£ βππ£ )
ππ£
π΅π(1 + ππ£ , 1 + ππ£ β ππ£ )
2βππ£
β ππ£
(2βπ +1)β1
β (1 β ππ£ )2β(ππ£ βππ£ )
β (1 β ππ£ )[2β(ππ£ βππ£ )+1]β1
ππ£ π£
β
π΅π((2 β ππ£ + 1),2 β (ππ£ β ππ£ ) + 1)
So ππ£ |ππ£ , ππ£ ~ π΅π((2 β ππ£ + 1),2 β (ππ£ β ππ£ ) + 1).
And the 95% highest posterior density interval for ππ£ we get is (0.00509 0.00751).
R code for a 95% highest posterior density interval for ππ£ :
pv=seq(0.00001,0.05,0.00001)
xv=51;nv=8197
logf1=2*xv*log(pv)+2*(nv-xv)*log(1-pv)
f2=exp(logf1-max(logf1))
intf2=sum(f2)*(pv[2]-pv[1])
post=f2/intf2
pcdf=cumsum(post)/sum(post)
for(i in seq(0.999,0.001,-0.001))
{
threshold=i*max(post)
within= which(post>=threshold)
coverage=pcdf[max(within)]-pcdf[min(within)]
if(coverage>=0.95) break()
}
CI=pv[range(within)]
© Copyright 2026 Paperzz