Re: Kilpatehtävä 3: Sukrojen teko

[vastaus aiempaan viestiin]

Kirjoittaja: Seppo Mustonen
Sähköposti:    -
Päiväys: 10.2.2003 10:40

Tässä on esimerkki monipuolisemmasta sukrosta, jota saattaisi harkita
|EXAMPLE|-kokoelmaan.
Simuloidaan todennäköisyysjakaumia soveltaen lukuisia Survon
toimintoja ja sukrokielen ominaisuuksia.
Kyse on todennäköisyyslaskennan keskeisen raja-arvolauseen
toiminnan havainnollistamisesta. Käyttäjälle annetaan mahdollisuus
melko monipuolisesti säädellä lähtötietoja ja näin tutkia asiaa
erilaisista näkökulmista.
Esimerkki koostuu itse asiassa kahdesta sukrosta:
EX_RAJA1 pelkästään kuvaa sen, mitä tullaan tekemään ja pyytää
         käyttäjää valitsemaan lähtötiedot.
RAJASIM  tekee varsinaisen simulointikokeen lähtötietojen pohjalta
         ja ruotii syntynyttä otosta lähinnä kuvallisin keinoin.

Talleta molemmat sukrot erikseen ennen kuin kokeilet niitä.

DELETE / Vie ensin kohdistin kontrollisarakkeeseen ja aktivoi tämä rivi!
*TUTSAVE EX_RAJA1
*{tempo -1}{init}{jump 1,1,1,1}{erase}{erase}SCRATCH{act}{R}
*{R}
*   {form7} Keskeinen raja-arvolause {R}
*{R}
*Eräs tärkeimpiä tilastotieteen teorian tuottamia tuloksia on{R}
*todennäköisyyslaskennan keskeinen raja-arvolause.{R}
*Tämä lause sanoo, että - hyvin yleisin ehdoin - riippumattomien{R}
*satunnaismuuttujien summa (ja silloin myös niiden keskiarvo){R}
*lähestyy jakaumaltaan normaalijakaumaa, kun yhteenlaskettavien{R}
*lukumäärä kasvaa.{R}
*Lauseesta on seurauksena mm., että otoskeskiarvot ovat yleensä{R}
*likimain normaalisti jakautuneita, kun otoskoko on "riittävän"{R}
*suuri.{R}
*Näin normaalijakauma sopii lähtökohdaksi hyvin moniin{R}
*tilastollisen analyysin ja päättelyn tehtäviin.{R}
*{R}
*Keskeinen raja-arvolause ei kuitenkaan kerro sellaisenaan mitään{R}
*siitä, kuinka nopeasti tuo normalisoituminen tapahtuu.{R}
*Tämän sukron tarkoituksena on näyttää, miten hyvin raja-arvolause{R}
*toimii käyttäjän valitsemilla jakaumilla ja otoskoilla.{R}
*On mahdollista havaita mm., että mitä kauempana perusjakauma on{R}
*normaalisesta, sitä hitaampaa on tuo normalisoituminen.{R}
*{message}        Paina ENTER!@
- on key
-      key _: continue
-   wait 1200
*{message}@{d23}{u21}
*Tarkastellaan simulointikokeen avulla todennäköisyyslaskennan{R}
*keskeisen raja-arvolauseen toimivuutta valitsemallasi diskreetillä{R}
*jakaumalla, jonka pistetodennäköisyydet tulee antaa vektorina P.{R}
*Se ilmaisee muuttujan arvot ja niitä vastaavat todennäköisyydet:{R}
*{R}
*MATRIX P ///{R}
*0 0.4{R}
*1 0.1{R}
*2 0.0{R}
*3 0.1{R}
*4 0.4{R}
*{R}
*MAT SAVE P / Talleta perusjakauman pistetodennäköisyydet!{R}
*{R}
*{form}
*Voit muuttaa vektoria P ja
* seuraavia koetta sääteleviä parametreja:{R}
*Otoskoko=1000{R}
*Koetoistoja=10000  (siis kuinka monta otosta luodaan){R}
*Siemenluku=2003    (satunnaislukugeneraattorille){R}
*/RAJASIM           {form5}(Aloita simulointikoe tästä!){R}
*{u7}{tempo +1}{end}


