Re: Matriisien rivi- ja sarakeotsikoista

[vastaus aiempaan viestiin]

Kirjoittaja: Kimmo Vehkalahti
Sähköposti:    -
Päiväys: 16.2.2005 19:46

Teki mieli jatkaa vielä hieman rivi- ja sarakeotsikoista.

Otan Sepon esitelmästä http://www.helsinki.fi/survo/matrix99.html 
regressioanalyysiin liittyvän esimerkin (suomenkieliset tekstit ovat
minun lisäyksiäni):

International statistics (Source: Statistics Finland)

Variables:
Life   Life expectancy in years, 1997
GDP    Gross Domestic Product per Capita (US $), 1997
Growth Population Growth, %/year, 1996-1997

*MATRIX WORLD12
W ///         Life     GDP  Growth  Constant
* China         70   0.860     1.0     1
* Finland       77  24.790     0.3     1
* France        78  26.300     0.4     1
* Hungary       71   4.510    -0.4     1
* Japan         80  38.160     0.3     1
* Mexico        72   3.700     1.7     1
* Nigeria       54   0.280     2.9     1
* Romania       69   1.410    -0.2     1
* Sweden        79  26.210     0.1     1
* Turkey        69   3.130     1.7     1
* UK            77  20.870     0.4     1
w USA           76  29.080     0.9     1

Talletetaan aineisto matriisimuotoon ja erotetaan siitä selitettävä
muuttuja Life vektoriksi Y ja selittäjät (ml. vakio) matriisiksi X.
Tästä näkyy myös miten otsikoita voi käyttää viitattaessa matriisien
eri osiin:

MAT SAVE WORLD12
MAT Y!=WORLD12(*,Life)
MAT X!=WORLD12(*,GDP:Constant)

Lasketaan regressiokertoimien vektori B tavanomaisella kaavalla:

MAT B=INV(X'*X)*X'*Y

MAT LOAD B
MATRIX B
INV(X'*X)*X'*Y
///          Life
GDP        0.3078
Growth    -3.4502
Constant  70.6838

B:n ilmiasusta selviää kaikki oleellinen: Life-muuttujaa on selitetty
GDP- ja Growth-muuttujilla sekä malliin kuuluvalla vakiotermillä.
Pohjana ovat X- ja Y-nimiset matriisit, joista lopputulos on saatu
matriisin sisäisen nimen kertomalla tavalla.

Vilkaistaan sitten miten sama tehtävä sujuu R:llä.

SAVEP W,w,world12.txt / talletetaan tiedot tekstimuodossa siirtoa varten

> world12 <- as.matrix(read.table("world12.txt", header=TRUE, row.names=1))
> y <- world12[,"Life"]
> X <- world12[,c("GDP","Growth","Constant")]
> library(nlme)
> b <- solve(t(X) %*% X) %*% t(X) %*% y
> b
                 [,1]
  GDP       0.3078164
  Growth   -3.4502111
  Constant 70.6837861

Lopputulos on lukujen ja riviotsikoiden osalta sama kuin Survossa.
Sisäisen nimen käsitettä ei R:n matriisiobjekti tunne. Jostain syystä
sarakeotsikko "Life" ei siirry y:hyn, joten se ei näin ollen periydy
myöskään b:hen. Jos se sinne asetetaan komennolla

> colnames(y) <- "Life"

niin se periytyy myös b:hen, mutta ideahan olisi juuri mahdollisimman
automaattisessa otsikoiden periytymisessä, joka Survossa toimii hyvin.

Edeltä nähdään myös, että otsikoilla viittaaminen onnistuu R:ssä,
joskaan ei yhtä kätevästi kuin Survossa. Jos ajatellaan yleisemminkin
käyttöliittymää koskevia aspekteja, niin väkisinkin huomio kiintyy
R:n notaation kompleksisuuteen: transpoosin ja etenkin skalaaritulon
merkinnät saavat peruskaavatkin näyttämään aika konstikkailta.
Vai mitä sanotte yhdestä lineaaristen mallien kehikossa yleisimpiin
kuuluvasta konstruktiosta ("matriisin transpoosi kertaa matriisi itse"):

 yleinen   Survo       R
   X'X      X'*X   t(X) %*% X

("yleinen" tarkoittaa ohjelmista riippumatonta matriisinotaatiota;
vaihtoehtona transpoosipilkulle käytetään myös yläindeksiä T tai t)

Survon matriisitulkin notaatiossa vain kertolaskun eksplisiittinen
esiintuominen merkillä '*' erottaa sen yleisestä. R:ssä transpoosi
on tehtävä funktiolla t(), sillä heittomerkki on varattu muihin
tehtäviin R:n komentotulkissa. Pelkkä '*' on puolestaan varattu
jostain syystä matriisien alkiokohtaiseen kertolaskuun (!), ja niinpä
tilastollisissa tarkasteluissa huomattavasti yleisempi skalaaritulo
on saanut operaattorikseen peräti kolmimerkkisen rakennelman '%*%'.

Jälleen on joidenkin mielestä kyse pienistä, merkityksettömistä
asioista, mutta mielestäni ne eivät ole lainkaan merkityksettömiä.
Huono notaatio haittaa luettavuutta ja lisää kirjoitusvirheitä.
Pieneltä tuntuvat asiat muuttuvat kertautuessaan yhä suuremmiksi.

- Kimmo

Vastaukset:
[ei vastauksia]

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.