- 227 名前:132人目の素数さん mailto:sage [2024/09/21(土) 07:06:35.21 ID:cdm6DP8+.net]
- library(binom)
ci=binom.confint(324-300,324) lu=unlist(ci[11,5:6]) LearnBayes::beta.select(list(p=0.025,x=lu[1]),list(p=0.975,x=lu[2])) # 信頼区間からβ分布の形状係数を算出し代表値を返す ci2ab=\(l,u,verbose=FALSE,cl=0.95){ # CI : [l,u], cl : confidence level if(l==u) return(NA) options(warn = -1) HDI=\(InvCDF=qbeta,cred=0.95,...){ opt=optimize(\(p) InvCDF(p+cred,...) - InvCDF(p,...),c(0,1-cred)) lwr=InvCDF(opt$min,...) upr=lwr+opt$obj c(lwr,upr) } f=\(ab){ LU=HDI(qbeta,cred=cl,shape1=ab[1],shape2=ab[2]) (LU[1]-l)^2 + (LU[2]-u)^2 } opt=optim(runif(2,1,100),f) opt=optim(opt$par,f) par=opt$par lu=HDI(qbeta,cred=cl,shape1=par[1],shape2=par[2]) if(verbose){ mean=par[1]/sum(par) median=qbeta(0.50,par[1],par[2]) mode=(par[1]-1)/(sum(par)-2) cat('α =',round(par[1],2),' β =',round(par[2],2),'\n') cat('mean =',round(mean,3),' median =',round(median,3)) if(par[1]>1 & par[2]>1) cat(' mode =',round(mode,3)) cat('\nlower =',round(lu[1],3),' upper =',round(lu[2],3),'\n') curve(dbeta(x,par[1],par[2]),type='h',col=2,n=250,bty='l',ann=FALSE,axes=FALSE) axis(1) } options(warn = 0) invisible(par) } ab=ci2ab(lu[1],lu[2]) k=1e5 p=rbeta(k,ab[1],ab[2]) # 検査陽性の事後確率 postp=\(p,s,t) p*s/ (1-t+p*(s+t-1)) # p:事前確率 s:感度 t:特異度 # 検査陰性の事後確率 postn=\(p,s,t) p*(s-1)/(-t+p*(s+t-1)) # p:事前確率 s:感度 t:特異度 # 尿素呼気試験(感度90-100% 特異度80-99%) 便中ピロリ菌抗原 (感度90-98% 特異度87-100%) abs=ci2ab(0.90,1.00) abt=ci2ab(0.80,0.99) s=rbeta(k,abs[1],abs[2]) t=rbeta(k,abt[1],abt[2]) post1=postn(p,s,t) abs=ci2ab(0.90,0.98) abt=ci2ab(0.87,1.00) s=rbeta(k,abs[1],abs[2]) t=rbeta(k,abt[1],abt[2]) post2=postn(post1,s,t) 1/mean(post2) 1/median(post2) hist(post2,freq=FALSE,breaks='scott',ann=F,axes=F) ; axis(1)
|

|