Statistical Computing and Graphics in R

# Matrices

## Introduction: Matrices in R

While dealing with matrices in R, all columns in the matrix must have the same mode (numeric, character, etc.), and the same length. A matrix is a two-dimensional rectangular data set. It can be created using a vector input to the matrix( ) functions.

The general syntax of creating matrices in R is:

matrix_name <- matrix(vector, nrow = r, ncol = c,
byrow = FALSE, dimnames = list(char_vector_rownames,
char_vector_colnames)
)

byrow = TRUE indicates that the matrix will be filled by rows.

dimnames provides optional labels for the columns and rows.

## Creating Matrices in R

Following the general syntax of the matrix( ) function, let us create a matrix from a vector of the first 20 numbers.

### Example 1:

# Generate matrix having 5 rows and 4 columns
y1 <- matrix (1 : 20, nrow = 5, ncol = 4) ; y1

# Output
> y1
[,1] [,2] [,3] [,4]
[1,] 1 6 11 16
[2,] 2 7 12 17
[3,] 3 8 13 18
[4,] 4 9 14 19
[5,] 5 10 15 20
y2 <- matrix (1 : 20, nrow = 5, ncol = 4, byrow = FALSE); y2

# Output
> y2
[,1] [,2] [,3] [,4]
[1,] 1 6 11 16
[2,] 2 7 12 17
[3,] 3 8 13 18
[4,] 4 9 14 19
[5,] 5 10 15 20
y3 <- matrix (1 : 20, nrow = 5, ncol = 4, byrow = TRUE) ; y3

# Output
> y3
[,1] [,2] [,3] [,4]
[1,] 1 2 3 4
[2,] 5 6 7 8
[3,] 9 10 11 12
[4,] 13 14 15 16
[5,] 17 18 19 20

### Example 2:

elements <- c(11, 23, 29, 67)
rownames <- c("R1", "R2")
colnames <- c("C1", "C2")
m1 <- matrix(elements, nrow = 2, ncol = 2, byrow = TRUE,
dimnames = list(rownames, colnames)
)

# Output
> m1
C1 C2
R1 11 23
R2 29 67

Try

> nrow = 4 and ncol = 1, byrow = FALSE

Note the difference. You may also have some errors related to the number of rows or columns. Therefore, if you change the number of rows or columns then ensure that you have the same number of row names and column names too.

#### Matrix Operations in R

In the R language, there are some operators and functions that can be used to perform computation on one or more matrices. Some basic matrix operations in R are:

The following are some examples related to these operators and matrix functions.

m1 <- matrix(c(11, 23, 9, 35), nrow = 2)
m2 <- matrix(c(5, 19, 11, 20), nrow =2)
m3 <- m1 + m2
m4 <- m1 - m2
m5 <- m1 %*% m2
m6 <- m1 / m2

m1t <- t(m1)
m1tminv <- solve(m1t %*% m1)
diag(m1tminv)

# Output

> m1
[,1] [,2]
[1,]   11    9
[2,]   23   35
> m2
[,1] [,2]
[1,]    5   11
[2,]   19   20
> m3
[,1] [,2]
[1,]   16   20
[2,]   42   55
> m4
[,1] [,2]
[1,]    6   -2
[2,]    4   15
> m5
[,1] [,2]
[1,]  226  301
[2,]  780  953
> m6
[,1]      [,2]
[1,] 2.200000 0.8181818
[2,] 1.210526 1.7500000
> m1t
[,1] [,2]
[1,]   11   23
[2,]    9   35
> m1tminv
[,1]        [,2]
[1,]  0.04121954 -0.02853175
[2,] -0.02853175  0.02051509
> diag(m1tminv)
[1] 0.04121954 0.02051509


Some other important functions can be used to perform some required computations on matrices in R. These matrix operations in R are described below for matrix $X$. You can use your matrix.

Consider we have a matrix X with elements.

X <- matrix(1:20, nrow = 4, ncol = 5)
X

#### Obtaining $\beta$’s using Matrices in R

