[vastaus aiempaan viestiin]
Kirjoittaja: | Seppo Mustonen |
---|---|
Sähköposti: | - |
Päiväys: | 17.6.2005 9:05 |
Olen viime viikkoina laajentanut Survon ja R:n yhteistyökuvioita. Uusimmassa Survon versiossa (2.29) tätä aihetta koskevat tiedot on kerätty uuteen hakemistoon <Survo>\U\R, josta INDEX-toimituskenttä johdattelee eteenpäin. Niille Survon käyttäjille, jotka eivät halua oppia lainkaan R:n omia käyttötapoja, on tarkoitus vähitellen rakentaa sukroja, jotka tekevät töitä puhtaasti Survon ehdoilla. Olen toistaiseksi koostanut vasta kaksi tällaista sukroa uuteen R-nimiseen sukroperheeseen. Ensimmäinen niistä hakee R:n toimintoja koskevia help-tekstejä Survon toimituskenttään. Esim. kun aktivoidaan /R-HELP density saadaan toimituskenttään ..................................... /R-HELP density density package:stats R Documentation Kernel Density Estimation Description: The function 'density' computes kernel density estimates with the given kernel and bandwidth. + noin 300 riviä yksityiskohtaisempaa tietoa ..................................... eli kerrotaan, miten R:llä tehdään yhden muuttujan empiirisen jakauman ydinestimointia. Käytettävissä on erilaisia menetelmiä ja optioita. Histogrammoja lukuunottamatta vastaavaa ei ole saatavilla nykyisessä Survossa. Niinpä olen laatinut sukron /R-DENSEST, joka tekee näitä temppuja survomaiseen tyyliin. Sitä käytetään yleisesti muodossa /R-DENSEST <data>,<muuttuja> / <muuttuja>=<min>(<luokkaväli>)<max> missä siis muuttujan luokitus annetaan samalla tavalla kuin HISTO:ssa. Komentoon saa liittää esim. havaintoja rajoittavia täsmennyksiä, mutta ne on kirjoitettava joko komentoriville tai sen yläpuolelle, sillä kaikki komennon alapuolella olevat rivit peittyvät tuloksilla. Esim. /R-DENSEST DECA,Height / Height=170(5)210 tuottaa seuraavaa tulostusta toimituskenttään: ..................................... 11 */RDAT DECA,SURVO.DAT,0 / VARS=Height 12 * 13 *SAVEP CUR+1,E,_densest.r 14 *dat <- read.table("SURVO.DAT",header=T,row.names=NULL) 15 *library(MASS) 16 *attach(dat) 17 *survo.eps("_densest.eps",w=1500,h=1500) 18 *truehist(Height,h=5,xlim=c(170,210)) 19 *# Above use ymax=<max.value> for a suitable y-range. 20 *dn <- density(Height,width="nrd") 21 *fr <- data.frame(dn$x,dn$y) 22 *names(fr) <- c("Height","density") 23 *lines(dn) 24 *survo.data.txt(fr,"_densest.txt") 25 E 26 * 27 */SR _densest.r 28 *>C:\Progra~1\R\rw2010\bin\RTERM.EXE HOME=G:\E\U\R\ & 29 * --no-restore --no-save -q --slave <_densest.r >R.LIS 2>&1 30 * 31 * 32 * 33 *PRINT CUR+1,E TO K.PS / _densest.eps to K.PS 34 % 1500 35 - / Angle 0.00000001 to secure portrait orientation 36 - epsfile _densest.eps,*,*,1,1,0.00000001 37 E 38 */GS-PDF K.PS / Displaying K.PS (_densest.eps) 39 * 40 *You may continue by the following Survo operations: 41 *Saving _densest.txt as data file _DENSEST: 42 *FILE SAVE _densest.txt TO NEW _DENSEST 43 *.......... 44 *Making the histogram: 45 *Height=170(5)210 MODE=800,600 OUTFILE=A HEADER= 46 *XSCALE=170(5)210 YSCALE=0,20 47 *LOW_LIMIT_IN_CLASS=1 48 *GHISTO DECA,Height 49 *.......... 50 *Scaling densities to frequencies: 51 *VAR Freq=48*5*density TO _DENSEST 52 *MODE=800,600 INFILE=A LINE=1 HEADER=Density_estimation 53 *XSCALE=170(5)210 YSCALE=0,20 54 *GPLOT _DENSEST,Height,Freq 55 *..................................... Selityksiä: /R-DENSEST teettää aluksi sukrolla /RDAT analysoitavasta aineistosta R-kelpoisen tekstitiedoston SURVO.DAT (rivi 11). Sitten se kirjoittaa tarvittavan R-käskyjonon ja tallettaa sen tiedostona _densest.r (rivit 13-25). Riviltä 27 /R-DENSEST käynnistää R:n (piilotettuna) tekemään Survon edellyttämät ympäristöasetukset (survo.r uusittuna) ja tältä pohjalta tiedoston _densest.r sisältämät komennot. Tällöin SURVO.DAT siirtyy R:n datakehikoksi dat (rivi 14), piirretään histogrammi (rivi 18) ja lasketaan ydinestimaattori (rivi 20). Tässä tapauksessa R:stä ei tule mitään tulostusta toimituskenttään. Riveille 28-29 ilmaantuu vain R-ohjelmiston käynnistyskomento. R on kuitenkin tallettanut ydinestimoinnin tulokset EPS-kuvana (historammi+ydinestimaattikäyrä) _densest.eps ja /R-DENSEST saattaa sen näkyville kuvaruutuun PRINT-komennon ja sukron /GS-PDF välityksellä (rivit 33-38). Huom. R:n EPS-kuvien "suunnistuksessa" näyttää olevan häilyvyyttä sikäli, ettei koskaan tiedä tuleeko se "pystyyn" vai "poikittain", vaikka sen tulisi tulla "pystyyn". Lievä 0.00000001 asteen kallistus lopullisessa tulostuksessa ratkaisee toistaiseksi ongelman. R on myös tallettanut ydinestimoinnin tulokset tekstitiedostona _densest.txt (rivi 24) ja sitä saatetaan nyt käsitellä Survolla. Tätä varten /R-DENSEST on kirjoittanut valmiit komentokaaviot riveille (40-55), mutta niiden aktivointi ja säätely jää käyttäjän harkinnan varaan. Jos histogramma piirretään Survolla (rivi 44-48) ja halutaan käyrä samaan kuvioon, tiheysarvot (density) tulee skaalata havaintojen lukumäärän (48) ja pylväsleveyden (5) avulla, kuten näkyy rivillä 51. Huomattakoon myös rivin 47 uusi täsmennys LOW_LIMIT_IN_CLASS=1 joka määrää kunkin luokan alarajalla olevan arvon tähän luokkaan kuuluvaksi ja silloin noudatetaan R:n käytäntöä. Survossa normaalikäytäntöhän on se, että luokan yläraja kuuluu luokkaan, mikä on yhteneväistä esim. empiirisen jakauman kertymä- funktion määrittelyn kanssa. /R-DENSEST:in tulostusta on mahdollista hyödyntää eri tavoin. Esim. varsinainen ydinestimointi (rivi 20) voidaan suorittaa uudelleen eri menetelmällä ja toisin optioin. Vaihtoehdot löytyvät komennolla /R-HELP densest Tällöin tulee vain tallettaa muutoksen jälkeen R-käskyjono uudelleen rivin 13 SAVEP-komennolla ja panna R jälleen töihin rivin 27 /SR-komennolla. On siis mahdollista "taiteilla" vapaasti Survon ja R:välillä hyötyen kummankin parhaista ominaisuuksista. Toivoisin asiasta kiinnostuneilta kannanottoja. Vastaako tällainen käsitystänne hyvästä Survon ja R:n yhteistyöstä? -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!