The `ipf2`

function finds the maximum likelihood estimates for fitted values in the log-linear model:

*\log y_{ij} = \log α_{i} + \log β_{j} + \log m_{ij} *

where *m_{ij}* is a set of prior estimates for *y_{ij}* and itself is no more complex than the one being fitted.

1 2 |

`rtot` |
Origin (row) totals to constrain indirect estimates to. |

`ctot` |
Destination (column) totals to constrain indirect estimates to. |

`m` |
Auxiliary matrix. By default set to 1 for all origin-destination combinations. |

`tol` |
Tolerance level for parameter estimation. |

`maxit` |
Maximum number of iterations for parameter estimation. |

`verbose` |
Print the parameter estimates at each iteration. By default |

Iterative Proportional Fitting routine set up in a similar manner to Agresti (2002, p.343). This is equivalent to a conditional maximization of the likelihood, as discussed by Willekens (1999), and hence provides identical indirect estimates to those obtained from the `cm2`

routine.

The user must ensure that the row and column totals are equal in sum. Care must also be taken to allow the dimension of the auxiliary matrix (`m`

) to equal those provided in the row and column totals.

If only one of the margins is known, the function can still be run. The indirect estimates will correspond to the log-linear model without the *α_{i}* term if (`rtot = NULL`

) or without the *β_{j}* term if (`ctot = NULL`

)

Returns a `list`

object with

`mu ` |
Origin-Destination matrix of indirect estimates |

`it ` |
Iteration count |

`tol ` |
Tolerance level at final iteration |

Guy J. Abel

Agresti, A. (2002). *Categorical Data Analysis* 2nd edition. Wiley.

Willekens, F. (1999). Modelling Approaches to the Indirect Estimation of Migration Flows: From Entropy to EM. *Mathematical Population Studies* 7 (3), 239–78.

`cm2`

, `ipf3`

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | ```
## with Willekens (1999) data
dn <- LETTERS[1:2]
y <- ipf2(rtot = c(18, 20), ctot = c(16, 22), m = matrix(c(5, 1, 2, 7), ncol = 2,
dimnames = list(orig = dn, dest = dn)))
round(addmargins(y$mu),2)
## with all elements of offset equal
y <- ipf2(rtot = c(18, 20), ctot = c(16, 22))
round(addmargins(y$mu),2)
## with bigger matrix
dn <- LETTERS[1:3]
y <- ipf2(rtot = c(170, 120, 410), ctot = c(500, 140, 60),
m = matrix(c(50, 10, 220, 120, 120, 30, 545, 0, 10), ncol = 3,
dimnames = list(orig = dn, dest = dn)))
# display with row and col totals
round(addmargins(y$mu))
## only one margin known
dn <- LETTERS[1:2]
y <- ipf2(rtot = c(18, 20), ctot = NULL, m = matrix(c(5, 1, 2, 7), ncol = 2,
dimnames = list(orig = dn, dest = dn)))
round(addmargins(y$mu))
``` |

Questions? Problems? Suggestions? Tweet to @rdrrHQ or email at ian@mutexlabs.com.

All documentation is copyright its authors; we didn't write any of that.