Last modified on 23 July 2009, at 20:06

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.

Crystal Clear app terminal.png Input:
  1. m <- matrix(1:12, 3, 4)      #Create a 3x4 matrix filled with numbers 1 to 12
    
  2. m                            #Display it!
    
  3. m*2                          #Arithmetic, just like with vectors
    
  4. m[2,3]                       #Pick out a single element (2nd row, 3rd column)
    
  5. m[1:2, 2:4]                  #Or a range (rows 1 and 2, columns 2, 3, and 4.)
    
  6. m[,1]                        #If the row index is missing, assume all rows
    
  7. m[1,]                        #Same for columns
    
  8. m[,2] <- 99                  #You can assign values to one or more elements
    
  9. m                            #See!
    
  10. ###Some real data, stored as "arrays"
    
  11. HairEyeColor                 #A 3D array
    
  12. HairEyeColor[,,1]            #Select only the males to make it a 2D matrix
    
  13. Titanic                      #A 4D array
    
  14. Titanic[1:3,"Male","Adult",] #A matrix of only the adult male passengers
    
Crystal Clear app kscreensaver.png 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


NotesEdit