Generalized inverse"

knitr::opts_chunk$set(
  warning = FALSE,
  message = FALSE,
  fig.height = 5,
  fig.width = 5
)
options(digits=4)
par(mar=c(5,4,1,1)+.1)

In matrix algebra, the inverse of a matrix is defined only for square matrices, and if a matrix is singular, it does not have an inverse.

The generalized inverse (or pseudoinverse) is an extension of the idea of a matrix inverse, which has some but not all the properties of an ordinary inverse.

A common use of the pseudoinverse is to compute a 'best fit' (least squares) solution to a system of linear equations that lacks a unique solution.

library(matlib)

Construct a square, singular matrix [See: Timm, EX. 1.7.3]

A <-matrix(c(4, 4, -2,
             4, 4, -2,
            -2, -2, 10), nrow=3, ncol=3, byrow=TRUE)
det(A)

The rank is 2, so inv(A) wont work

R(A)

In the echelon form, this rank deficiency appears as the final row of zeros

echelon(A)

inv() will throw an error

try(inv(A))

A generalized inverse does exist for any matrix, but unlike the ordinary inverse, the generalized inverse is not unique, in the sense that there are various ways of defining a generalized inverse with various inverse-like properties. The function matlib::Ginv() calculates a Moore-Penrose generalized inverse.

(AI <- Ginv(A))

We can also view this as fractions:

Ginv(A, fractions=TRUE)

Properties of generalized inverse (Moore-Penrose inverse)

The generalized inverse is defined as the matrix $A^-$ such that

A %*% AI %*% A
AI %*% A %*% AI

In addition, both $A * A^-$ and $A^- * A$ are symmetric, but neither product gives an identity matrix, A %*% AI != AI %*% A != I

zapsmall(A %*% AI)
zapsmall(AI %*% A)

Rectangular matrices

For a rectangular matrix, $A^- = (A^{T} A)^{-1} A^{T}$ is the generalized inverse of $A$ if $(A^{T} A)^-$ is the ginv of $(A^{T} A)$ [See: TIMM: EX 1.6.11]

A <- cbind( 1, matrix(c(1, 0, 1, 0, 0, 1, 0, 1), nrow=4, byrow=TRUE))
A

This $4 \times 3$ matrix is not of full rank, because columns 2 and 3 sum to column 1.

R(A)

(AA <- t(A) %*% A)
(AAI <- Ginv(AA))

The generalized inverse of $A$ is $(A^{T} A)^- A^{T}$, AAI * t(A)

AI <- AAI  %*%  t(A)

Show that it is a generalized inverse:

A %*% AI %*% A
AI %*% A %*% AI


Try the matlib package in your browser

Any scripts or data that you put into this service are public.

matlib documentation built on April 4, 2018, 5:03 p.m.