We are using here the Arthritis dataset from the package vcd. The data represent a double-blind clinical trial of new treatments for rheumatoid arthritis.
library(vcd)
head(Arthritis) # top few observations from the data
## ID Treatment Sex Age Improved
## 1 57 Treated Male 27 Some
## 2 46 Treated Male 29 None
## 3 77 Treated Male 30 None
## 4 17 Treated Male 32 Marked
## 5 36 Treated Male 46 Marked
## 6 23 Treated Male 58 Marked
xtabs() can be used to generate multidimensional tables based on three or more categoricals variables.
mytable <- xtabs(~ Treatment+Sex+Improved, data=Arthritis)
mytable
## , , Improved = None
##
## Sex
## Treatment Female Male
## Placebo 19 10
## Treated 6 7
##
## , , Improved = Some
##
## Sex
## Treatment Female Male
## Placebo 7 0
## Treated 5 2
##
## , , Improved = Marked
##
## Sex
## Treatment Female Male
## Placebo 6 1
## Treated 16 5
Also, we can use table() function to generate multidimensional tables.
Here we get the cell frequencies for the three-way classification. Here the ftable() function can be used to print a more compact and attractive version of the table.
The ftable() function can be used to print multidimensional tables in a compact and attarctive manner.
ftable(mytable)
## Improved None Some Marked
## Treatment Sex
## Placebo Female 19 7 6
## Male 10 0 1
## Treated Female 6 5 16
## Male 7 2 5
The margin.table(), prop.table(), and addmargins() functions extend naturally to more than two dimensionals.
margin.table(mytable, 1)
## Treatment
## Placebo Treated
## 43 41
Here we get the marginal frequencies for the Treatment. * Treatment is referred to by index 1
margin.table(mytable, 2)
## Sex
## Female Male
## 59 25
margin.table(mytable, 2)
## Sex
## Female Male
## 59 25
Here we get the marginal frequencies for the Sex and Improved. * Sex is referred to by index 2 * Improved is referred to by index 3
margin.table(mytable, c(1,3))
## Improved
## Treatment None Some Marked
## Placebo 29 7 7
## Treated 13 7 21
Here we get the marginal frequencies for the Treatment \(\times\) Improved classification.
Improved proportions for Treatment \(\times\) Sex
ftable(prop.table(mytable, c(1,2)))
## Improved None Some Marked
## Treatment Sex
## Placebo Female 0.59375000 0.21875000 0.18750000
## Male 0.90909091 0.00000000 0.09090909
## Treated Female 0.22222222 0.18518519 0.59259259
## Male 0.50000000 0.14285714 0.35714286
The proportion of patients with None, Some and Marked improvement for each Treatment \(\times\) Sex combination.
ftable(addmargins(prop.table(mytable, c(1, 2)), 3))
## Improved None Some Marked Sum
## Treatment Sex
## Placebo Female 0.59375000 0.21875000 0.18750000 1.00000000
## Male 0.90909091 0.00000000 0.09090909 1.00000000
## Treated Female 0.22222222 0.18518519 0.59259259 1.00000000
## Male 0.50000000 0.14285714 0.35714286 1.00000000
Here we add a sum margin over the third index.
We can get the percentages instead of proportions, simply multiply the resulting table by 100.
ftable(addmargins(prop.table(mytable, c(1, 2)), 3))*100
## Improved None Some Marked Sum
## Treatment Sex
## Placebo Female 59.375000 21.875000 18.750000 100.000000
## Male 90.909091 0.000000 9.090909 100.000000
## Treated Female 22.222222 18.518519 59.259259 100.000000
## Male 50.000000 14.285714 35.714286 100.000000