Skip to content

Commit

Permalink
Merge pull request #229 from null-a/fix-multinomial-sample
Browse files Browse the repository at this point in the history
Fix edge cases in multinomialSample.
  • Loading branch information
stuhlmueller committed Oct 1, 2015
2 parents 588a4da + 5d75c7c commit 7e4ff8f
Showing 1 changed file with 11 additions and 9 deletions.
20 changes: 11 additions & 9 deletions src/erp.js
Original file line number Diff line number Diff line change
Expand Up @@ -504,11 +504,11 @@ function multinomialSample(theta) {
var probAccum = 0;
for (var i = 0; i < k; i++) {
probAccum += theta[i];
if (probAccum >= x) {
if (x < probAccum) {
return i;
} //FIXME: if x=0 returns i=0, but this isn't right if theta[0]==0...
}
}
return k;
return k - 1;
}

// Make a discrete ERP from a {val: prob, etc.} object (unormalized).
Expand Down Expand Up @@ -537,12 +537,14 @@ function makeMarginalERP(marginal) {
sample: function(params) {
var x = util.random();
var probAccum = 0;
for (var i in marginal) {if (marginal.hasOwnProperty(i)) {
probAccum += marginal[i].prob;
// FIXME: if x=0 returns i=0, but this isn't right if theta[0]==0...
if (probAccum >= x)
return marginal[i].val;
}}
for (var i in marginal) {
if (marginal.hasOwnProperty(i)) {
probAccum += marginal[i].prob;
if (x < probAccum) {
return marginal[i].val;
}
}
}
return marginal[i].val;
},
score: function(params, val) {
Expand Down

0 comments on commit 7e4ff8f

Please sign in to comment.