linear_algebra_stats

Simple Linear Algebra Functions for Statistics

Description

‘broadcast’ provides some simple Linear Algebra Functions for Statistics:
cinv();
sd_lc().


Usage

cinv(x)

sd_lc(X, vc, bad_rp = NaN)

Arguments

x a real symmetric positive-definite square matrix.
X a numeric (or logical) matrix of multipliers/constants
vc the variance-covariance matrix for the (correlated) random variables.
bad_rp if vc is not a Positive (semi-) Definite matrix, give here the value to replace bad standard deviations with.

Details

cinv()
cinv() computes the Choleski inverse of a real symmetric positive-definite square matrix.

sd_lc()
Given the linear combination X %*% b, where:

  • X is a matrix of multipliers/constants;

  • b is a vector of (correlated) random variables;

  • vc is the symmetric variance-covariance matrix for b;

sd_lc(X, vc) computes the standard deviations for the linear combination X %*% b, without making needless copies.
sd_lc(X, vc) will use much less memory than a base ‘R’ approach.
sd_lc(X, vc) will usually be faster than a base ‘R’ approach (depending on the Linear Algebra Library used for base ‘R’).


Value

For cinv():
A matrix.

For sd_lc():
A vector of standard deviations.

References

John A. Rice (2007), Mathematical Statistics and Data Analysis (6th Edition)

See Also

chol, chol2inv

Examples

library("broadcast")



vc <- datasets::ability.cov$cov
X <- matrix(rnorm(100), 100, ncol(vc))

solve(vc)
##              general       picture        blocks         maze       reading
## general  0.082259001 -0.0312406436 -7.750932e-03 -0.013309494 -2.061705e-02
## picture -0.031240644  0.2369906996 -2.484938e-02  0.017844845  8.603286e-04
## blocks  -0.007750932 -0.0248493822  1.344272e-02 -0.012544830 -3.802671e-05
## maze    -0.013309494  0.0178448450 -1.254483e-02  0.101625400  5.508423e-03
## reading -0.020617049  0.0008603286 -3.802671e-05  0.005508423  5.713620e-02
## vocab   -0.002420800  0.0019394999 -1.157864e-03 -0.002857265 -2.406969e-02
##                vocab
## general -0.002420800
## picture  0.001939500
## blocks  -0.001157864
## maze    -0.002857265
## reading -0.024069692
## vocab    0.020323179
cinv(vc) # faster than `solve()`, but only works on positive definite matrices
##              [,1]          [,2]          [,3]         [,4]          [,5]
## [1,]  0.082259001 -0.0312406436 -7.750932e-03 -0.013309494 -2.061705e-02
## [2,] -0.031240644  0.2369906996 -2.484938e-02  0.017844845  8.603286e-04
## [3,] -0.007750932 -0.0248493822  1.344272e-02 -0.012544830 -3.802671e-05
## [4,] -0.013309494  0.0178448450 -1.254483e-02  0.101625400  5.508423e-03
## [5,] -0.020617049  0.0008603286 -3.802671e-05  0.005508423  5.713620e-02
## [6,] -0.002420800  0.0019394999 -1.157864e-03 -0.002857265 -2.406969e-02
##              [,6]
## [1,] -0.002420800
## [2,]  0.001939500
## [3,] -0.001157864
## [4,] -0.002857265
## [5,] -0.024069692
## [6,]  0.020323179
all(round(solve(vc), 6) == round(cinv(vc), 6)) # they're the same
## [1] TRUE

sd_lc(X, vc)
##   [1] 34.913878 27.847927 35.331131  9.818093 30.045419  5.879151 10.245644
##   [8] 45.774617  5.150161  7.602367 24.074632 29.898732 19.431562 32.562451
##  [15] 20.664020 48.652286 36.255354 25.567332  3.008721 46.212820 52.072411
##  [22] 38.056018 21.966417  3.703960  1.667624  8.557585  7.132576 38.839428
##  [29]  5.078556  8.504006  5.384097  3.536448 21.398998 22.375084 12.750023
##  [36] 24.179170 26.590789 65.952004 57.860485 33.548203 38.576670 56.606698
##  [43] 17.472532 40.075725 32.755641 46.474669 34.892535 16.961959 38.131369
##  [50] 35.285377 93.860562 18.344462  4.641430 51.914589  7.432380 18.582089
##  [57]  5.470416  2.822052 40.117004  7.278552  9.230762 15.925915 25.538102
##  [64] 21.910158 42.994536 24.431041 14.181574 52.088849 26.207527 20.740146
##  [71] 11.847675  7.165370 14.500692 14.487769 24.932095 39.562579  3.066526
##  [78] 43.423733 47.223268 84.800533 17.004167  5.745362 47.631787 54.606094
##  [85] 21.393211 18.675025 34.915194 42.034602 18.957011 29.017582 23.364039
##  [92] 21.299154 54.071425  8.536067 14.828922 14.180847  5.194646 22.048222
##  [99] 10.042747 20.701970