R: Random 2-way Tables with Given Marginals

r2dtable {stats} | R Documentation

## Random 2-way Tables with Given Marginals

### Description

Generate random 2-way tables with given marginals using Patefield's algorithm.

### Usage

    r2dtable(n, r, c)

### Arguments

`n` | a non-negative numeric giving the number of tables to be drawn.
`r` | a non-negative vector of length at least 2 giving the row totals, to be coerced to `integer`. Must sum to the same as `c`.
`c` | a non-negative vector of length at least 2 giving the column totals, to be coerced to `integer`.

### Value

A list of length `n` containing the generated tables as its components.

### References

Patefield, W. M. (1981). Algorithm AS 159: An efficient method of generating r x c tables with given row and column totals. Applied Statistics, 30, 91–97. doi: 10.2307/2346669.

### Examples

    ## Fisher's Tea Drinker data.
    TeaTasting <-
    matrix(c(3, 1, 1, 3),
           nrow = 2,
           dimnames = list(Guess = c("Milk", "Tea"),
                           Truth = c("Milk", "Tea")))
    ## Simulate permutation test for independence based on the maximum
    ## Pearson residuals (rather than their sum).
    rowTotals <- rowSums(TeaTasting)
    colTotals <- colSums(TeaTasting)
    nOfCases <- sum(rowTotals)
    expected <- outer(rowTotals, colTotals, "*") / nOfCases
    maxSqResid <- function(x) max((x - expected) ^ 2 / expected)
    simMaxSqResid <-
        sapply(r2dtable(1000, rowTotals, colTotals), maxSqResid)
    sum(simMaxSqResid >= maxSqResid(TeaTasting)) / 1000
    ## Fisher's exact test gives p = 0.4857 ...

[Package stats version 3.5.1 Index]