## An R Companion for the Handbook of Biological Statistics

Salvatore S. Mangiafico

# Fisher’s Exact Test of Independence

### Examples in Summary and Analysis of Extension Program Evaluation

SAEEPER: Association Tests for Nominal Variables

### Packages used in this chapter

The following commands will install these packages if they are not already installed:

if(!require(rcompanion)){install.packages("rcompanion")}

When to use it

Null hypothesis

See the Handbook for information on these topics.

### Post-hoc tests

For the following example of post-hoc pairwise testing, we’ll use the fisher.multcomp function from the package RVAideMemoire to make the task easier.  Then we’ll use pairwise.table in the native stats package as an alternative.

#### Post-hoc pairwise Fisher’s exact tests with RVAideMemoire

### --------------------------------------------------------------
### Post-hoc example, Fisher’s exact test, p. 79
### --------------------------------------------------------------

Input =("
Frequency  Damaged  Undamaged
Daily       1        24
Weekly      5        20
Monthly    14        11
Quarterly  11        14
")

row.names=1))

Matriz

fisher.test(Matriz,
alternative="two.sided")

p-value = 0.0001228

alternative hypothesis: two.sided

library(rcompanion)

PT = pairwiseNominalIndependence(Matriz,

fisher = TRUE,

gtest  = FALSE,

chisq  = FALSE,
digits = 3)

PT

1      Daily : Weekly 0.189000     0.227000
2     Daily : Monthly 0.000102     0.000612
3   Daily : Quarterly 0.001920     0.005760
4    Weekly : Monthly 0.018600     0.037200
5  Weekly : Quarterly 0.128000     0.192000
6 Monthly : Quarterly 0.572000     0.572000

library(rcompanion)

cldList(comparison = PT\$Comparison,
threshold  = 0.05)

Group Letter MonoLetter
1     Daily      a        a
2    Weekly     ab        ab
3   Monthly      c          c
4 Quarterly     bc         bc

Summary of results

Frequency  Damaged  Letter
Daily       4%      a
Weekly     20%      ab
Quarterly  44%       bc
Monthly    56%        c

Groups sharing a letter are not significantlt different (alpha = 0.05)

#     #     #

Assumptions

See the Handbook for information on this topic.

### Examples

#### Examples of Fisher’s exact test with data in a matrix

### --------------------------------------------------------------
### Chipmunk example, Fisher’s exact test, p. 80
### --------------------------------------------------------------

Input =("
Distance    Trill  No.trill
10m        16     8
100m        3    18
")

row.names=1))

Matriz

fisher.test(Matriz,
alternative="two.sided")

p-value = 0.0006862

#     #     #

### --------------------------------------------------------------
### Drosophila example, Fisher’s exact test, p. 81
### --------------------------------------------------------------

Input =("
Variation             Synonymous  Replacement
'Polymorphisms'      43          2
'Fixed differences'  17          7
")

row.names=1))

Matriz

fisher.test(Matriz,
alternative="two.sided")

p-value = 0.006653

#     #     #

### --------------------------------------------------------------
### King penguin example, Fisher’s exact test, p. 81
### --------------------------------------------------------------

Input =("
Lower    43     7
Middle   44     6
Upper    49     1
")

row.names=1))

Matriz

fisher.test(Matriz,
alternative="two.sided")

p-value = 0.08963

alternative hypothesis: two.sided

#     #     #

### --------------------------------------------------------------
### Moray eel example, Fisher’s exact test, pp. 81
82
### --------------------------------------------------------------

Input =("

Site     G.moringa  G.vicinus
Grass    127        116
Sand      99         67
Border   264        161
")

row.names=1))

Matriz

fisher.test(Matriz,
alternative="two.sided")

p-value = 0.04438

alternative hypothesis: two.sided

#     #     #

### --------------------------------------------------------------
### Herons example, Fisher’s exact test, p. 82
### --------------------------------------------------------------

Input =("
Site          Heron  Egret
Vegetation    15     8
Shoreline     20     5
Water         14     7
Structures     6     1
")

row.names=1))

Matriz

fisher.test(Matriz,
alternative="two.sided")

p-value = 0.5491

alternative hypothesis: two.sided

#     #     #

Graphing the results

Graphing is discussed above in the “Chi-square Test of Independence” section.

### Similar tests – McNemar’s test

Care is needed in setting up the data for McNemar’s test.  For a before-and-after test, the contingency table is set-up as before and after as row and column headings, or vice-versa.  Note that the total observations in the contingency table is equal to the number of experimental units.  That is, in the following example there are 62 men, and the sum of the counts in the contingency table is 62.  If you set up the table incorrectly, you might end with double this number, and this will not yield the correct results.

#### McNemar’s test with data in a matrix

### --------------------------------------------------------------
### Dysfunction example, McNemar test, pp. 82
83
### --------------------------------------------------------------

Input =("
Row          After.no  After.yes
Before.no    46        10
Before.yes    0         6
")

row.names=1))

Matriz

mcnemar.test(Matriz, correct=FALSE)

McNemar's chi-squared = 10, df = 1, p-value = 0.001565

#     #     #

#### McNemar’s test with data in a data frame

### --------------------------------------------------------------
### Dysfunction example, McNemar test, pp. 82
83
###    Example using cross-tabulation
### --------------------------------------------------------------

Input =("
ED.before  ED.after  Count
no         no       46
no         yes      10
yes        no        0
yes        yes       6
")

Data.xtabs = xtabs(Count ~ ED.before + ED.after, data=Data)

Data.xtabs

ED.after

ED.before   no   yes

no   46    10

yes   0     6

mcnemar.test(Data.xtabs, correct=FALSE)

McNemar's chi-squared = 10, df = 1, p-value = 0.001565

#     #     #

### How to do the test

#### Fisher’s exact test with data as a data frame

### --------------------------------------------------------------
### Chipmunk example, Fisher’s exact test, SAS example, p. 83
###      Example using cross-tabulation
### --------------------------------------------------------------

Input =("
Distance    Sound   Count
10m        trill   16
10m        notrill  8
100m       trill    3
100m       notrill 18
")

Data.xtabs = xtabs(Count ~ Distance + Sound, data=Data)

Data.xtabs

Sound

Distance notrill trill

100m      18     3

10m        8    16

summary(Data.xtabs)

### Fisher’s exact test of independence

fisher.test(Data.xtabs,
alternative="two.sided")

p-value = 0.0006862

#     #     #

### --------------------------------------------------------------
### Bird example, Fisher’s exact test, SAS example, p. 84
###      Example using cross-tabulation
### --------------------------------------------------------------

Input =("

Bird    Substrate   Count
heron  vegetation  15
heron  shoreline   20
heron  water       14
heron  structures   6
egret  vegetation   8
egret  shoreline    5
egret  water        7
egret  structures   1
")

Data.xtabs = xtabs(Count ~ Bird + Substrate, data=Data)

Data.xtabs

Substrate

Bird    shoreline structures vegetation water

egret         5          1          8     7

heron        20          6         15    14

summary(Data.xtabs)

### Fisher’s exact test of independence

fisher.test(Data.xtabs,
alternative="two.sided")

p-value = 0.5491

alternative hypothesis: two.sided

#     #     #

### Power analysis

To calculate power or required samples, follow examples in the “Chi-square Test of Independence” section.

There, the result was

N = 1640.537    # Total observations

compared with the value in the Handbook of Ntotal =  1523 for this section.