# A Boilerplate for EM algorithms¶

## Description¶

`EMfit`

provides the boilerplate for EM algorithms and EM-NR accelerated EM algorithms
(also known as the Louis-method of acceleration)

## Usage¶

```
EMfit(psi.start, mk_cpl_data, ll_cpl, completeInfo, Jacobian, ...,
Mstep = Mstep.default, eps = 1e-07, maxiter = 200,
maxiter.EM = maxiter, maxiter.inner = 25, Information = TRUE,
verbose = TRUE, verbose.inner = FALSE, show.psi = FALSE)
```

## Arguments¶

`psi.start`

A numeric vector with starting values

`mk_cpl_data`

A function that creates the ‘complete data’ from the ‘observed’ data. Its return value can be anything that can be used by the other functions given as arguments. The return value can also have a component “weights”.

`ll_cpl`

A function that computes the complete-data contributions to the log-likelihood. It should at least accept the arguments

`psi`

, the parameter vector, and`cpl_data`

, the complete-data structure. It should return the complete-data contributions to the log-likelihood, with an attributed named “i” that indicates unconditionally independent groups of observations.`completeInfo`

A function that computes the ‘complete-data’ information matrix It should at least accept the arguments

`psi`

, the parameter vector,`cpl_data`

, the complete-data structure, and`weights`

, which are weights determined e.g. by posterior probabilities and a-priori weights.`Jacobian`

A function that computes the Jacobian of the log-likelihood function. It should return a matrix with the same number of rows as the length of the result of

`ll_cpl`

and the same number of colums as elements of`psi`

and should have an attribute named “i” that indicates unconditionally independent groups of observations.`Mstep`

A function that conducts the M-step. It should accept the parameter vector as first argument, the complete-data structure as second argument, a vector

`wPPr`

of posterior probabilities (weighted if applicable), and should accept anything that is passed via …`eps`

Numeric; a criterion for convergence

`maxiter`

Maximal number of iterations

`maxiter.EM`

Maximal number of iterations after which the algorithm should switch to Newton-Raphson steps

`maxiter.inner`

Maximal number of iterations for the M-step

`Information`

Logical; should the observed-data information matrix be returned?

`verbose`

Logical; should an interation trace be displayed?

`verbose.inner`

Logical; should the iteration trace of the M-step be displayed (if applicable)?

`show.psi`

Logical; should the current parameter value be displayed along with the iteration history?

`...`

Further arguments passed to

`ll_cpl`

,`mk_cpl_data`

, etc.

## Value¶

A list with the following components:

- psi
The MLE of the parameter vector

- logLik
The maximized observed-data log-likelihood

- gradient
The gradient of the log-likelihood function

- cplInfo
The complete-data information matrix

- missInfo
The missing-data information matrix

- obsInfo
The observed-data information matrix. Use this to compute standard errors.

- converged
A logical value, indicating whether the algorithm converged.

- psi.trace
A matrix which contains the parameter values for each iteration

- logLik.trace
A vector with the log-likelihood values of each iteration