Matrix Multiplication in R: A Quick Tutorial

Introduction Matrix Multiplication in R

Matrix multiplication is a fundamental operation in linear algebra, and R provides efficient functions. The matrix multiplication in R can be done easily. For this purpose, the %*% operator is used for general matrix multiplication. An $n\times 1$ or $1 \times n$ vector (also called matrix) may be used as an $ n$ vector. In other words, vectors that occur in matrix multiplication expressions are automatically promoted to row (or column) vectors, whichever is multiplicatively coherent, if possible.

Scalar Multiplication

The * operator may be used for multiplying a matrix by a scalar quantity. The scalar value is multiplied by each element of the matrix.

m <- matrix(1:9, nrow = 3)
m <- 2 * m
m
Matrix Multiplication in R

From the above output, it can be seen that each element of the original matrix is multiplied by 2.

Element-wise Multiplication

If $A$ and $B$ are two square matrices of the same size, then the element-wise multiplication between matrices $A$ and $B$ can be performed using the * operator. In element-wise multiplication of the matrices, the corresponding elements of both matrices will be multiplied (provided that the matrices have the same dimension).

A <- matrix(1:9, nrow = 3)
A
## Ouput
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9

B <- matrix(10:18, nrow = 3)
B

## Output
     [,1] [,2] [,3]
[1,]   10   13   16
[2,]   11   14   17
[3,]   12   15   18

A * B

## Output
     [,1] [,2] [,3]
[1,]   10   52  112
[2,]   22   70  136
[3,]   36   90  162

Matrix Multiplication in R

The matrix multiplication in R can be done easily. The general multiplication of matrices (matrix product) can be performed using the %*% operator. The matrix multiplication must satisfy the condition that the number of columns in the first matrix is equal to the number of rows in the second matrix. Suppose, if matrix $A$ has $m$ rows and $n$ columns and matrix $B$ has $n$ rows and $x$ columns, then the multiplication of these matrices will result in with dimension of $n times x$. Consider the following example of matrix multiplication in R language.

A <- matrix(1:9, nrow = 3)
B <- matrix(10:18, nrow = 3)

A %*% B
Matrix multiplication in R Language

Note the difference in output between A*B and A%*%B.

Suppose, $x$ is a vector, then the quadratic form of the matrices is

x <- c(5, 6, 7)
A <- matrix(1:9, nrow = 3)
x %% A %% x

## Output
     [,1]
[1,] 1764

Splitting the above multiplication procedure, one can easily understand how the matrices and vectors are multiplied.

x%*%A
## Output
[,1] [,2] [,3]
[1,]   38   92  146

x%*%A%*%x
## Output
     [,1]
[1,] 1764

The crossprod() in R

The function crossprod() forms “crossproducts” meaning that crossprod(X, y) is the same as t(X) %*% y. The crossprod() operation is more efficient than the t(X) %*%y.

crossprod(x, A)
     [,1] [,2] [,3]
[1,]   38   92  146

The cross product of $x$, $A$, the` (crossprod(x, A)) is equivalent to x%*%A, and crossprod(x%*%A, x) is equivalent to x%*%A%*%x.

Multiplication of Large Matrices

For larger matrices, the Matrix package may be used for optimized performance. The Matrix package also helps for working with sparse matrices or matrices with special structures.

Some Important Points about Matrices

  • Be careful about matrix dimensions to avoid errors.
  • Be careful about the use of operators * and %*%.
  • Be careful about the order of the matrices during multiplication (A%*%B, or B%*%A).
  • Explore other matrix operations like addition, subtraction, and transposition using R functions.
  • The dim() function helps identify the dimensions of a matrix.
  • For larger matrices, consider using the solve() function for matrix inversion or the eigen() function for eigenvalue decomposition.
Frequently Asked Questions About R

https://itfeature.com

https://gmstat.com

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 function matrix() in R.

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 function matrix() in R, 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
[,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
[,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
[,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
   C1 C2
R1 11 23
R2 29 67

Try the above example 2 with the following values set to arguments as below

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 Language

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:

Matrix OperationOperator/ Function
Add/ Subtract+, −
Multiply%*%
Transposet( )
Inversesolve ( )
Extract Diagonaldiag( ) It is described at the end too
Determinantdet( )

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
Introduction: Matrices in R

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
FunctionDescription
rowSums(X)Compute the average value of each column of the Matrix $X$
colSums(X)Compute the average value of each row of the Matrix $X$
rowMeans(X)Compute the average value of each column of the Matrix $X$
colMeans(X)Compute the average value of each column of the Matrix $X$
diag(X)Extract diagonal elements of the Matrix $X$, or
Create a Matrix that has required diagonal elements such as diag(1:5), diag(5),
crossprod(X,X)Compute X‘X. It is a shortcut of t(X)%*%X

Obtaining Regression Coefficients 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. We will use matrices to obtain the regression coefficients.

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

#Output
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
xty
b
Computing regression coefficient, matrices in R

Data Structure Matrix in R

visit https://gmstat.com

Matrix in R Language (2015): Key Secrets

The matrix is an important data type in R language similar to the data frame. It has two dimensions as the arrangement of elements is in rows and columns.

Matrix In R Language

Question: What is a matrix in R Language?
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 the second argument and a number of columns as the third matrix.

Creating a Matrix in R Language

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 of 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 the 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 )
Matrix in R Language

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

Attributes of Matrix Object in R

Question: What is the use of the dim command in R?
Answer: The dim (dimension) is an attribute of the matrix in R language, 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 4 rows and 4 column matrix.

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

rownames(mymatrix) &lt;- c("x1", "x2", "x3", "x4")
mymatrix

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

colnames(mymatrix)&lt;-c("A", "B", "C", "D")
mymatrix

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

attributes(mymatrix)

In summary, the primary function for creating a matrix in R language is matrix(). It takes a few arguments:

  • data: This is a vector containing the elements for the matrix.
  • nrow: The number of rows in the matrix.
  • ncol: The number of columns in the matrix.

FAQs about Matrices in R

  1. How to create a matrix in R?
  2. How elements are filled in R?
  3. How to convert a data object to a matrix object in R?
  4. How different attributes of a matrix in R can be checked?
  5. How matrices can be stored in a variable?
  6. How one can name the rows and columns of a matrix in R?
  7. What is the difference between dim and dimnames commands?
  8. How one can create a matrix of order 3 by 3 (3 rows and 3 columns) with elements from a probability Distribution.
  9. What is the primary function of matrix() function in R Language.

https://itfeature.com

https://gmstat.com