Consider we have a dataset that has a response variable and few regressors. There are many ways to create data (or variables), such as one can create a vector for each variable, a data frame for all of the variables, matrices, or can read data stored in a file.

Here we try it using vectors, then bind the vectors where required.

y  <- c(5, 6, 7, 9, 8, 4, 3, 2, 1, 6, 0, 7)
x1 <- c(4, 5, 6, 7, 8, 3, 4, 9, 9, 8, 7, 5)
x2 <- c(10, 22, 23, 10, 11, 14, 15, 16, 17, 12, 11, 17)
x  <- cbind(1, x1, x2)

The cbind( ) function is used to create a matrix x. Note that 1 is also bound to get the intercept term (the model with the intercept term). Let us compute $\beta$’s from OLS using matrix functions and operators.

xt <- t(x)
xtx <- xt %*% x
xtxinv <- solve(xtx)
xty <- xt %*% y
b <- xtxinv %*% xty

The output is

> x
x1 x2
[1,] 1  4 10
[2,] 1  5 22
[3,] 1  6 23
[4,] 1  7 10
[5,] 1  8 11
[6,] 1  3 14
[7,] 1  4 15
[8,] 1  9 16
[9,] 1  9 17
[10,] 1  8 12
[11,] 1  7 11
[12,] 1  5 17
> xt
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]
1    1    1    1    1    1    1    1    1     1     1     1
x1    4    5    6    7    8    3    4    9    9     8     7     5
x2   10   22   23   10   11   14   15   16   17    12    11    17
> xtx
x1   x2
12   75  178
x1  75  515 1103
x2 178 1103 2854
> xtxinv


Data Structure Matrix in R

visit https://gmstat.com

## Matrix | Data Structure for Matrix in R

Question: What is a matrix in R?
Answer: In R language matrices are two-dimensional arrays of elements all of which are of the same type, for example, numbers, character strings or logical values.

Matrices may be constructed using the built-in function “matrix”, which reshapes its first argument into a matrix having a specified number of rows as second argument and number of columns as the third matrix.

Question: Give an example of how the matrix is constructed in R language?
Answer: A 3 by 3 matrix (3 rows and 3 columns) matrix may be constructed such as:

> matrix(1:9, 3, 3)
> matrix(c(1,2,3,4,5,6,7,8,9), 3, 3)matrix(runif(9), 3,3)

First, two commands construct a matrix of 9 elements having 3 rows and 3 columns consisting numbers from 1 up to 9. The third command makes a matrix of 3 rows and 3 columns with random numbers from a uniform distribution.

Question: How the matrix elements are filled?
Answer: A matrix is filled by columns, unless the optional argument byrow is set to TRUE as an argument in matrix command, for example

> matrix(1:9, 3, 3, byrow=TRUE)

Question: Can matrix be stored in R?
Answer: Any matrix can be stored in R such as

> m <- matrix(1:9, 3, 3)
> mymatrix <- matrix( rnorm(16), nrow=4 )

Matrices are stored in “m” and “mymatrix” object. The second command constructs a matrix having 16 elements with 4 rows from a normal distribution having mean 0 and variance 1.

Question: what is the use of dim command in R?
Answer: The dim (dimension) is an attribute of the matrix in R, which tells the number of rows and the number of columns of a matrix, for example,

> dim(mymatrix)

This will result in output showing 4  4, meaning that 4 rows and 4 column matrix.

Question: Can we name rows of a matrix in R?
Answer: Yes in R language we can name rows of a matrix according to ones requirements, such as

> rownames(mymatrix) <- c(“x1”, “x2”, “x3”, “x4”)
> mymatrix

Question: Can column names be changes or updated in R?
Answer: The procedure is the same as changing of rows name. For this purpose colnames command is used, for example

> colnames(mymatrix)<-c(“A”, “B”, “C”, “D”)
> mymatrix

Question: What is the purpose of attributes command for the matrix in R?
Answer: The attributes function can be used to get information about the dimension of the matrix and dimnames (dimension names). For example;

> attributes(mymatrix)

Scroll to top