* do-file for Additional multivariate exercise 10, VHM 802, Winter 2023
version 17 /* works also with versions 14-16 */
set more off
cd "r:\

import delimited sparrow.csv, clear
pca total_length-l_keel_sternum
predict scor1-scor5, score
matrix define eigenval=e(Ev)
matrix define load=e(L)
matrix define corr=e(C)

* Q1
foreach var of varlist total_length-l_keel_sternum {
  egen `var's=std(`var')
  }
mkmat total_lengths-l_keel_sternums, matrix(sdata)
matrix define scomat = sdata*load
* matrix list scomat /* too large to meaningfully display and compare with score vectors */
svmat scomat
gen diffsco1=scor1-scomat1
sum diffsco1 // essentially 0

* Q2
sum scor1-scor5, d // the variances match the eigenvalues

* Q3
pwcorr scor1-scor5 // correlations are zero (to four decimals, at least)

* Q4
matrix define one = (1, 1, 1, 1, 1)
matrix define sumev=eigenval*(one')
matrix list sumev // equals 5

* Q5, Q6
matrix define load2=load*(load')
matrix list load2 // diagonal values of 1, off-diagonal values of 0 (up to rounding error)

* Q7
forvalues i=1(1)5 {
  matrix define evev`i'=eigenval[1,`i']*load[1..5,`i']
}
matrix define diffeigenval=corr*load-(evev1,evev2,evev3,evev4,evev5)
matrix list diffeigenval // all 0 (up to rounding error)
