Saturday, September 1, 2012

Another way to simulate multinomial distribution using SAS

SAS has a variety of built-in data-step functions to generate a random variable based upon some chosen distributions, but most of the distributions are of continuous variables. Since version 9.2, SAS develops a built-in IML function RANDMULTINOMIAL() to simulate a  multinomial distribution, and its algorithm derived from binomial distribution was also written as a self-defined IML function which can be used in older SAS versions. However SAS users who have no access to SAS/IML product may need to re-write the function on data-step language or via PROC FCMP. Or, we can tweak PROC SURVEYSELECT for the task by just several rows of simple and straight-forward codes.

First let us specify the parameters of a 4-class multinomial distribution;

data multinomial_dist;
    class=1; prob=0.13; output;
    class=2; prob=0.07; output;
    class=3; prob=0.39; output;
    class=4; prob=0.41; output;
run;


The following code simulate a random sample of 10000 trials.

proc surveyselect data=multinomial_dist sampsize=10000 out=sample OUTSIZE outhits method=pps_wr;
    size prob;
run;




No comments:

Post a Comment