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

Special Values in R Programming: A Quick Guide

There are some special values in R Programming language, namely, these are NA, Inf, -inf, NaN, and NULL.

Special Values in R Programming Language

For numeric variables, several formalized special values are used. The calculations involving special values often result in special values. Regarding statistics, the real-world phenomenon should not include a special value. Therefore, it is desirable to handle special values before performing any statistical, especially inferential analysis. On the other hand, functions in R result in errors or warnings when a variable contains special values.

The NA values in R (NA stands for Not Available) represent the missing observations. A missing value may occur due to the non-response of the respondent or may arise when the vector size is expanded. For example,

v = c(1, 5, 6)
v[5] = 4
v

## Output
[1]  1  5  6 NA  4

To learn about how to handle missing values in R, see the article: Handling Missing Values in R

Inf and -Inf values in R represent a too-big number, which occurs during computation. Inf is for the positive number and -Inf is for the negative number (both represent the positive infinity, and negative infinity, respectively). Inf or -Inf also results when a value or variable is divided by 0. For example,

2 ^ 1024
## Output
[1] Inf

-2^1024

## Output
[1] -Inf

1/0

## Output
[1] Inf

-Inf + 1e10

## Output
[1] -Inf
Special Values in R programming Language

Sometimes a computation will produce a result that makes little sense. In such cases, R often returns NaN (Not a Number). For example,

Inf - Inf
NaN
0/0

## Output

In R, the Null object is represented by the symbol NULL. It is often used as an argument in functions to represent that no value was assigned to the argument. Additionally, some functions may return NULL. Note that the NULL is not the same as NA, Inf, -Inf, or NaN.

Getting Information about Special Values

Also, look at the str(), typeof(), and the length of Inf, -Inf, NA, NaN, and Null.

It is worth noting that, the special values in numeric variables indicate values that are not an element of the mathematical set of real numbers. One can use is.finite() function to determine whether the values are regular values or special values. is.finite() function only accepts vector objects. for example,

is.finite(c(1, Inf, NaN, NA))

A function can be written to deal with every numerical column in a data frame. For example,

special <- function(x){
    if (is.numeric(x)){
        return(!is.finite(x))
    }else {
        return (is.na(x))
    }
}

sapply(airquality, special)
Special values in R programming

The user defined special() function will test each column of the data frame object (airquality). The function will each special value if the object is numeric, otherwise it only checks for NA.

R FAQs: Special Values in R Programming

https://itfeature.com

https://gmstat.com

Comparing Two Sample Means in R

Comparing Two Sample Means in R

One can easily compare two sample means in R, as in R language all the classical tests are available in the package stats. There are different comparison tests such as (i) one sample mean test, (ii) two independent sample means test, and (iii) dependent sample test. When population standard deviation is known, or sample size (number of observations in the sample) is large enough ($n\ge 30), tests related to normal distribution are performed.

Data for Two Sample Means

Consider the following data set on the “latent heat of the fusion of ice (cal/gm)” from Rice, 1995.

Method A79.9880.0480.0280.0480.0380.0380.0479.9780.05
80.0380.0280.0080.02
Method B80.0279.9479.9879.9779.9780.0379.9579.97

Let us draw boxplots to make a comparison between two these two methods. The comparison will help in checking the assumption of the independent two-sample test.

Note that one can read the data using the scan() function, create vectors, or even read the above data from data files such as *.txt and *.csv. In this tutorial, we assume vectors $A$ and $B$ for method A and method B.

A = c(79.98, 80.04, 80.02, 80.04, 80.03, 80.03, 80.04, 79.97, 80.05, 80.03, 80.02, 80.00, 80.02)
B = c(80.02, 79.94, 79.98, 79.97, 79.97, 80.03, 79.95, 79.97)

Draw a Boxplot of Samples

Let us draw boxplots for each method that indicate the first group tends to give higher results than the second one.

boxplot(A, B)
Comparing Two Sample Means in R

Comparing Two Sample Means in R using t.test() Function

The unpaired t-test (independent two-sample test) for the equality of the means can be done using the function t.test() in R Language.

t.test(A, B)
t.test in R Language

From the results above, one can see that the p-value = 0.006939 is less than 0.05 (level of significance) which means that on average both methods are statistically different from each other with reference to latent heat of fusion of ice.

Testing the Equality of Variances of Samples

Note that, the R language does not assume the equality of variances in the two samples. However, the F-test can be used to check/test the equality in the variances, provided that the two samples are from normal populations.

var.test(A, B)
Testing the equality of variances in R

From the above results, there is no evidence that the variances of both samples are statistically significant, as the p-value is greater than the 0.05 level of significance. It means that one can use the classical t-test that assumes the equality of the variances.

t.test(A, B, var.equa. = TRUE)

## Output
        Welch Two Sample t-test

data:  A and B
t = 3.2499, df = 12.027, p-value = 0.006939
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 0.01385526 0.07018320
sample estimates:
mean of x mean of y 
 80.02077  79.97875 

https://rfaqs.com

https://gmstat.com