[vastaus aiempaan viestiin]
Kirjoittaja: | Kimmo Vehkalahti |
---|---|
Sähköposti: | - |
Päiväys: | 20.10.2004 9:24 |
Mitä tulee jutun otsikon alkuosaan ("Toivomuksia täsmennyksistä"), toteaisin vain että kun n. 10 vuotta sitten tein ensimmäisiä Survo-moduleitani, tulin sallineeksi täsmennysten kirjoittamisen pienillä kirjaimilla. Myöhemmin olen sitä katunut, mutta en voi tietenkään tekoani mennä peruuttamaankaan. Minusta on selvempää, että täsmennykset kirjoitetaan isoilla, ja että ylipäätään isot ja pienet kirjaimet eivät ole samanarvoisia. "Suurpiirteisyys" ärsyttää itseäni tavattomasti mm. SPSS:ssä joka ei erota isoja ja pieniä kirjaimia muuttujien nimissä. Toki muuttujien nimet ovat vähän eri asia, mutta vain vähän. Kaikki toimituskenttään kirjattu materiaali yhdessä muodostaa dokumentin työskentelystä, ja yksi tapa selkiyttää sitä on pitää isoilla ja pienillä kirjaimilla omat roolinsa. TEKSTIÄHÄN EI OLE VASTAAVASTI TAPANA KIRJOITTAA ISOILLA PUUKSTAAVEILLA, se antaa amatöörimäisen kuvan ja tulkitaan HUUTAMISEKSI. Näinkin ajateltuna ISOT KIRJAIMET sopivat teknisiin tarkoituksiin, komentoihin ja täsmennyksiin. Sitten otsikon loppuosaan ("ym."). :-) Haluaisin hieman konkreettisemmin pohtia Simon/Jarkon mainitsemia näkökohtia tulosten tallettamiseen. Koska osalle tämän keskustelun seuraajista ei R-ohjelmisto varmaankaan ole tuttu, havainnollistan asiaa pienellä esimerkillä. R:ssä (ja sen esikuvassa, SPlus-ohjelmassa) tosiaankin säilötään tuloksia talteen erilaisilla nimillä, jolloin niihin voi viitata myöhemmissä yhteyksissä. Survossa toimitaan periaatteessa samalla tavalla, mutta toteutustavat ovat erilaiset. Sama pätee yhtä hyvin muihinkin tilastollisen laskennan saralla operoiviin ohjelmiin (esim. SAS ja SPSS) - kullakin ohjelmalla on omat tapansa säilöä tuloksia ja tarjota niitä käyttäjän ulottuville. Katsotaan siis aluksi hieman R:n käyttöä SAVINGS-aineiston avulla, jota on usein käytetty regressiodiagnostiikan havainnollistamisessa. Luetaan aineisto sisään tekstitiedostosta; muuttujien nimet ovat ensimmäisellä rivillä, maiden nimet ovat sarakkeessa "Country": > savings <- read.table("savings.txt", header=T, row.names="Country") Aineiston alkupäätä näkyville (tilan säästämiseksi ei koko aineistoa): > savings[1:7,] SR POP15 POP75 DPI Rate Australia 11.43 29.35 2.87 2329.68 2.87 Austria 12.07 23.32 4.41 1507.99 3.93 Belgium 13.17 23.80 4.43 2108.47 3.82 Bolivia 5.75 41.89 1.67 189.13 0.22 Brazil 12.88 42.19 0.83 728.47 4.56 Canada 8.79 31.72 2.85 2982.88 2.43 Chile 0.60 39.74 1.34 662.86 2.67 Poimitaan vain parin maan tiedot: > savings[c("Finland","Iceland"),] SR POP15 POP75 DPI Rate Finland 11.24 27.84 2.37 1681.25 4.32 Iceland 1.27 34.03 3.08 1900.10 1.12 Kiinnitytään aineistoon (lyhentää merkintöjä, kun datan nimeä ei tarvitse toistaa) ja lasketaan lineaarinen malli funktiolla lm: > attach(savings) > model1 <- lm(SR ~ POP15 + POP75 + DPI + Rate) Funktion lm tuloksena saatava model1 sisältää 12 eri kohtaa: > names(model1) [1] "coefficients" "residuals" "effects" "rank" [5] "fitted.values" "assign" "qr" "df.residual" [9] "xlevels" "call" "terms" "model" Otetaan tässä näkyville vain residuaaleja aineiston alkupäästä: > model1$residuals[1:6] 1 2 3 4 5 6 0.8636672 0.6162974 2.2189380 -0.6984035 3.5528533 -0.3167252 Maiden nimet olisivat hyödyksi, mutta oletuksena ne eivät tule mukaan model1:een, kuten näkyy: > names(model1$residuals)[1:6] [1] "1" "2" "3" "4" "5" "6" Kopioidaan omatoimisesti nimet mukaan aineistosta: > names(model1$residuals) <- row.names(savings) > names(model1$residuals)[1:6] [1] "Australia" "Austria" "Belgium" "Bolivia" "Brazil" "Canada" jolloin saadaan paremmin selvää: > model1$residuals[1:6] Australia Austria Belgium Bolivia Brazil Canada 0.8636672 0.6162974 2.2189380 -0.6984035 3.5528533 -0.3167252 Lisää tuloksia syntyy summary-funktiolla. Otetaan sen tulokset talteen nimellä sum1: > sum1 <- summary(model1) Käytettävissä on 11 kohtaa: > names(sum1) [1] "call" "terms" "residuals" "coefficients" [5] "aliased" "sigma" "df" "r.squared" [9] "adj.r.squared" "fstatistic" "cov.unscaled" Esimerkiksi selitysasteeseen voi viitata näin: > sum1$r.squared [1] 0.3384577 Mallin kertoimet muine tietoineen löytyvät osastosta "coefficients", joka on 5x4-taulukko: > dim(sum1$coefficients) [1] 5 4 Sen sisältö on kokonaisuudessaan seuraava: > sum1$coefficients Estimate Std. Error t value Pr(>|t|) (Intercept) 28.5662294804 7.354502457 3.8841825 0.0003337975 POP15 -0.4611958542 0.144641765 -3.1885386 0.0026028076 POP75 -1.6914510217 1.083593487 -1.5609646 0.1255381020 DPI -0.0003370167 0.000931094 -0.3619577 0.7190778562 Rate 0.4096888540 0.196196683 2.0881538 0.0424736185 Yksittäisiin osiin voi viitata näin: > sum1$coefficients["POP15","Estimate"] [1] -0.4611959 .................................. Vertailun vuoksi vilkaistaan asiaa Survon puolelta. En tässä tee samoja asioita vaan ajan säästämiseksi liitän mukaan meneillään olevan Data-analyysi II -kurssini tämän viikon harjoitustehtävien mukana jakamani Survo-ohjeen (minulla on tyypillisesti joitakin ohjeita useistakin ohjelmista - R, SAS, SPSS, Survo, Arc): FILE STATUS SAVINGS Intercountry life-cycle savings data from Belsley,Kuh,Welsch(1980): Regression Diagnostics, p.41 Each variable is an average over period 1960-1970 SORT:Country FIELDS: (active) 1 SA_ 16 Country 2 NA_ 4 SR aggregate personal savings rate (##.##) 3 NA_ 4 POP15 percentage of population under 15 years (##.##) 4 NA_ 4 POP75 percentage of population over 75 years (##.##) 5 NA_ 8 DPI per-capita disposable income in USD (####.##) 6 NA_ 4 Rate percentage growth rate of DPI (##.##) END Survo data file SAVINGS: record=95 bytes, M1=17 L=64 M=6 N=50 Tehdään valikoima uusia muuttujia regressiodiagnostiikkaa varten: VAR Res,Pre,Hats,Stud,Cook,Sres TO SAVINGS Res=MISSING (tavalliset residuaalit) Pre=MISSING (sovite eli ennuste) Hats=MISSING (H-matriisin lävistäjäalkiot) Stud=MISSING (studentoidut residuaalit) Cook=MISSING (Cookin etäisyydet) Sres=MISSING (standardoidut residuaalit) ........................................................................ Valitaan muuttujille tehtävät ja lasketaan regressiomalli: MASK=-YXXXXRPHSC- REGDIAG SAVINGS CUR+1 / mallia voi tietysti tästä parantaa, ks. harj. 4 Regression diagnostics on data SAVINGS: N=50 Regressand SR # of regressors=5 (Constant term included) Condition number of scaled X: k=34.8683 Variable Regr.coeff. Std.dev. t Constant 28.566233 7.3545026 3.8842 POP15 -0.4611959 0.1446418 -3.1885 POP75 -1.6914514 1.0835935 -1.5610 DPI -0.0003370 0.0009311 -0.3620 Rate 0.4096888 0.1961967 2.0882 Variance of regressand SR=20.07404584 df=49 Residual variance=14.46025813 df=45 R=0.5818 R^2=0.3385 Durbin-Watson=1.686 Standardoituja residuaaleja ei yleensä tarvita, jos studentoidut ovat käytettävissä. Ne voi kuitenkin laskea itse kaavoilla (2.8) ja (2.9): VAR Sres=Res/(s*sqrt(1-Hats)) TO SAVINGS missä s=sqrt(variance) eli jäännöshajonta edellä lasketusta mallista. FILE SHOW SAVINGS / FIELD=Res ........................................................................ Mitoille ominaiset rajat, kun k=4, p=k+1 ja n=50: Hats: 2*p/n=0.2 Stud: abs(t.G(n-k-2,0.05/2/n))=3.5258013064872 Cook: sqrt(0.5)=0.70710678118655 ........................................................................ Eräitä tyypillisiä diagnostiikkakuvia (tähänastisten lisäksi): VAR Nrot:2=ORDER TO SAVINGS / havaintonumerot aineistoon *Kuva1=H-matriisin_lävistäjäalkiot_ja_havaintonumerot *Kuva2=Studentoidut_residuaalit_ja_H-matriisin_lävistäjäalkiot *Kuva3=Cookin_etäisyydet_ja_havaintonumerot *Kuva4=Studentoidut_residuaalit_ja_havaintonumerot Asteikot: *n=0(10)50,55:_ (havaintonumerot) (sekä *H=0,0.2,0.6 (H-matriisin lävistäjäalkiot) sopivat *S=-4,-3.53,0,3.53,4 (studentoidut residuaalit) rajat) *C=-1,-0.7,0,0.7,1 (Cookin etäisyydet) Maiden nimet näkyviin (pienellä): POINT=[SMALL],Country GPLOT SAVINGS Nrot Hats / HEADER=*Kuva1 XSCALE=*n YSCALE=*H GRID=Y GPLOT SAVINGS Hats Stud / HEADER=*Kuva2 XSCALE=*H YSCALE=*S GRID=XY GPLOT SAVINGS Nrot Cook / HEADER=*Kuva3 XSCALE=*n YSCALE=*C GRID=Y GPLOT SAVINGS Nrot Stud / HEADER=*Kuva4 XSCALE=*n YSCALE=*S GRID=Y ........................................................................ Tuon harjoitustehtäväohjeen jatkoksi voisin mainita pari esimerkkiä: Talletetaan diagnostiset tulokset (ja maiden nimet) matriisitiedostoon: MASK=A-----AAAAA-- MAT SAVE DATA SAVINGS TO SDIAG Yksittäisen alkion poimiminen kenttään tai osaksi jatkolaskelmia: MAT_SDIAG(Libya,Hats)=0.53145605325699 Osamatriisin poimiminen kenttään: MAT LOAD SDIAG(Finland:Iceland,Hats:Cook) CUR+1 MATRIX SDIAG /// Hats Stud Cook Finland 0.0920 -0.4599 -0.0661 France 0.1362 0.6964 0.1244 Germany_ 0.0874 -0.0492 -0.0069 Greece 0.0966 -0.8597 -0.1261 Guatemal 0.0605 -0.9086 -0.1033 Honduras 0.0601 0.1905 0.0218 Iceland 0.0705 -1.7312 -0.2086 Millä havainnolla olikaan suurin studentoitu residuaali? MAT M=MAX_IJ(SDIAG(*,Stud)) / *M~MAX_IJ(SDIAG) D1*1 MAT LOAD M MATRIX M MAX_IJ(SDIAG(*,Stud)) /// Stud Zambia 2.853561 Lisää esimerkkejä matriisimuotoisten tulosten hyödyntämisestä löytyy mm. valitsemalla DEMO -> MATRIX. Jatkolaskelmia varten Survo siis tallettaa matriisitiedostoja ja tekstimuotoisia tulostuksia, joista jälkimmäiset tulevat oletuksena myös RESULTS-tiedostoon. Kuten Simo mainitsikin, sukroilla voi jatkojalostaa näitä tuloksia sellaiseen muotoon, että tuloksiin voi helpommin viitata jatkossa. Niistä voi koota taulukoita, ja tallettaa näitä edelleen vaikka matriiseiksi tai datatiedostoiksi. Matriisitiedostojen osalta tämä viittaaminen on kätevää jo valmiiksi. Seppo mainitsi vastauksessaan: > "tarkat" arvot kaikista taulukkomaisista tuloksista > menevät tiettyihin matriisitiedostoihin, joilla on > vakionimet. Kysely MATRES? kertoo tiedostojen nimet. Nämä ovat hyödyllisiä jatkolaskelmien kannalta. Olen itse ollut aika ajoin aktiivisesti penäämässä lisää tulosmatriiseja erilaisiin operaatioihin, ja valikoimaa voisi nähdäkseni edelleen kasvattaa. Mm. REGDIAG voisi tallettaa parametriestimaattien (REG.M) ohella myös niiden keskivirheet, tai paremminkin kovarianssimatriisin samaan tapaan kuin GENREG (PCOV.M). Varmaankin myös LINREG voisi toimia samoin. Tai sitten samaan tapaan kuin ESTIMATE (jonka ko. [uusia] matriiseja EST*.M ei taideta mainita MATRES?-kohdassa?) terv. Kimmo
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!