# Topo: Topological Interaction of Factors In gnm: Generalized Nonlinear Models

## Description

Given two or more factors `Topo` creates an interaction factor as specified by an array of levels, which may be arbitrarily structured.

## Usage

 `1` ```Topo(..., spec = NULL) ```

## Arguments

 `...` two or more factors `spec` an array of levels, with dimensions corresponding to the number of levels of each factor in the interaction

## Value

A factor of levels extracted from the levels array given in `spec`, using the given factors as index variables.

David Firth

## References

Erikson, R., GoldThorpe, J. H. and Portocarero, L. (1982) Social Fluidity in Industrial Nations: England, France and Sweden. Brit. J. Sociol. 33(1), 1-34.

Xie, Y. (1992) The Log-multiplicative Layer Effect Model for Comparing Mobility Tables. Am. Sociol. Rev. 57(3), 380-395.

`Symm` and `Diag` for special cases
 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42``` ```set.seed(1) ### Collapse to 7 by 7 table as in Erikson (1982) erikson <- as.data.frame(erikson) lvl <- levels(erikson\$origin) levels(erikson\$origin) <- levels(erikson\$destination) <- c(rep(paste(lvl[1:2], collapse = " + "), 2), lvl[3], rep(paste(lvl[4:5], collapse = " + "), 2), lvl[6:9]) erikson <- xtabs(Freq ~ origin + destination + country, data = erikson) ### Create array of interaction levels as in Table 2 of Xie (1992) levelMatrix <- matrix(c(2, 3, 4, 6, 5, 6, 6, 3, 3, 4, 6, 4, 5, 6, 4, 4, 2, 5, 5, 5, 5, 6, 6, 5, 1, 6, 5, 2, 4, 4, 5, 6, 3, 4, 5, 5, 4, 5, 5, 3, 3, 5, 6, 6, 5, 3, 5, 4, 1), 7, 7, byrow = TRUE) ### Fit the levels models given in Table 3 of Xie (1992) ## Null association between origin and destination nullModel <- gnm(Freq ~ country:origin + country:destination, family = poisson, data = erikson) ## Interaction specified by levelMatrix, common to all countries commonTopo <- update(nullModel, ~ . + Topo(origin, destination, spec = levelMatrix)) ## Interaction specified by levelMatrix, different multiplier for ## each country multTopo <- update(nullModel, ~ . + Mult(Exp(country), Topo(origin, destination, spec = levelMatrix))) ## Interaction specified by levelMatrix, different effects for ## each country separateTopo <- update(nullModel, ~ . + country:Topo(origin, destination, spec = levelMatrix)) ```