BookmarkSubscribeRSS Feed
Fluorite | Level 6

Is there any way yo perform Paired Bayesian t test in Proc MCMC ? I found the following documents to perform analysis in R and bugs. I am just wondering can we do the same Bayesian paired t-test in SAS? 


1. Bayesian First Aid: One Sample and Paired Samples t-test - Publishable Stuff (

2. BEST: Bayesian estimation of groups (

3. GitHub - rasmusab/bayesian_first_aid: Inside every classical test there is a Bayesian model tryin...




Yes, you can model the pairs of differences by using a t distribution. For example,

MODEL diff = t(mean, sd, dof);

where the three distribution parameters (mean, sd, and dof) are defined by using programming statements and assigned different prior distributions. Once that is done, you can compute a t-statistic.


I haven't done this myself, but perhaps @MichaelL_SAS or @StatDave have additional comments or can direct you to a worked example.

Fluorite | Level 6

 @MichaelL_SAS or @StatDave_sas any suggestions or sample exmple? 

SAS Employee

PROC MCMC is a bit out of my wheelhouse, but I believe @Rick_SAS is pretty much correct. The t-distribution is one of the standard distributions recognized by PROC MCMC so it should just be a matter of specifying the the desired prior for the model parameters. 


Based on the links you provided here's my quick attempt at mimicking the analysis of the new world data. I did just a quick scan of the link so I might not be matching the prior they used exactly but the results look to be in the same ballpark. I used PROC UNIVARIATE to compute the median absolute deviation of the difference and just by hand used that to determine the prior distribution for the mean and standard deviation based on my quick reading of the link. 


data exData;
  input y80 y01;
  9139	14620
  7686	8767
  9996	8729
  5488	8231
  5920	7740
  4096	7264
  4566	6408
  4965	6283
  5487	5740
  5227	5116
  2347	4124
  3089	3240
  1938	2789

data exData;
   set exData;
   diff = y01-y80;

proc mcmc data=exData nMC=10000 seed=123456;
  parms mu sigma dfm1 ;
  prior mu ~ normal(1469.8, var=1134225000000);
  prior sigma ~ uniform(1.065,1065000);
  prior dfm1 ~ expon(scale=29);
  df =dfm1 +1 ; 
  model diff ~ t(mu, sd=sigma, df);

@SteveDenham I don't think PROC GENMOD supports the REPEATED statement for a Bayesian analysis. While that analysis also probably could be programed in PROC MCMC another alternative would be to use the relatively new BGLIMM procedure.

Jade | Level 19

@MichaelL_SAS  - you are absolutely right about the REPEATED statement not being supported for Bayesian analysis in GENMOD.  There was a note in the log that should have let me know, had I looked closely enough (it was buried amongst several pages of notes regarding compression and decompression of temp files for the analysis I had run).  Later today I will give BGLIMM a shot, when I get access to our SAS/STAT 15.1 machine.



Jade | Level 19

One way I have done Bayesian paired t is to use PROC GENMOD with a BAYES statement.  Try something like:


proc genmod data=yourdatainlongform;
class pair;
model response=pair;
bayes seed=1 coeffprior=normal;

Here 'pair' would take on values like 'Pre' and 'Post'.  This is the simplest paired-t model.  Other covariates/factors can be added to reach the desired model.






Hi @SteveDenham : I thought of that syntax but rejected it because I decided that it corresponds to an ordinary two-sample t test, not a paired t test. The long-form data does not allow the procedure to know which observations are pre/post, so it just compares the mean of the "pre" and "post" groups. Useful, to be sure, but not a paired t test.


Jade | Level 19

Ulp, you are spot on @Rick_SAS .  To get this to be a paired t-test, it has to be a GEE type model.  How about this instead:



proc genmod data=for_stats_in_long_format ;
class pair studyid;
			model result_n = 
					/  type3;
			repeated subject=subjectid  / type = un printmle ;
			bayes statistics=all seed=1;
            lsmeans pair/diff;



Available on demand!

Missed SAS Innovate Las Vegas? Watch all the action for free! View the keynotes, general sessions and 22 breakouts on demand.


Register now!

What is ANOVA?

ANOVA, or Analysis Of Variance, is used to compare the averages or means of two or more populations to better understand how they differ. Watch this tutorial for more.

Find more tutorials on the SAS Users YouTube channel.

Discussion stats
  • 7 replies
  • 4 in conversation