Tulosmatriiseista

[viesti Survo-keskustelupalstalla (2001-2013)]

Kirjoittaja: Seppo Mustonen
Sähköposti:    -
Päiväys: 31.1.2005 14:32

Lokakuussa (2004) keskusteltiin matriisituloksien lisäämisestä
Survon tilastollisiin operaatiohin.
Oli heti selvää, miten se tehdään luonnostaan matriisi- tai
vektorimuotoisille tuloksille.
Enemmän miettimistä on tuottanut, kuinka toimia yksittäisten
tulosarvojen tallentamiseksi matriisimuotoon. Tällaisia ovat
esim. regressioanalyysissa jäännösvarianssi, selitysaste jne.

Olen nyt koemielessä päätymässä seuraavantapaiseen ratkaisuun,
jonka olen toteuttanut REGDIAG-modulissa.

Ensin normaali REGDIAG-tulostus (ei muutoksia):
MASK=-YXXXXX
REGDIAG DECA,CUR+1
Regression diagnostics on data DECA: N=48
Regressand Points    # of regressors=6 (Constant term included)
Condition number of scaled X: k=93.9679
Variable Regr.coeff. Std.dev.     t
Constant  3559.4913  516.31336     6.8941
100m      0.5425684  0.3063601     1.7710
L_jump    1.3614673  0.3024766     4.5011
Shot_put  1.1714600  0.2589412     4.5240
Hi_jump   0.9223284  0.2616501     3.5250
400m      1.3272355  0.3632046     3.6542
Variance of regressand Points=26131.99956 df=47
Residual variance=10607.97908 df=42
R=0.7983 R^2=0.6372 Durbin-Watson=1.246

Matriisimuotoisena REGDIAG on tuottanut tähän asti vain
regressiokertoimien vektorin REG.M.

Nyt saadaan tämän lisäksi matriisi REGS.M, jossa ovat sekä
regressiokertoimet että niiden keskivirheet:

MAT LOAD REGS.M
MATRIX REGS.M
regs(DECA)
///         Coeff Std.dev.
Constant 3559.491  516.313
100m        0.543    0.306
L_jump      1.361    0.302
Shot_put    1.171    0.259
Hi_jump     0.922    0.262
400m        1.327    0.363

Toinen lisäys on kertoimien korrelaatiokertoimet matriisina REG_CORR.M:

MAT LOAD REG_CORR.M
MATRIX REG_CORR.M
reg_corr(DECA)
///      Constant     100m   L_jump Shot_put  Hi_jump     400m
Constant  1.00000 -0.27523 -0.35079 -0.42986 -0.56665 -0.52450
100m     -0.27523  1.00000 -0.14836 -0.16006  0.32782 -0.38020
L_jump   -0.35079 -0.14836  1.00000  0.02031 -0.09030 -0.06848
Shot_put -0.42986 -0.16006  0.02031  1.00000 -0.11431  0.30353
Hi_jump  -0.56665  0.32782 -0.09030 -0.11431  1.00000  0.14695
400m     -0.52450 -0.38020 -0.06848  0.30353  0.14695  1.00000

Kuten aiemmin totesin, suosin korrelaatioita kovarianssien asemasta,
koska niitä pystyy välittömästi tulkitsemaan.
Kovarianssimatriisi on tietenkin tärkeä mahdollisissa jatkolaskelmissa
ja sen voi nyt laskea suoraan matriisitulona

MAT REGCOV=INV(RG.M(MSE))*DV(REGS.M(*,2))*REG_CORR.M*DV(REGS.M(*,2))

Sisällön näkeminen ei tuota ainakaan minulle minkäänlaista iloa,
koska numeeriset arvot riippuvat voimakkaasti muuttujien asteikoista:

LOADM REGCOV,12.123456789,CUR+1
INV(RG.M(MSE,1))*DV(REGS.M(*,2))*reg_corr(DECA)*DV(REGS.M(*,2))
             Constant         100m       L_jump     Shot_put
Constant 25.130091301 -0.004103942 -0.005164364 -0.005417669
100m     -0.004103942  0.000008848 -0.000001296 -0.000001197
L_jump   -0.005164364 -0.000001296  0.000008625  0.000000150
Shot_put -0.005417669 -0.000001197  0.000000150  0.000006321
Hi_jump  -0.007216368  0.000002477 -0.000000674 -0.000000730
400m     -0.009272033 -0.000003988 -0.000000709  0.000002691

              Hi_jump         400m
Constant -0.007216368 -0.009272033
100m      0.000002477 -0.000003988
L_jump   -0.000000674 -0.000000709
Shot_put -0.000000730  0.000002691
Hi_jump   0.000006454  0.000001316
400m      0.000001316  0.000012436

Äskeisessä matriisilausekkeessa esiintyy uusi matriisi RG.M,
joka kokoaa vektorin muotoon erinäisiä regressioanalysiin
liittyviä numeerisia tietoja. Niitä tarvitaan jatkolaskelmissa.

