Mathematica Stack Exchange is a question and answer site for users of Mathematica. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

When I used this command:

EstimatedDistribution[data, BinomialDistribution[n, p],
                      ParameterEstimator -> {"MaximumLikelihood", Method -> "NMaximize"}] 

I get: BinomialDistribution[12, 0.00842065]

with error message:

FindRoot::cvmit: Failed to converge to the requested accuracy or precision within 100 iterations


EstimatedDistribution[data, BinomialDistribution[n, p],
                      ParameterEstimator -> {"MaximumLikelihood"}]

I get: BinomialDistribution[4, 0.0252702]

What are actually the differences between the two commands? Which answer should I use?

share|improve this question
There is no way for us to figure out which result is best without the data. Fortunately, there are algorithms called goodness of fit tests. These tests test how well a given distribution matches some data. This test is a common one:… Run it on the data and the distribution. See which does better. – Searke Oct 10 '12 at 13:32
The answers you are getting strongly suggest your data consist of counts of rare events. The distribution will be approximately Poisson, which (as the limiting value of Binomial$(n,p)$ for $np$ held constant) is going to be very difficult to differentiate from Binomial distributions with large $n$ (and vanishingly small $p$). The standard errors for $n$ and $p$ ought to tell you that. So the more important issue for you is not which command to use, but whether it's wise to trust the output of any such command here. Perhaps you should be fitting a Poisson distribution from the outset... – whuber Oct 22 '12 at 15:33
up vote 8 down vote accepted

It seems to be matter of which method--FindMaximum vs. NMaximize--is used to maximize the Likelihood function (or more probably the log-likelihood function). Since it is possible to get an analytic form of the likelihood function of the binomial distribution given some data:

nSamplePoints = 10;
data = RandomVariate[ BinomialDistribution[10, 0.1], nSamplePoints ];

likelihood = Simplify[
  Likelihood[BinomialDistribution[n, p], data]
  , Assumptions -> {n >= 2}];

enter image description here

Then you can plot this function with ContourPlot (of course n is probably an integer but that's a detail for this purpose):

likelihood plot

How to ascertain which combination of n and p gives the maximum likelihood (the mountain top on the contour plot) is a huge topic and there is a whole raft of documentation on function maximization in Mathematica's help. If you have the analytic form, you usually want to use the default method (which then uses the Automatic method of FindMaximum) instead of NMaximize, which doesn't have any knowledge of the gradient of the function to aid it in climbing up the hill but still does the best it can.

In your case, I think that it is even more acute since the likelihood function is so sharp given the very low value for p. (I suspect its overwhelmingly zeros in your data)

share|improve this answer
yes, the proportion of zeros in my data is very high, more than 90%. – yyasinta Oct 18 '12 at 10:20

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.