# 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:
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
```
###### 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
```
```

```
```    Survived
```
```
Class  No Yes

```
``` 1st 118  57
2nd 154  14
```
```
3rd 387  75
```