DELETE / Vie kohdistin kontrollisarakkeeseen ja aktivoi tämä rivi!
*TUTSAVE RAJASIM
/
/ def Wotos=W1 WN=W2 Wrnd=W3
/ def Wstddev=W4 Wmin=W5 Wmax=W6 Wstep=W7 Wt=W8
/
*{tempo -1}{init}{R}SCRATCH{erase}{erase}{act}{R}{d15}{u15}
/
*GPLOT /DEL ALL{act}{line start}{erase}
/
*{save spec Otoskoko Wotos}
*{save spec Koetoistoja WN}
*{save spec Siemenluku Wrnd}
/
*.{copy}{R}{R}
*{save datapath Wt}
*Perusjakauman pistetodennäköisyyksien piirtäminen:{R}
*CHECK {print Wt}P.MAT{act}{r}{save char Wt}{R}
- if Wt '=' N then goto ERR1
*MAT P(0,1)="Arvo"{act}{R}
*MAT P(0,2)="Tn"{act}{R}
*Tutkitaan arvojen vaihteluväli:{R}
*MINSTAT P.MAT,CUR+1 / VARS=Arvo{act}{R}
*{R}
*{R}
*{next word}{next word}{next word}{next word}{next word}
*{save word Wmin}{next word}{save word Wmax}
*XSCALE={Wt=Wmin-1}{print Wt}:_,{print Wmin}(1){print Wmax},
*{Wt=Wmax+1}{print Wt}:_{R}
/
*HEADER=[Arialb(20)],Perusjakauma{R}
*XLABEL=[Arial(15)],Muuttujan_arvo YLABEL=[Arial(15)],Todennäköisyys{R}
*LINE=6  LINE2=[line_width(5)][RED],Arvo,0 POINT=[line_width(1)],0,7{R}
*GPLOT /NEXT 3{act}{R}
*GPLOT P.MAT,Arvo,Tn{act}{R}
*GPLOT /NEXT 1{act}{R}
*.{copy}{R}{R}{d22}{u21}
/
*Generoidaan siis {print WN} otosta, joista jokainen muodostuu{R}
*{print Wotos} havainnosta.{R}
*Luodaan aluksi tiedosto, jossa otokset ovat {print Wotos} muuttujan{R}
*X1,...,X{print Wotos} havaintoja ja näitä havaintoja on {print WN}:{R}
*FILE MAKE SAMPLE1,{print Wotos},{print WN},X,1 / NEWSPACE=4,1{act}{R}
*Arvotaan havainnot vektorin P määrittelemästä perusjakaumasta:{R}
*TRANSFORM SAMPLE1 BY #DISTR(P)  / RND=rand({print Wrnd}){act}{R}
*{tempo +1}{10}{R}
*Lasketaan otoksista keskiarvot VARSTAT-operaatiolla:{10}{R}
*VARSTAT SAMPLE1 Mean:4,MEAN{10}{act}{20}{R}
*Keskeisen raja-arvolauseen mukaan otoskeskiarvojen tulisi noudattaa{R}
*normaalijakaumaa sitä paremmin, mitä suurempi otoskoko{R}
*(tässä {print Wotos}) on.{20}{R}
*{d16}{u16}
/
*Tavoitteena on tarkastella otoskeskiarvojen normaalisuutta ensin{R}
*GHISTO-operaatiolla.{20}{R}
*Sopivan luokituksen valitsemiseksi lasketaan tunnuslukuja:{10}{R}
*MINSTAT SAMPLE1,CUR+1 / VARS=Mean{10}{act}{30}{R}
*{R}
*{d}{next word}{next word}{next word}{save word Wstddev}
*{next word}{next word}{save word Wmin}{next word}{save word Wmax}{R}
*{10}Muodostetaan tämän perusteella "kaunistettu" vaihteluväli:{10}{R}
/
*{save stack}
*/XYSCALE {print Wmin},{print Wmax}{10}{act}{20}{line start}
*{del stack}{load stack}
/
*{find (} {l2}{save word Wmin}{r}(
*{find )} {save word Wmax}{l})
/
*{R}
*Sukron XYSCALE ehdottama luokitus soveltuu sellaisenaan yleensä{R}
*hajontakuvien piirtoon. Luokkaväli on kuitenkin liian suuri{R}
*histogrammiin. Se on parempi päätellä hajonnan ({print Wstddev}){R}
*perusteella esim. näin:{10}{R}
*bestval(0.5*{print Wstddev}/4,2*{print Wstddev}/4)={10}{act}{20}
/
*{l} {save word Wstep}{l}={R}
*.{copy}{R}{R}{d15}{u15}{10}
*Piirretään histogrammi ja sovitetaan siihen normaalijakauma:{10}{R}
*Mean={print Wmin}({print Wstep}){print Wmax}{10}{R}
*GHISTO SAMPLE1,Mean,CUR+1 / FIT=Normal{10}{act}{50}
*{R}
*{search}P={R}
*{R}
*{u18}{d19}
*Päättele itse, miten keskeinen raja-arvolause on toiminut.{50}{R}
*.{copy}{R}{R}{d10}{u10}
*Normaalisuutta voi tutkia myös todennäköisyyspaperilla.{10}{R}
*Kopioidaan pelkät otoskeskiarvot pienempään tiedostoon MEANS:{10}{R}
*FILE DEL MEANS{act}{R}
*FILE COPY SAMPLE1 TO MEANS / VARS=Mean{10}{act}{10}{R}
*Lajittelu:{10}{R}
*FILE SORT MEANS BY Mean TO SORTMEAN{10}{act}{10}{R}
*YSCALE=*probit(y),0.0001,0.001,0.01,0.1,0.5,0.9,0.99,0.999,0.9999{R}
*GPLOT SORTMEAN,Mean,PROBIT / POINT=11{10}{act}{20}{R}{d}
*Mitä paremmin pisteet asettuvat suoralle,{R}
*sitä lähempänä normaalijakaumaa ollaan.{30}{R}
*.{copy}{R}{R}{d10}{u10}
*Testataan lopuksi normaalisuus COMPARE-operaatiolla:{10}{R}
*COMPARE MEANS(Mean),#NORMAL,CUR+1{10}{act}{30}
*{R}
*{d6}Koska kaikki tehty on tallella tässä{R}
*toimituskentässä, voit jatkaa ja muunnella{R}
*tarkasteluja myös omin avuin.{goto E}
/
+ ERR1: Perusjakaumaa kuvaavaa matriisia P ei ole talletettu!{goto E}
+ E: {end}

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.