stats (version 3.6.2)

# loglin: Fitting Log-Linear Models

## Description

`loglin` is used to fit log-linear models to multidimensional contingency tables by Iterative Proportional Fitting.

## Usage

```loglin(table, margin, start = rep(1, length(table)), fit = FALSE,
eps = 0.1, iter = 20, param = FALSE, print = TRUE)```

## Arguments

table

a contingency table to be fit, typically the output from `table`.

margin

a list of vectors with the marginal totals to be fit.

(Hierarchical) log-linear models can be specified in terms of these marginal totals which give the ‘maximal’ factor subsets contained in the model. For example, in a three-factor model, `list(c(1, 2), c(1, 3))` specifies a model which contains parameters for the grand mean, each factor, and the 1-2 and 1-3 interactions, respectively (but no 2-3 or 1-2-3 interaction), i.e., a model where factors 2 and 3 are independent conditional on factor 1 (sometimes represented as ‘’).

The names of factors (i.e., `names(dimnames(table))`) may be used rather than numeric indices.

start

a starting estimate for the fitted table. This optional argument is important for incomplete tables with structural zeros in `table` which should be preserved in the fit. In this case, the corresponding entries in `start` should be zero and the others can be taken as one.

fit

a logical indicating whether the fitted values should be returned.

eps

maximum deviation allowed between observed and fitted margins.

iter

maximum number of iterations.

param

a logical indicating whether the parameter values should be returned.

print

a logical. If `TRUE`, the number of iterations and the final deviation are printed.

## Value

A list with the following components.

lrt

the Likelihood Ratio Test statistic.

pearson

the Pearson test statistic (X-squared).

df

the degrees of freedom for the fitted model. There is no adjustment for structural zeros.

margin

list of the margins that were fit. Basically the same as the input `margin`, but with numbers replaced by names where possible.

fit

An array like `table` containing the fitted values. Only returned if `fit` is `TRUE`.

param

A list containing the estimated parameters of the model. The ‘standard’ constraints of zero marginal sums (e.g., zero row and column sums for a two factor parameter) are employed. Only returned if `param` is `TRUE`.

## Details

The Iterative Proportional Fitting algorithm as presented in Haberman (1972) is used for fitting the model. At most `iter` iterations are performed, convergence is taken to occur when the maximum deviation between observed and fitted margins is less than `eps`. All internal computations are done in double precision; there is no limit on the number of factors (the dimension of the table) in the model.

Assuming that there are no structural zeros, both the Likelihood Ratio Test and Pearson test statistics have an asymptotic chi-squared distribution with `df` degrees of freedom.

Note that the IPF steps are applied to the factors in the order given in `margin`. Hence if the model is decomposable and the order given in `margin` is a running intersection property ordering then IPF will converge in one iteration.

Package MASS contains `loglm`, a front-end to `loglin` which allows the log-linear model to be specified and fitted in a formula-based manner similar to that of other fitting functions such as `lm` or `glm`.

## References

Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Wadsworth & Brooks/Cole.

Haberman, S. J. (1972). Algorithm AS 51: Log-linear fit for contingency tables. Applied Statistics, 21, 218--225. 10.2307/2346506.

Agresti, A. (1990). Categorical data analysis. New York: Wiley.

`table`.

`loglm` in package MASS for a user-friendly wrapper.

`glm` for another way to fit log-linear models.

## Examples

Run this code
``````# NOT RUN {
## Model of joint independence of sex from hair and eye color.
fm <- loglin(HairEyeColor, list(c(1, 2), c(1, 3), c(2, 3)))
fm
1 - pchisq(fm\$lrt, fm\$df)
## Model with no three-factor interactions fits well.
# }
``````

Run the code above in your browser using DataCamp Workspace