How can you resolve mixed normal distributions into their component data sets? I am a bird ringer with 5000 data items recording the wing length of Willow Warblers caught in spring at a bird observatory in the UK. The data is bimodal and consists of 2 normally distributed components. One component is male birds the other is female birds. There is no other data that can identify the gender of individual birds. I would like to know the mean and standard deviation of each data set and the number of members in each. Is there a computer driven approach that will provide this analysis that I can access and use?
 A: One approach would be to fit a two component Gaussian mixture model. This models the observed distribution as a mixture $w_1 f(\mu_1,\sigma_1)+(1-w_1)f(\mu_2,\sigma_2)$ where $f$ is the normal density. 
There are a number of approaches to doing so; the E-M algorithm (by introducing latent variables - in your case indicating the relative weight to being from one of the two sexes) is one common approach. This should converge to the maximum likelihood estimate of the 5 unknown parameters above.
The book Elements of Statistical Learning, 2nd.Ed by Hastie, Tibshirani and Friedman gives an explicit algorithm (Algorithm 8.2 in the 10th printing, p277). This book is commonly available in university libraries and is also downloadable from the web-page for the book (in pdf form) here at one of the authors' academic webpages. 
A number of questions on our site discuss this method.
There's a set of slides by some of the same authors here that also discuss this approach. One suitable search term on our site that turns up some of the previous posts on this topic is gaussian mixture EM. 
This is a pretty standard method and lots of software is available to fit it.
For example, if you use R, the function normalmixEM2comp in package mixtools is specifically for 2-component Gaussian mixtures; this automates the process of fitting the mixture.
I created some data and fitted a mixture using it (I had never used this package before, but it's very simple and works like many other such programs):
The simulated data set of wing lengths (just under 5000 values) is in the variable "wing". Here's a histogram of the data:

After loading the package, here's how I fitted the mixture (the value 0.5 is the initial guess at the proportion in the first component, the 64,71 are initial guesses at wing length for the two components, and the 1.2,1.2 are initial guesses at standard deviation for the two components):
 mixres = normalmixEM2comp(wing, 0.5, c(64,71), c(1.2,1.2))
number of iterations= 38 

So let's look at the results:
 summary(mixres)
summary of normalmixEM object:
          comp 1    comp 2
lambda  0.554041  0.445959
mu     64.477140 70.460471
sigma   1.301563  1.841486
loglik at estimate:  -12251.45 

Pretty good actually, since those are really close to the values I used to generate the data to begin with.
Summarizing that information back onto the histogram:

In this case I obtained the estimated count form females by taking the proportion for component 1 times the overall count. This undercounted the females by 14, which is well within the uncertainty involved. On the other hand, the output of the function above also gives an estimated (posterior) probability of being in each component (which was returned in mixres$probability). If I allocate each of the individual birds to a sex based on which one has the higher relative probability for that winglength, the estimated count is 2800 female (an overcount of 17 ... again, within the uncertainty one might expect for the count with this fitted model).

[However, this approach will tend to lead to an overcount of the more prevalent group, as it did here.]
You should be able to do similar things with other software for fitting such mixtures.
A: You need to find $\theta^\ast = (\mu_1,\sigma_1,\mu_2,\sigma_2,n_1)$ fitting your data, so you could try guessing various $\theta$ and then picking the top-scoring one.  To score a particular $\theta$, you could try a Kolmogorov-Smirnov test.
I don't know how accurate you need it, but with a histogram like this ...

... my prototype code finds what it thinks is the optimal $\theta$ comfortably within 5% of all components of the true $\theta^\ast$.  The neater and more obviously bimodal your histogram, the better the results will be.
Would R code be helpful?  Are your observations in some convenient format like a CSV file?  Would you be willing to upload the data?
