Statistical Analysis: an Introduction using R/R/Matrices

Much statistical theory uses matrix algebra. While this book does not require a detailed understanding of matrices, it is useful to know a little about how R handles them.

Essentially, a matrix (plural: matrices) is the two dimensional equivalent of a vector. In other words, it is a rectangular grid of numbers, arranged in rows and columns. In R, a matrix object can be created by the matrix() function, which takes, as a first argument, a vector of numbers with which the matrix is filled, and as the second and third arguments, the number of rows and the number of columns respectively.

R can also use array objects, which are like matrices, but can have more than 2 dimensions. These are particularly useful for tables: a type of array containing counts of data classified according to various criteria. Examples of these "contingency tables" are the HairEyeColor and Titanic tables shown below.

As with vectors, the indexing operator [] can be used to access individual elements or sets of elements in a matrix or array. This is done by separating the numbers inside the brackets by commas. For example, for matrices, you need to specify the row index then a comma, then the column index. If the row index is blank, it is assumed that you want all the rows, and similarly for the columns.
Input:
m <- matrix(1:12, 3, 4)      #Create a 3x4 matrix filled with numbers 1 to 12
m                            #Display it!
m*2                          #Arithmetic, just like with vectors
m[2,3]                       #Pick out a single element (2nd row, 3rd column)
m[1:2, 2:4]                  #Or a range (rows 1 and 2, columns 2, 3, and 4.)
m[,1]                        #If the row index is missing, assume all rows
m[1,]                        #Same for columns
m[,2] <- 99                  #You can assign values to one or more elements
m                            #See!
###Some real data, stored as "arrays"
HairEyeColor                 #A 3D array
HairEyeColor[,,1]            #Select only the males to make it a 2D matrix
Titanic                      #A 4D array
Titanic[1:3,"Male","Adult",] #A matrix of only the adult male passengers
Result:
> m <- matrix(1:12, 3, 4)      #Create a 3x4 matrix filled with numbers 1 to 12
> m                            #Display it!
     [,1] [,2] [,3] [,4]
[1,]    1    4    7   10
[2,]    2    5    8   11
[3,]    3    6    9   12
> m*2                          #Arithmetic, just like with vectors
     [,1] [,2] [,3] [,4]
[1,]    2    8   14   20
[2,]    4   10   16   22
[3,]    6   12   18   24
> m[2,3]                       #Pick out a single element (2nd row, 3rd column)
[1] 8
> m[1:2, 2:4]                  #Or a range (rows 1 and 2, columns 2, 3, and 4.)
     [,1] [,2] [,3]
[1,]    4    7   10
[2,]    5    8   11
> m[,1]                        #If the row index is missing, assume all rows
[1] 1 2 3
> m[1,]                        #Same for columns
[1]  1  4  7 10
> m[,2] <- 99                  #You can assign values to one or more elements
> m                            #See!
     [,1] [,2] [,3] [,4]
[1,]    1   99    7   10
[2,]    2   99    8   11
[3,]    3   99    9   12
> ###Some real data, stored as "arrays"
> HairEyeColor                 #A 3D array
, , Sex = Male

       Eye
Hair    Brown Blue Hazel Green
  Black    32   11    10     3
  Brown    53   50    25    15
  Red      10   10     7     7
  Blond     3   30     5     8

, , Sex = Female

       Eye
Hair    Brown Blue Hazel Green
  Black    36    9     5     2
  Brown    66   34    29    14
  Red      16    7     7     7
  Blond     4   64     5     8

> HairEyeColor[,,1]            #Select only the males to make it a 2D matrix
       Eye
Hair    Brown Blue Hazel Green
  Black    32   11    10     3
  Brown    53   50    25    15
  Red      10   10     7     7
  Blond     3   30     5     8
> Titanic                      #A 4D array
, , Age = Child, Survived = No

      Sex
Class  Male Female
  1st     0      0
  2nd     0      0
  3rd    35     17
  Crew    0      0

, , Age = Adult, Survived = No

      Sex
Class  Male Female
  1st   118      4
  2nd   154     13
  3rd   387     89
  Crew  670      3

, , Age = Child, Survived = Yes

      Sex
Class  Male Female
  1st     5      1
  2nd    11     13
  3rd    13     14
  Crew    0      0

, , Age = Adult, Survived = Yes

      Sex
Class  Male Female
  1st    57    140
  2nd    14     80
  3rd    75     76
  Crew  192     20

> Titanic[1:3,"Male","Adult",] #A matrix of only the adult male passengers
     Survived
Class  No Yes
  1st 118  57
  2nd 154  14
  3rd 387  75


Notes edit