# dette er r-info07.txt i serien av uformelle instruksjoner # i hvordan fremstille grafikk som kan vaere relevant for # statistisk fremstilling av talldata i ulike sammenhenger # knyttet til bruk av det relativt enkle programmeringssraapket # R, i norske laer-mens-du-gjoer tekster i: # www.norskesites.org/r-programmering # i denne og kommende r-info's, som en serie, skal vi mer # og mer faa frem nyttige detaljer i hvordan skrive egne # funksjoner, hvordan bygge matriser av data, og hvordan # sette opp grafer -- ogsaa kurvegrafer -- ut fra dette. # dette gjoer vi paa bakgrunn av at vi har visshet om at # R ganske lett kan lage et spektrum av grafer relevant # for statistisk arbeid. gjennom at vi dyrker endel detail # kunnskap om noen viktige trekk av R programmering vil vi # kunne baade bruke manualer og andre eksempler til videre # eget arbeid til aa forme det som trengs. i det foelgende # er det mindre vekt paa farver og beskrivende tekster og # slikt, og mer paa 'nut and bolts' greier, hvordan eksakt # lage egen funksjon, hvordan dette kan brukes til aa bygge # opp matriser som i sin tur kan brukes i graf, og slikt. # men foerst noen lette vitenskapsteoretiske refleksjoner # som i noen grad avslutter de kommentarer pabegynt i forrige # r-info: # gitt en mengde talldata sortert paa en viss maate, presentert # i form av smaa sirkler i et kartesiansk x-y koordinatsystem # er det i praksis naermest et ubegrenset antall kurver som # kan trekkes gjennom disse punktene. en kurve er definert av # flere punkter enn talldatene, spesielt hvis den er laget # av en funksjon, og denne funksjonen kan kanskje vaere # en illustrasjon av en teori vi har. hvis dataene vi har # samlet utgjoer noe som mer eller mindre er en linje hvis # man trekker 'den enkleste kurve' gjennom dem, kan det likevel # vaere at med mer datainnsamling, vil antallet punkter som # avviker litt eller mye oeke eksponsielt. dette skjer helt # vanlig i kvantefysiske data. dette betyr at jo mer data # som samles, desto stoerre kan avviket fra teori bli; og # siden mer data stort sett alltid kan samles, vil det aldri # bli noen total stoette til noen teori, i denne empiriske # forstand. # ved videre studering av fluktuasjonene til data kan man # finne forskjellige maater aa sortere dataene paa og disse # forskjellige sorteringene kan noen ganger maskere kurver # og gi tilsynelatende linaere korrelasjoner. uten at vi skal # gaa for langt inn paa dette betyr det kort sagt at det er # ikke alltid enkelt aa si hvilken teori som er enklest, fordi # 'enkelhet' er avhengig av slikt som konteksten. hvis du har # andre teorier i samme kontekst som fordrer en annen sortering # av dataene, vil du kanskje maatte godta at lineaere grafer # ikke er de rette aa velge, selv om det er mulig a tvinge # frem en sortering som gir en linear forbindelse. det er # altsaa atskillige muligheter for aa manipulere statistiske # data og noen av disse er saa kompliserte aa oppdage at man # kan lett lure seg selv. dette forfoerende element ved # statistikk blir man seg bevisst ikke minst naar man bevisst # arbeider en tid med kurvedata. # hvis du har en viss teori som du kan illustrere ved # en funksjon og dets graf, og oensker aa sammenligne hvordan # funksjonen passer med dataene visuelt, vil du trenge litt # forskjellige kunnskaper om hvordan skrive egne funksjoner, # og hvordan plotte disse side om side med data som du legger # inn i noe slikt som lister eller matriser. det finnes # tradisjoner innen statistikk der man anbefales aa vurdere # 'i hvilken grad er det sannsynlig at disse korrelasjonene # mellom teori og data kunne oppstaatt via tilfeldigheter'. # dette hoeres veldig bra ut, og naturligvis gir det en god # common sense foelese at man har mye data med stor variasjon # i inngangsvariabler og resultatverdier heller enn bare et # par spesielt utvalgte eksempler. selve ideen om at man trenger # mer enn bare 1-2 eksempler, og gjerne mange, er super. men # det er ikke totalt lysende klart at man dermed skal avfinne # seg med de tradisjonelle regnemetoder over 'hvor tilfeldig # er dette resultatet'. for selve begrepet 'tilfeldig' savner # en filosofisk uavhengig og kontekstfri definisjon, og kan # ikke listes opp side om side med mer 'digitale' og endelige # tallbegreper som addisjon og i noen grad trigonometri, slik # som sinus, cosinus, arc-tangens og kvadratrot og slikt. # en utregning med et presist prosenttall knyttet til ideer # om 'randomness' er derfor filosofisk sett noe man bare kan # gjoere om man er villig til aa forlate det klare sett ideer # som knytter seg til aritmetikk og andre essensielt digitale # og algoritmiske (funksjonsmessige) begreper. # det som derimot er viktig i forskning er anvendelse av # fruktbar tvil, villighet til aa gjoere ulike muligheter # for tolkning mulig, ikke bare de muligheter som passer en # teorihorisont, og grafiske fremstillinger skapt i denne # aand kan vaere gunstig i statistisk forskning. man kan # gaa videre aa forsoeke aa gjoere visse prosentmessige # kalkulasjoner med dette, hvis man har skapt gode grafer # og gode funksjoner -- prosent og slike ting er jo som # regel svaert enkelt aa implementere -- men man boer gaa # veien om aa tenke gjennom empirens egentlige indre # moenstre -- lytte til tallenes tale. # for aa gjoere dette konkret, la oss arbeid med grafiske # fremstillinger relevant for en 'kurvete' teori -- f.eks. # en som bruker noe slikt som trigonometriske funksjoner # av typen sinus og cosinus. la oss se hvordan vi kan # plotte punkter fra en funksjon vi skriver knyttet til # disse, og deretter plotte punkter fra data vi genererer # ut fra ideen om at innsamlet empiri kanskje ser slik ut, # og hvordan man kan laere av disse grafene, perseptuelt. # vi har allerede touchet de fleste former for programming # som R tilbyr. denne gangen skal vi arbeide litt mer i # dybden paa noen faa ting slik at vi faar et visst haandtverk # i aa styre ting selv -- ikke minst naar det gjelder aa lage # funksjoner. vi kan ta utgangspunkt i innebygde funksjoner, # slik som synderen 'sin', og lage nye funksjoner ikke bare # direkte basert paa slik som denne, men gaa veien om matriser # for aa bygge egne funksjoner -- ogsaa et alternativt til # 'sin' som gir de samme tall innen visse skalaer men helt # uten aa bruke 'sin'. fordelen ved denne oevelsen er at vi # hele veien kan sjekke resultatene ved slaaende gode kurver # som er intuitivt tydelige, klare og vakre! # la oss foerst lage en nydelig graf, deretter snakker vi litt # om hva vi gjorde, og over i neste r-info gaar vi videre med # eksemplet vi har begynt paa. # Copy og paste foelgende over i din R, og som vanlig pass aa # at du kopierer den blanke linjen ETTER den siste linjen # (i dette tilfelle, etter 'plot') slik at du faar med # linjeskiften ogsaa der. {i stoerre grad enn tidligere vil # resten av r-info-serien bestaa av nye eksempler laget for # denne tutorialserie og ikke vaere saksete eksempler.} fullsirkel <- 628 tresirkler <- 3*fullsirkel xxx3some <- 0:tresirkler skalasinus <- function(inputx=314159, skala=100000) { desimalx <- inputx / skala resultat <- sin(desimalx) return(resultat) } plot(skalasinus(xxx3some, skala=100)) # vi gaar videre med dette i kommende r-info -- med # materiale vi begynner med her, skriver vi ikke koden slik # at det er faerrest mulig linjer, men slik at det er mest # mulig og enklest mulig aa laere det vi trenger fra koden, # samtidig som grafen er til inspirasjon. denne grafen har # tre topper, -- den gaar fra 0 til two ganger 3.14 eller 'pi' # tre ganger. vi bruker en skala der vi helt unngaar desimal- # punktum paa 100. dette betyr at vi kan telle opp fra 0, 1, 2 # og videre opp til to ganger 314 eller 628 for aa komme til # foerste syklus, og til tre ganger 628 for aa komme gjennom # tre hele sinus-sykler. vil du se alle inngangsverdiene vi # gir til vaar funksjon? det er bare en liste med tall, men # proev disse: show(xxx3some) summary(xxx3some) # den foerste viser listen -- en array -- og den andre gir # blant annet et gjennomsnitt for den. merk at vi har laget # en funksjon der det er gitt visse standardverdier, slik # som skala. den er satt til 100,000 som standard. la oss # teste funksjonen vi har laget der vi anvender denne # skalaen et oeyeblikk. 'skala' betyr altsaa her bare # hvilket tall vi bruker under broekstreken. hvis skala # er 10,000 og inngangstallet er 31416 blir det 3.1416 # som input til sinus-funksjonen. alt arbeid med tall i # datamaskiner er og blir et arbeid med en endelig mengde # tall. man kan snakke saa mye man vil om 'floating points' # og slikt, men til syvende og sist klarer datamaskinen # et visst antall digits, og desimal-punktet kan egentlig # regnes som en abstraksjon, noe som settes inn etterpaa # -- hvis man vil. la oss finne ut hva kvadratroten av 2 # er, over paa 100,000 som skala, og fore vaar funksjon # med det. taster vi round(sqrt(2)*100000) # faar vi 141421. et pent tall! taster vi saa skalasinus(141421) # faar vi ca 0.98777 som resultat. antagelig riktig. ved # to pi er hele enhetssirklen snurret rundt en gang. ved # en pi er det en halv gang, og sinus gir oss y-akse, og # er null ved pi, mens cosinus er 1 ved pi. hva er halv pi? pihalve <- round(314159/2) show(pihalve) # halv pi er, med skala 100000, som er en bra skala i den # forstand at den er detaljert men likevel gir veldig lesbare # tall, 157080. iflg. teorien skal da skalasinus(157080) gi # oss 1. la oss sjekke: skalasinus(157080) # den gir 1. siden 141421 er forholdsvis naere 1, ser det # ut som det hele henger paa grep. {fortsetter i r-info08.txt}