Matriisin RG.M sisällön saa esille MAT LOAD:illa näin:

MAT LOAD RG.M,1234567.123,CUR+1
MATRIX RG.M
REGDIAG statistics from data DECA
RG.M
///          REGDIAG
n             48.000 / # of cases
k              6.000 / # of regression coefficients
const          1.000 / 1 if constant term included, 0 otherwise
df            42.000 / n-k
Yvar       26132.000 / variance of regressand
SST      1228203.979 / total sum of squares
SSE       445535.121 / residual sum of squares
SSR       782668.858 / SST-SSE
MSE        10607.979 / mean square error
Resvar     10607.979 / MSE
R              0.798 / multiple correlation coefficient
R2             0.637 / R^2
kappa         93.968 / condition number
DW             1.246 / Durbin-Watson statistics

Matriisin alkioilla voi vapaasti laskeskella esim. tyyliin
              MAT_RG.M(SST)=1228203.9791665
MAT_RG.M(SSE)+MAT_RG.M(SSR)=1228203.9791665
ja on entistä mukavampaa tehdä sukroja, jotka jalostavat tilastollisten
operaatioiden tuloksia.

Alkioiden (rivien) perässä näkyvät sanalliset kommentit, joita en
ole tähän käsin kirjoittanut vaan ne ovat REGDIAG:in tuottamia ja
tulevat esiin matriisitulkin vastikään parannetulla MAT LOAD -
komennolla (mukana versiosta 2.23 lähtien).
Nuo kommentit kohentavat tämän "sekasikiö"-matriisin luettavuutta.

Vanhemmissa Survon versioissa sama matriisi tulostuu muodossa:
MAT LOAD RG.M
MATRIX RG.M
REGDIAG statistics from data DECA
/n: # of cases
/k: # of regression coefficients
/const: 1 if constant term included, 0 otherwise
/df: n-k
... (tässä 9 riviä poistettu)
/DW: Durbin-Watson statistics
RG.M
///       REGDIAG
n              48
k               6
const           1
df             42
... (tässä 9 riviä poistettu)
DW              1

eli ei (ainakaan tarkoituksellisesti) ole turmeltu mitenkään Survon
matriisitiedostojen rakennetta. Kommentit esiintyvät omina riveinään
ennen varsinaista matriisia, joka näkyvässä muodossa alkaa
///-riviltä.

Nämä uudenmuotoiset kommenttirivit ovat /-alkuisia, esim.

/const: 1 if constant term included, 0 otherwise

ja siinä ensimmäinen "sana" (merkkien / ja : välissä eli tässä const)
viittaa matriisin riviotsikkoon. Näin uusi MAT LOAD osaa asettaa
kommenttitekstin oikealle paikalleen (tässä const-rivin loppuun).

Vielä pienenä kaavamaisena kertauksena:
Talletetaan matriisi A, jolla on rivikommentteja:

MATRIX A
Tämä on yleinen kommentti 1.
Tämä on yleinen kommentti 2.
A
///  S1  S2  S3
R1   11  12  13
R2   21  22  23 / Tämä on rivin R2 kommentti.
R3   31  32  33 / Tämä on rivin R3 kommentti.
R4   41  42  43

MAT SAVE A / talletus
MAT LOAD A / uusimmalla versiolla
MATRIX A
Tämä on yleinen kommentti 1.
Tämä on yleinen kommentti 2.
A
///            S1       S2       S3
R1             11       12       13
R2             21       22       23 / Tämä on rivin R2 kommentti.
R3             31       32       33 / Tämä on rivin R3 kommentti.
R4             41       42       43

Kun matriisilla lasketaan, kommentit (luonnollisista syistä) häipyvät,
mutta rivi- sarakeotsikot entiseen tapaan kulkevat mukana:

Esimerkki:
MAT B=A'*A         / *B~A'*A S3*3
MAT LOAD B
MATRIX B
A'*A
///            S1       S2       S3
S1           3204     3308     3412
S2           3308     3416     3524
S3           3412     3524     3636

                       * * *

Uskon, että tätä uutta matriisin rivien kommentointitapaa tullaan
hyödyntämään muissakin yhteyksissä, koska se edelleen parantaa
matriisien luettavuutta.

Odottelen survoilijoiden kannanottoja vielä jonkin aikaa, ennenkuin
yritän rakentaa vastaavia lisäyksiä muihin Survon tilastollisiin
operaatioihin.

-Seppo

Vastaukset:

Survo-keskustelupalstan (2001-2013) viestit arkistoitiin aika ajoin sukrolla, joka automaattisesti rakensi viesteistä (yli 1600 kpl) HTML-muotoisen sivukokonaisuuden. Vuoden 2013 alusta Survo-keskustelua on jatkettu entistäkin aktiivisemmin osoitteessa forum.survo.fi. Tervetuloa mukaan!

Etusivu  |  Keskustelu
Copyright © Survo Systems 2001-2013. All rights reserved.
Updated 2013-06-15.