Generalized Dirichlet-Multinomial distribution

A demo of random number generation, density evaluation, and distribution fitting for the generalized Dirichlet-Mutlinomial distribution

Contents

Generate generalized Dirichlet-Multinomial random vectors

clear;
% reset random seed
s = RandStream('mt19937ar','Seed',1);
RandStream.setGlobalStream(s);
% sample size
n = 100;
% # bins
d = 5;
% true parameter values
alpha = 1:d-1;
beta = d-1:-1:1;
% set batch sizes (ranges from 25 to 50)
batchsize = 25+unidrnd(25,n,1);
% generate random vectors
X = gendirmnrnd(batchsize,alpha,beta,n);

Evaluate gen. Dirichlet-Multinomial (log) pdf at true parameter value

logL = gendirmnpdfln(X,alpha,beta);
display(sum(logL));
  -1.0604e+03

Fit generalized Dirichlet-Multinomial distribution

tic;
[alpha_hat, beta_hat, stats_gdm] = gendirmnfit(X);
toc;
display([alpha_hat, beta_hat]);
display(stats_gdm.se);
display(stats_gdm);
Elapsed time is 0.026425 seconds.
    1.2048    5.1594
    1.4605    2.9081
    4.4444    3.0886
    2.8421    0.8244

    0.2047    0.9637
    0.2351    0.4938
    0.8990    0.6189
    0.7449    0.1996


stats_gdm = 

  struct with fields:

            se: [4×2 double]
      gradient: [2×4 double]
           dof: 8
          logL: -1.0503e+03
           BIC: 2.1373e+03
           AIC: 2.1165e+03
           LRT: 933.3728
        pvalue: 0
    iterations: 6