# Solving derivative of cumulative normal distribution log likelihood

I am a newbie and I'm trying to use Mathematica to obtain the symbolic Maximum Likelihood Estimation for a cumulative normal distribution. So far I have reached the step where I have the derivative of the log likelihood for both $\mu$ and $\sigma$, i.e. $\text{score}=\left\{\frac{\partial \text{logL}}{\partial \mu },\frac{\partial \text{logL}}{\partial \sigma }\right\}$, or

$$\left\{\sum _{i=1}^n -\frac{\sqrt{\frac{2}{\pi }} e^{-\frac{\left(\mu -x_i\right){}^2}{2 \sigma ^2}}}{\sigma \text{erfc}\left(\frac{\mu -x_i}{\sqrt{2} \sigma }\right)},\sum _{i=1}^n \frac{\sqrt{\frac{2}{\pi }} \left(\mu -x_i\right) e^{-\frac{\left(\mu -x_i\right){}^2}{2 \sigma ^2}}}{\sigma ^2 \text{erfc}\left(\frac{\mu -x_i}{\sqrt{2} \sigma }\right)}\right\}$$ The problem is that when I try to solve when these expressions are 0:

Solve[score == {0, 0} && σ > 0, {μ, σ}]


Mathematica tells me that it can't solve it (Solve::nsmet: This system cannot be solved with the methods available to Solve).

Is this really such a hard problem or am I missing something?

• Try Solve[ Thread[ score={0,0}]...] – chris Mar 28 '13 at 17:17
• and please typeset mathematica expressions. cf the FAQ. – chris Mar 28 '13 at 17:20
• @chris I tried it with Thread but it still doesn't work, also it works for other distributions such as Poisson, so if Thread is just for the syntax, i don't think I have a syntax issue – zamazalotta Mar 28 '13 at 17:39
• What is your 'cumulative normal distribution'? Do you mean a Normal distribution, or the distribution of the sample sum, or something else? – wolfies Mar 28 '13 at 17:39
• Eh? The CDF of the Normal is not the pdf. The MLE is calculated wrt the pdf, not the cdf. – wolfies Mar 28 '13 at 17:45

Let us try with a Normal distribution. Start by the log normal of it:

ff = PowerExpand[Log@ PDF[NormalDistribution[μ, σ], x],
Assumptions -> {σ > 0,μ ∈  Reals,  x ∈ Reals}]


Now the log likelihood obey

Q = Sum[ff /. x -> Subscript[x, i], {i, n}] We can define the condition of stastionarity

eqn = Thread[D[Q, #] & /@ {σ, μ} == 0] We need to tell mathematica to expand the sums

eqn2 =
eqn /. Sum[a_, b_] :>  sum[Expand[a], b] //.
sum[a_ + b_, c_] :> sum[a, c] + sum[b, c] /.
sum[a_ b_, c_] :> b   sum[a, c] /; FreeQ[b, Subscript[x, i]] /.
sum[a_, b_] :> a sum[1, b] /; FreeQ[a, Subscript[x, i]] /.
sum -> Sum now we can solve

Solve[eqn2, {μ, σ }][] QED

EDIT

You might want to look at the LogLikelihood function

With this function, taking a definite (n=3) case

Q = LogLikelihood[NormalDistribution[μ, σ], Table[Subscript[x, i], {i, 3}]]

Solve[Thread[D[Q, #] & /@ {μ, σ} == 0], {μ, σ}] With a numerical example:

data = RandomVariate[NormalDistribution[1, 2], 100];

Q = LogLikelihood[NormalDistribution[μ, σ], data];

sol=NSolve[Thread[D[Q, #] & /@ {μ, σ} == 0], {μ, σ}][]

(* ==> {μ-> 0.92576,  σ-> 2.03064} *)

Show[ContourPlot[Q, {μ, -1, 3}, {σ, 1, 3}, ColorFunction -> "Heat"],
Graphics[Point[{μ, σ}] /. sol]] • For a cumulative distribution? What sort of density would you suggest this cumulative distribution has? – wolfies Mar 28 '13 at 17:52
• @chris so this means that the only way to fit a dataset with normcdf is numerical optimization? – zamazalotta Mar 28 '13 at 17:54
• @wolfies I guess its a good point: the CDF is not normalized... – chris Mar 28 '13 at 17:55
• @chris thank you very much for your detailed answer :) – zamazalotta Mar 28 '13 at 18:07
• The problem is that a normal cumulative distribution is not a distribution as its integral diverges. – chris Mar 29 '13 at 6:38