# dette er r-info06.txt i norskesites.org/r-programmering # du er ennaa med? bra!!!!! # disse tekster er .txt i engelsk standard ascii som har # ingen etniske bokstaver, heller ikke norske, derfor # skrives ae, oe, og aa for de tre ekstra norske tegn -- # og foelgelig vil ikke R 'hoste' naar man komplierer # ting som er hentet fra dette. tegnet # betyr i R # sammenheng en kommentar, og stort sett passer jeg paa # aa ha det til venstre i disse kommentarer. noen ganger # vil norske datanavn komme inn i programmer for aa # tydeliggjoere hvilke navn som er fritt valgt og hvilke # ord som har en klar R-definisjon (f.eks. 'matrise', # 'forskningsdata' under er vaare ord, mens 'matrix' er # et ord i R, slik R er definert ved universitetene). # vi fortsetter med utforskningen av R for tenkning omkring # tall gjennom grafiske fremstillinger av tall. i statistisk # forskning brukes, av tradisjon, uttrykk knyttet til # 'regresjon' (eller 'analytisk regresjon') ofte til en # tilnaerming der der en fokus paa gjennomsnitt heller enn # en fokus paa avvik. dette er mer tydelig i linear # (linje-orientert) regresjon. merk at mens vi har eksakt # aritmetikk av typen prosent-regning, og trigonometriske # funksjoner slik som sinus og den type ting, er alt som # i statistikk knytter seg til uttrykket 'regression' mer # en form for heuristikk, hvis du kjenner dette ordet. # med andre ord, det dreier seg om -- sagt litt fritt! -- # kjoekkentricks, om veier som har vist seg fruktbare, # eller tommelfingerregler: disse utgjoer med andre ord ingen # naturlov eller noen opplagt utvidelse av det eksakte # aritmetiske sett av regnefunksjoner. det er derfor av # betydning, i forskningssammenheng, at man er seg bevisst # viktigheten av aa bruke et noe annet spraak naar man # beveger seg fra noe slikt som aritmetikk og over til # noe slikt som regresjonsanalyse. aritmetikk har ingen # pretensjon i seg om at det tilbyr noen "analyse". # statistikk har, og maa ha, en pretensjon i seg om at # det tilbyr en viss analyse, men det forutsetter at # dataene matcher, og det er alltid i noen grad en # mental vurdering, en skjoennsmessig vurdering. man kan # derfor ikke uten spoermsmaalstegn i horisonten paakalle # slike metoder, men man maa gjoere det med en naturlig # dose av forskningsmessig tvisyn -- som kan varsle leseren # om at det kan vaere en anvendelse her av metoder som # egentlig ikke gir helt mening. derfor skal man kunne # bruke quotes, hvertfall mentalt sett, naar man bruker # funksjoner implementert i en datapakke som hentes # fra det statistiske forskningsfelt. disse funksjonene # er i endel tilfeller eksakt definert, men hvorvidt de # faktisk gir mening i situasjonen er alltid et spoersmaal. # gir det f.eks. mening aa bruke funksjonen lsfit, som # dreier seg om linear regresjon? la oss se! forskningsdata <- c(3, 5, 8, 13, 21, 34, 55) # neste linje viser de enkelte data plot(forskningsdata) # deretter lager vi en rett linje gjennom dem med abline # antall tall er 7, derfor 1:7 i den lineaere regresjonslinjen: abline(lsfit(1:7, forskningsdata)) # hva er det lsfit egentlig gjoer, eksakt? den kalkulerer over # dataene som gis den i traad med statistiske tradisjoner, og # noen av disse resultater brukes av abline for grafikk. for # en dypere analyse av lsfit, hvis du er i humoer til aa kikke # paa massevis av tall og flere teknisk-statistiske # forkortelser, proev aa skrive lsfit(1:7, forskningsdata) # og, med et annet eksempel vi bruker rett nedenfor, der det # er temmelig klart at slik regresjon ikke kan brukes uten videre forskningsdata3 <- c(234, 233, 234, 4933, 3983, 3982, 8472, 3989) lsfit(1:8, forskningsdata3) # hvis du er av den harde typen og kan takle en komplisert # funksjon uten forklaringer, kikk paa hvordan lsfit er laget: show(lsfit) # nok om det! # hvis du vil lage et program via en tekstbehandler og lagre # som en .txt type file som du kaller f.eks. prog001.R eller # diagram5.R kan du hente det inn ved at du gaar inn i R # og skriver source("prog001.R") eller source("diagram5.R") # dette er et alternativ til copy-og-paste metoden, men # det forutsetter at du vet hvilken folder som R leser fra, # og at du ogsaa vet hvordan lagre filer i den folderen, elller # at du spesifiserer en annen folder, f.eks., # source("/home/Thea/Documents/prog001.R") # hvis du skal ha en presentasjon eller en vurdering som krever # at du gjoer minst mulig -- bare et enkelt trykk paa linjeskift # eller 'enter' knappen paa tastaturet ditt -- mellom hver kurve, # kan du gjoere noe slikt som dette, som bruker plot.new() til # aa rense grafikken, og readline() til aa vente paa linjeskift. # vi putter det hele inn i en funksjon i tillegg, men du kan # godt ha flere funksjoner eller ha det utenfor funksjoner. # proev ut dette gjennom at du lagrer filen som f.eks. # program1.R og skriver source("program1.R") eller noe slikt # som source("/home/Thea/Documents/program1.R") hvis du bruker # en egen folder til programmene. # husk paa -- i alle disse eksempelene -- at du bruker q() # for aa forlate R etter hvert enkelt eksempel og deretter # starter opp R igjen, det skal gaa paa et blunk -- med mindre # du er helt sikker paa at du virkelig vil bruke de data som # allerede er lagt inn. paa denne maaten renser du opp PCen # og du skaper stoerre klarhet i hva du egentlig kjoerer # paa den av programmer, til enhver tid -- og med hvilke data. # dette er en del av det vi i g15 arbeid kaller "foerste-haands # programmering" eller et "foerste-haands" forhold til data, # til forskjell fra en mer forkludret eller "annen-haands" # forhold til programmering og data. klarhet er viktig fordi # da blir arbeidet med det digitale noe som skjerper hjernen! # dette premiss ligger til grunn for vaar generelle anbefaling # om aa unngaa 'altfor hjelpsomme' soekemotorer og andre # databaser, fordi for mye hjelpsomhet fra en datamaskins # side kan skape hjelpeloeshet i brukeren paa sikt. vi maa # "temme" datamaskinen, og den maa oppfoere seg som en # traktor og ikke som en slags levende organisme dersom vi # skal ha menneskesinnets evne til persepsjon og klarhet # fullt inntakt og i kontinuerlig utvikling under vaar # digitale forskningsarbeide. # merk at det foelgende gir bare mening ved source("filename.R") # ('paste' doesn't work here because it pastes lineshifts!) require(stats) ventepaalinjeskift <- function() { # merk at c(..) er en kommando i R, og kommandoen samler en # rekke med tall til en vektor. forskningsdata <- c(3, 5, 8, 13, 21, 34, 55) plot(forskningsdata) # antall tall er 7, derfor 1:7 i den lineaere regresjonslinjen: abline(lsfit(1:7, forskningsdata)) readline() plot.new() forskningsdata3 <- c(234, 233, 234, 4933, 3983, 3982, 8472, 3989) plot(forskningsdata3) # antall tall er 8, derfor 1:8 i den lineaere regresjonslinjen: abline(lsfit(1:8, forskningsdata3)) readline() plot.new() } ventepaalinjeskift() # naar grafikken kommer opp, bring da rammen som har R spraaket # opp igjen, og klikk paa det med musen, og tast linjeskift # (enter), og neste grafikk kommer frem. # du ser noen 'helt ville' data-tall, eller antatt 'empiri', # i kurve nummer to. i dette tilfelle kan man argumentere for # at dataene trenger ytterligere sortering hvis man skal # dra en rett linje gjennom dem, eller at man arbeider ut # fra andre ideer enn aa dra linje gjennom dem. dette er # dermed en skjoennsmessig vurdering som grafikken kan hjelpe # deg til. merk ogsaa at det er lett nok dersom mengden data # er relativt begrenset at vi inkluderer dataene i programmet # heller enn at de stables opp i en egen datafile. programmet # blir mer lesbart i forhold til forskning naar vi kan se # dataene og programmet samlet, og studere ogsaa kurven # fordelen med at data skapes utenfor en funksjon er at # datene er tilgjengelig etterpaa. vi kan faa samme grafer # slik, hvis du lagrer dette i et nytt program, starter opp # R paa nytt, og henter inn programmet via source("progname.R"). require(stats) forskningsdata <- c(3, 5, 8, 13, 21, 34, 55) forskningsdata3 <- c(234, 233, 234, 4933, 3983, 3982, 8472, 3989) grafikken <- function() { plot(forskningsdata) abline(lsfit(1:7, forskningsdata)) readline() plot.new() plot(forskningsdata3) abline(lsfit(1:8, forskningsdata3)) readline() plot.new() } grafikken() show(forskningsdata) show(forskningsdata3) # ved 'show' ser vi dataene etterpaa og dette viser at de # er fremdeles tilgjengelige etter at funksjonen har # kjoert. de to show kommandoene lager lister omtrent slik: # [1] 3 5 8 13 21 34 55 # [1] 234 233 234 4933 3983 3982 8472 3989 # dette er altsaa arrays eller vektorer eller lister # eller hva vi kaller det. vi kan skape matriser ut av # tallene ved at vi bestemmer oss for et antall rader # eller rows, n rows, nrow. # merk at her bruker vi listene med tall ovenfor uten # videre fordi vi arbeider naa med aa forstaa hvordan # lage grafer og slikt. normalt vil du selvsagt ENTEN # samle data som er primaert ment for presentasjon som # en liste eller via plots av typen som vi har overfor # ELLER du samler data med rekker og kolonner organisert # ut fra noen meningsfylle prinsipper for hva rekkene # og kolonnenne er. f.eks., hvis du vil analysere hvordan # aktiviteten til visse firma-typer er vil firma-typene # kunne utgjoere det som du skriver over hver enkelt # column eller soeyle. hver enkelt rad er da kanskje # viet fysisk lokalisering eller andre kriterier som # gjelder paa tvers av firma-typene. dermed, naar du har # en matrise, vil du tenke gjennom hvordan best # finne moenstre i denne matrisen, og hvordan utvikle # en graf som trekker frem disse moenstrene. en teori # kan da settes opp, og sammenlignes med de virkelige # data, og vi kan da si at datene gir oss 'instances of # confirmation' eller 'instances of disconfirmation', # for aa bruke et klassisk spraak om forholdet mellom # 'empirisk stoev' (som min far Stein Braaten har ofte # kalt det) og teori som gaar tilbake til slike tenkere # innen vitenskapsteori som Carnap, Popper og vaar egen # Arne Naess, som til en viss grad var medlem av # The Vienna Circle og til en viss grad fant mening i # begrepet 'logisk empirisme'. (kanskje i for stor grad # til aa gi fullstendig kredibilitet til metafysisk # og eller spirituelt arbeid av den typen blant annet # kvantefysiske data kan gi opphav til, etter min # vurdering.) # *** litt personlige notater i dette avsnitt, siden Naess # likevel er nevnt. filosofi-professoren Naess laerte # meg mange ting knyttet til spraakpresisjon innen # presentering av vitenskapelige syn gjennom en rekke # samtaler ogsaa paa fjellet, hans Tvergastein, med # uten hans kone Kit-Fai Naess og av og til med egne # venninner medtatt. Enkelte av de mange samtaler frem # til mars 1996 ble tatt opp paa baand og trykket # (og der min venn H T Tschudi, som sammen # med meg arbeidet frem tekster fra opptakene, selv # viderefoerte samtaleserien med den aldrende filosofen # i interessante retninger etter denne tid). jeg vil si # at vitenskapsteori er likevel et felt som vanskelig kan # frigjoeres fra filosofiske undersoekelser av tallenes # betydning. disse undersoekelser hadde jeg paa det # tidspunkt ikke satt av tid til, for kommentarer om # dette se min firth234 platform fra april 2006, eller # 2004/2005 boken om fysikk utgitt privat og inkludert # i denne plattformen og tilgjengelig under mitt # kunsternavn stein von reusch ved nb.no nasjonalbibl. # i denne boken fremsettes en tallteori som bryter # med de teser som preger filosofiske vurderinger av # tall ved de universiteter som fremdeles kan sies # aa vaere preget av det 20. aarhundrets tenkesett. # denne tallteori er likevel ikke noedvendig aa gaa # inn paa naar vi forholder oss til endelig mengde # dataer som vi analyserer gjennom enkel dataprogrammering, # og det er bra, fordi den tese jeg lagde om denne tall- # teori ble simpelthen avvist av universitet i oslo. # men uansett fikk jeg levert tesen og dermed paa sett # og vis faatt markert den og gitt den en form for # publiseringsstatus (den er verbatim i MYWEBOOK.TXT # som finnes baade i firth.iso plattformen og i # link i yoga4d.org siden). den som er naermest # den tesen jeg kom med er nederlandske L E J Brouwer, # hvis du har lyst til aa laere om konflikten innen # teorien om tall og grenser for tall. mitt arbeid # tok som utgangspunkt en rekke refleksjoner blant # annet oppsummert i det jeg kaller 'The Manhattan # Transformation', en scifi utforskning og del av # Firth-platformen som erotiske minigames, etter en # veldig fruktbar poetisk skrivefase i New York's # Manhattan, og med samtaler med bohemske intellektuelle # der ofte ogsaa om fysikk f.eks. med Davd Schonberg # og Ray Strano. Brouwers arbeid kan man si ble viderefoert # av dette arbeidet, og jeg regner det som koherent og # naturlig, i likhet med Louis de Broglie's post-1951, # post-Bohm fysiske arbeid, og endel av det filosofiske # grunnlag i en meningsfull fremtidig universitets eller # akademisk struktur. dette krever en frihet fra loyalitet # til den akademiske kultur som har lagt tvil inn i sterkt # begrensete soner, og som verdsetter tankeloyalitet i # i altfor stor grad. langt tidligere enn samtalene med # naess var et mindre knippe samtaler med David Bohm av # stor betydning i samme retning. Programmeringsspraaket # PMN er i en small grad R inspirert, men inspirert ogsaa # av denne nye tallteori, og min egen super model fysikk # teori, -- disse gir rom for multiple perspektiver. Saa, # PMN kaller vi derfor ogsaa for The MultiVerse # Programming language. G15 Multiversity skal ha alle disse # ingredienser i den grad det gir mening for aa utvikle # ogsaa en viss karriere-bygging. Mer om pmn osv. # i norskesites.org/fic3. # *** # er programmet ovenfor fremdeles i minnet til R? # da kan du bruke tallene slik vi antydet ovenfor, # forut for de personlige merknader, til aa lage # matriser. vi tar dette med fordi dette kan ligge # veldig naert inntil mange f.eks. samfunns- # vitenskapelige statistiske arbeidsveier: matrise1 <- matrix(forskningsdata, nrow = 3) matrise2 <- matrix(forskningsdata3, nrow = 2) show(matrise1) show(matrise2) # merk at hvis du presser pil-opp paa tastaturet vil du # normalt faa opp sist(e) linjer tastet slik at du kan # repetere denne kommando, eller redigere den, og taste # linjeskift paa nytt. # de to matrisene kommer ut omtrent slik: # [,1] [,2] [,3] # [1,] 3 13 55 # [2,] 5 21 3 # [3,] 8 34 5 # og, # [,1] [,2] [,3] [,4] # [1,] 234 234 3983 8472 # [2,] 233 4933 3982 3989 # dermed kan vi lage henholdsvis 3 og 4 soeyler ved barplot(matrise1) # og barplot(matrise2) # og vi kan legge til tekst ved kommandoer av den typen # vi allerede har brukt i tidligere eksempler -- se blant # annet eksemplet med "predicted PC sales" som fastslaar at # det forventes voldsom vekst i salg av lysegroenne PCer.. # ok! # -- henning reusch braaten, h-reusch@frisurf # jeg kunne sagt det hver gang men jeg sier det her: # vennlig send kommentarer til meg alias aristo tacoma # dersom du finner noe som burde oppdateres i disse r-tutorials # siden jeg hadde en personlig kommentar til mitt samarbeid # med arne naess ovenfor, la meg ogsaa forklare noe av mitt # pen name virvar: # jeg heter egentlig stein til fornavn, men mellomnavnet # henning er siden skolealder og i norske sammenhenger # brukt mye siden min far har samme navn, -- og jeg bruker # often reusch, min mors pikenavn -- og hennes bestemors # von weber -- siden dette egner seg bedre paa engelsk uten # ring over a i braten og alt det der! "aristo tacoma" er # derimot en total bokstav-for-bokstav intuitiv konstruksjon # som fotograf bruker jeg stein reusch weber simpelthen # fordi den foerste profesjonelle modellen jeg fotograferte # paa veldig vellykket maate konstruerte dette som mitt # fotografnavn! :-)