spm_beta_compare.m 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. function xp = spm_beta_compare(alpha1,alpha2,Nsamp)
  2. % Compute probability that r1 > r2
  3. % FORMAT xp = spm_beta_compare(alpha1,alpha2,Nsamp)
  4. %
  5. % Input:
  6. % alpha1 - Beta parameters for first density
  7. % alpha2 - Beta parameters for second density
  8. % Nsamp - number of samples used to compute xp [default = 1e4]
  9. %
  10. % Output:
  11. % xp - exceedance probability
  12. %
  13. % Compute probability that r1 > r2 where p(r1)=Beta(r1|alpha1),
  14. % p(r2)=Beta(r2|alpha2). Uses sampling.
  15. % Useful for comparing groups in RFX model inference
  16. %__________________________________________________________________________
  17. % Copyright (C) 2009 Wellcome Trust Centre for Neuroimaging
  18. % Will Penny
  19. % $Id: spm_beta_compare.m 3458 2009-10-13 10:05:35Z maria $
  20. if nargin < 3
  21. Nsamp = 1e4;
  22. end
  23. Nk = length(alpha1);
  24. % Perform sampling in blocks
  25. %--------------------------------------------------------------------------
  26. blk = ceil(Nsamp*Nk*8 / 2^28);
  27. blk = floor(Nsamp/blk * ones(1,blk));
  28. blk(end) = Nsamp - sum(blk(1:end-1));
  29. xp = 0;
  30. for i=1:length(blk)
  31. % Sample from univariate gamma densities then normalise
  32. % (see Dirichlet entry in Wikipedia or Ferguson (1973) Ann. Stat. 1,
  33. % 209-230)
  34. %----------------------------------------------------------------------
  35. r1 = zeros(blk(i),Nk);
  36. for k = 1:Nk
  37. r1(:,k) = spm_gamrnd(alpha1(k),1,blk(i),1);
  38. end
  39. sr1 = sum(r1,2);
  40. for k = 1:Nk
  41. r1(:,k) = r1(:,k)./sr1;
  42. end
  43. r2 = zeros(blk(i),Nk);
  44. for k = 1:Nk
  45. r2(:,k) = spm_gamrnd(alpha2(k),1,blk(i),1);
  46. end
  47. sr2 = sum(r2,2);
  48. for k = 1:Nk
  49. r2(:,k) = r2(:,k)./sr2;
  50. end
  51. % Exceedance probabilities:
  52. xp = xp + length(find (r1(:,1)>r2(:,1)));
  53. end
  54. xp = xp / Nsamp;