How to turn a vector into a matrix
This is the same method we used to create the mean matrix in Mean Vectors and Matrices.
Consider the Vector v
mat v = (3,7,-2) mat u = J(4,1,1) mat X = u*v mat lis X X[4,3] c1 c2 c3 r1 3 7 -2 r2 3 7 -2 r3 3 7 -2 r4 3 7 -2
Dividing Column Elements
In this example we will divide the elements in Column 1 by 2 and the elements in Column 2 by 3.
Consider the Matrix X
Create a Vector with Division Elements
Create a Diagonal Matrix of the Elements of v
Take the Inverse of the Diagonal Matrix
Compute X * D-1
mat X = (4,9\10,12\2,9) mat v = (2,3) mat list v v[1,2] c1 c2 r1 2 3 mat D = diag(v) mat list D symmetric D[2,2] c1 c2 c1 2 c2 0 3 mat D = syminv(D) mat list D symmetric D[2,2] c1 c2 c1 .5 c2 0 .33333333 mat Q = X*D mat list Q Q[3,2] c1 c2 r1 2 3 r2 5 4 r3 1 3 /* quick way with one command */ mat Q2 = X*syminv(diag(v)) mat list Q2 Q2[3,2] c1 c2 r1 2 3 r2 5 4 r3 1 3
Compute the Square Root of the Elements of a Diagonal Matrix
Stata & Mata Side-by-side
Stata Mata mat D = (64,0,0\0,144,0\0,0,20) : D = (64,0,0\0,144,0\0,0,20) mat list D : D symmetric D[3,3] c1 c2 c3 r1 64 r2 0 144 r3 0 0 20 mat S = cholesky(D) : S = sqrt(D) mat list S : S symmetric S[3,3] c1 c2 c3 r1 8 r2 0 12 r3 0 0 4.472136
Using Stata
mat C = (7, -2.5\-2.5,1) mat list C, title(covariance matrix) symmetric S[2,2]: covariance matrix c1 c2 c1 7 c2 -2.5 1 mat S = diag(vecdiag(C)) mat S = cholesky(S) mat list S /* diagonal matrix of standard deviations */ symmetric S[2,2] c1 c2 c1 2.6457513 c2 0 1 mat R = syminv(S)*C*syminv(S) mat list R symmetric R[2,2] c1 c2 c1 1 c2 -.94491118 1Now for the really fast way.
mat R = corr(C) mat list R symmetric R[2,2] c1 c2 c1 1 c2 -.94491118 1
mat X = (32) mat list X symmetric X[1,1] c1 r1 32 display "X = ", X X = type mismatch /* using the el function */ scalar x = el(X,1,1) display "x = ", x x = 32 /* also try this */ scalar z = X[1,1] display "z = ", z z = 32 /* matrix Y must exist */ mat Y = (0) mat list Y symmetric Y[1,1] c1 r1 0 mat Y[1,1] = x mat list Y symmetric Y[1,1] c1 r1 32
Using Stata
mat X = (3,9,17,24\7,8,11,25\6,5,13,29\4,7,15,32\7,9,13,24\8,8,1,23\7,9,12,23) mat list X X[7,4] c1 c2 c3 c4 r1 3 9 17 24 r2 7 8 11 25 r3 6 5 13 29 r4 4 7 15 32 r5 7 9 13 24 r6 8 8 1 23 r7 7 9 12 23 mat u2=(1,0,0\1,0,0\1,0,0\0,1,0\0,1,0\0,0,1\0,0,1) mat list u2 u2[7,3] c1 c2 c3 r1 1 0 0 r2 1 0 0 r3 1 0 0 r4 0 1 0 r5 0 1 0 r6 0 0 1 r7 0 0 1 /* compute column sums for each group */ mat t=u2'*X mat list t t[3,4] c1 c2 c3 c4 c1 16 22 41 78 c2 11 16 28 56 c3 15 17 13 46 /* compute the n for each group */ mat n = u2'*u2 mat list n symmetric n[3,3] c1 c2 c3 c1 3 c2 0 2 c3 0 0 2 /* compute column means for each group */ mat m = syminv(n)*t mat list m m[3,4] c1 c2 c3 c4 c1 5.3333333 7.3333333 13.666667 26 c2 5.5 8 14 28 c3 7.5 8.5 6.5 23 /* compute mean matrix containing the column means for each group */ mat M = u2*m mat list M M[7,4] c1 c2 c3 c4 r1 5.3333333 7.3333333 13.666667 26 r2 5.3333333 7.3333333 13.666667 26 r3 5.3333333 7.3333333 13.666667 26 r4 5.5 8 14 28 r5 5.5 8 14 28 r6 7.5 8.5 6.5 23 r7 7.5 8.5 6.5 23
Stata & Mata Side-by-side
Stata Mata mat x = (3\6\9\8\4\8\6\7) : x = (3\6\9\8\4\8\6\7) mat y = (4\4\5\6\5\6\7\5) : y = (4\4\5\6\5\6\7\5) scalar n = rowsof(x) : xy = x,y mat u = J(n,1,1) /* deviation scores */ mat x = x - u*((u'*x)/n) mat y = y - u*((u'*y)/n) mat xy = x,y /* variance-covariance matrix */ mat cov = (xy'*xy)/(n-1) mat c = corr(cov) : c = correlation(xy, 1) display c[2,1] : c[1,2] .41753744 .4175374443
Multivariate Course Page
Phil Ender, 15jul07, 27oct05, 11oct05, 30Jun98