Re: R-ohjelmisto Survon palveluksessa

[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!

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