This post was kindly contributed by From a Logical Point of View » SAS - go there to comment and to read the full post. |
In Lex’s library of the latest SAS Global Forum 2015 papers, I found an interesting paper by Wu Gong, Jeffreys Interval for One-Sample Proportion with SAS/STAT Software, where SAS MCMC procedure and a so called Random Walk Metropolis Algorithm were implemented to calculate the Jeffreys interval for binomial proportion.
Years ago I wrote several posts on this topic:
Statistical Notes (3): Confidence Intervals for Binomial Proportion Using SAS
Confidence Intervals for Binomial Proportion: A SAS 9.4/STAT 12.3 Update
I’m not a statistician and I might get some time later to dig these new methods in Wu’s paper (I modified his codes little bit to fit my post):
/*0 input data*/
data jeff;
n=263;
r=81;
run;/*1 Random Walk Metropolis*/
%let nmc=1010000;
%let c=0.08;data PosteriorSample;
call streaminit(123);
set jeff;
p0=0.5;
retain p0;do i = 1 to &nmc.;
p1=p0+rand(‘normal’,0,&c.);do while(p1 lt 0 or p1 gt 1);
p1=p0+rand(‘normal’,0,&c.);
end;logratio=(1/2-1)*log(p1)+(1/2-1)*log(1-p1)+r*log(p1)+(n-r)*log(1-p1)
– (1/2-1)*log(p0)-(1/2-1)*log(1-p0)-r*log(p0)-(n-r)*log(1-p0);if log(rand(‘uniform’)) <= logratio then do;
p0=p1;
end;if i gt 10000 and floor(i/20)*20 eq i then do;
output;
end;
end;
keep i p0;
run;title "Jeffreys Interval by Random Walk Metropolis Algorithm";
proc univariate data=PosteriorSample noprint;
var p0;
output out=PP pctlpts = 2.5 97.5 pctlpre = pct;
run;proc print data=pp noobs;
format pct2_5 pct97_5 6.4;
run;
title;/*2 MCMC*/
title "Jeffreys Credible Interval by PROC MCMC";
ods select PostIntervals;
proc mcmc data=jeff
seed=123
outpost=PosteriorSample2
nbi=10000
nthin=20
nmc=1000000
statistics=(summary interval) diagnostics=none plots=none;
parms prb 0.5;
prior prb ~ beta(1/2,1/2);
model r ~ binomial(n,prb);
run;
title;
This post was kindly contributed by From a Logical Point of View » SAS - go there to comment and to read the full post. |