DATORÖVNING 1: BESKRIVANDE STATISTIK OCH SIMULERING

Relevanta dokument

DATORÖVNING 2: SIMULERING

Mer om slumpvariabler

Matematikcentrum 1(6) Matematisk Statistik Lunds Universitet MASB11 - Biostatistisk grundkurs VT2014, lp3. Laboration 2. Fördelningar och simulering

Laboration 1: Introduktion till R och Deskriptiv statistik

Datorövning 1 Fördelningar

Laboration 2: 1 Syfte. 2 Väntevärde och varians hos en s.v. X med fördelningen F X (x) MATEMATISK STATISTIK, AK FÖR BYGG, FMS 601, HT-08

I den här datorövningen ser vi hur R kan utnyttjas för att kontrollera modellantaganden och beräkna konfidensintervall.

STOCKHOLMS UNIVERSITET VT 2011 Avd. Matematisk statistik GB DATORLABORATION 1: TIDSSERIER.

Demonstration av laboration 2, SF1901

SF1900 Sannolikhetsteori och statistik, HT 2017 Laboration 1 för CINEK2

Föreläsning 3. Sannolikhetsfördelningar

Innehåll. Vad är MATLAB? Grunderna i MATLAB. Informationsteknologi. Informationsteknologi.

Målet för D2 är att studenterna ska kunna följande: Dra slumptal från olika sannolikhetsfördelningar med hjälp av SAS

Matematikcentrum 1(7) Matematisk Statistik Lunds Universitet Per-Erik Isberg. Laboration 1. Simulering

Datorövning 1: Fördelningar

Matematikcentrum 1(7) Matematisk Statistik Lunds Universitet MASB11 - Biostatistisk grundkurs HT2007. Laboration. Simulering

MATLAB. Python. Det finns flera andra program som liknar MATLAB. Sage, Octave, Maple och...

repetera begreppen sannolikhetsfunktion, frekvensfunktion och fördelningsfunktion

Index. Vektorer och Elementvisa operationer. Summor och Medelvärden. Grafik i två eller tre dimensioner. Ytor. 20 januari 2016 Sida 1 / 26

Introduktion till Matlab

Laboration: Grunderna i MATLAB

Finansiell Statistik (GN, 7,5 hp,, HT 2008) Föreläsning 3

Kapitel 4 Sannolikhetsfördelningar Sid Föreläsningsunderlagen är baserade på underlag skrivna av Karl Wahlin

En introduktion till och första övning for Excel

Variabler. TANA81: Beräkningar med Matlab. Matriser. I Matlab skapas en variabel genom att man anger dess namn och ger den ett värde:

Diskreta slumpvariabler

Datorövning 1: Fördelningar

Datorövning 1 Statistik med Excel (Office 2010, svenska)

Datorövning 1 Statistik med Excel (Office 2007, svenska)

Problemlösning. Måns Thulin. Uppsala universitet Statistik för ingenjörer 30/ /16

DATORÖVNING 2: STATISTISK INFERENS.

Lektionsanteckningar 11-12: Normalfördelningen

Datorövning 1 Introduktion till Matlab Fördelningar

Målet för D1 är att studenterna ska kunna följande: Använda några av de vanligaste PROC:arna. Sammanställa och presentera data i tabeller och grafiskt

TMS136. Föreläsning 4

MVE051/MSG Föreläsning 7

Laboration: Grunderna i Matlab

Målet för D3 är att studenterna ska kunna följande: Dra slumptal från olika sannolikhetsfördelningar med hjälp av SAS

Diskussionsproblem för Statistik för ingenjörer

Introduktion till Matlab

DATORÖVNING 6: CENTRALA GRÄNSVÄRDES-

Matematisk statistik allmän kurs, MASA01:B, HT-14 Laborationer

DATORÖVNING MED R: INTRODUKTION

träna på att använda olika grafiska metoder för att undersöka vilka fördelningar ett datamaterial kan komma från

Laboration 4: Stora talens lag, Centrala gränsvärdessatsen och enkla punktskattningar

Datorövning 1 Statistik med Excel (Office 2007, svenska)

Introduktion till MATLAB

Linjär algebra med tillämpningar, lab 1

Laboration 3: Stora talens lag, centrala gränsvärdessatsen och enkla punktskattningar

Beskrivande statistik

DATORÖVNING 5: SANNOLIKHETSFÖRDELNINGAR FÖR

17.1 Kontinuerliga fördelningar

TAIU07 Matematiska beräkningar med Matlab

Datorövning 1 Calc i OpenOffice 1

1 Sannolikhet enligt frekvenstolkningen Kast med tärning

Laboration med Minitab

Typvärde. Mest frekventa värdet Används framförallt vid nominalskala Ex: typvärdet. Kemi 250. Ekon 570. Psyk 120. Mate 195.

Instruktion för laboration 1

Grundläggande matematisk statistik

Tentamen TANA17 Matematiska beräkningar Provkod: DAT1 Godkänd: 8p av totalt 20p Tid: 21:a April klockan

SF1922/SF1923: SANNOLIKHETSTEORI OCH DISKRETA STOKASTISKA VARIABLER STATISTIK. Tatjana Pavlenko. 23 mars, 2018

Valresultat Riksdagen 2018

1 Syfte. 2 Moment hos och faltning av fördelningar MATEMATISK STATISTIK, AK FÖR L, FMS 033, HT Angående grafisk presentation

Institutionen för teknikvetenskap och matematik, S0001M LABORATION 2

TANA17 Matematiska beräkningar med MATLAB för M, DPU. Fredrik Berntsson, Linköpings Universitet. 2 november 2015 Sida 1 / 23

Liten handledning i Excel och StarOffice Calc i anslutning till Datorövning 1

SF1905 Sannolikhetsteori och statistik: Lab 2 ht 2011

Histogram, pivottabeller och tabell med beskrivande statistik i Excel

F2 Introduktion. Sannolikheter Standardavvikelse Normalapproximation Sammanfattning Minitab. F2 Introduktion

LUNDS UNIVERSITET 1(6) STATISTISKA INSTITUTIONEN Per-Erik Isberg

MATLAB the Matrix Laboratory. Introduktion till MATLAB. Martin Nilsson. Enkel användning: Variabler i MATLAB. utvecklat av MathWorks, Inc.

När man vill definiera en matris i MATLAB kan man skriva på flera olika sätt.

Tentamen i Beräkningsvetenskap I/KF, 5.0 hp,

Kap 3: Diskreta fördelningar

Använda några av de vanligaste PROC:arna. Sammanställa och presentera data i tabeller och grafiskt

Inledning till OpenOffice Calculator Datorlära 2 FK2005

Matematikcentrum 1(11) Matematisk Statistik Lunds Universitet. R - a guided tour

3 Man kan derivera i Matlab genom att approximera derivator med differenskvoter. Funktionen cosinus deriveras för x-värdena på följande sätt.

Arbeta med normalfördelningar

M0043M Integralkalkyl och Linjär Algebra, H14, Matlab, Föreläsning 1

SF1920/SF1921 Sannolikhetsteori och statistik 6,0 hp Föreläsning 3 Diskreta stokastiska variabler. Jörgen Säve-Söderbergh

Laboration 3. Funktioner, vektorer, integraler och felskattning

Laboration 3. Funktioner, vektorer, integraler och felskattning

Tentamen i Statistik, STA A13 Deltentamen 2, 5p 21 januari 2006, kl

Laboration 1: Beskrivande statistik

Att göra före det schemalagda labpasset.

Statistik 1 för biologer, logopeder och psykologer

Department of Physics Umeå University 27 augusti Matlab för Nybörjare. Charlie Pelland

F8 Skattningar. Måns Thulin. Uppsala universitet Statistik för ingenjörer 14/ /17

SF1920/SF1921 Sannolikhetsteori och statistik, VT 2018 Laboration 1 för CELTE2/CMATD3

Instruktion för laboration 1

1 Stora talens lag. Laboration 2 Matematisk statistik allmän kurs, MASA01:A, HT Teori. 1.2 Uppgifter

Stokastiska signaler. Mediesignaler

Användarmanual till Maple

Innehåll. Vad är MATLAB? Grunderna i MATLAB. Informationsteknologi. Informationsteknologi.

Sannolikhetsteori. Måns Thulin. Uppsala universitet Statistik för ingenjörer 23/ /14

Föreläsning 3. Kapitel 4, sid Sannolikhetsfördelningar

Beräkningsvetenskap och Matlab. Vad är MATLAB? Vad är MATLAB? Användningsområden. Vad är MATLAB? Grunderna i Matlab. Beräkningsvetenskap == Matlab?

Transkript:

UPPSALA UNIVERSITET Matematiska institutionen Måns Thulin - thulin@math.uu.se Statistik för ingenjörer VT 2013 DATORÖVNING 1: BESKRIVANDE STATISTIK OCH SIMULERING Innehåll 1 Inledning 2 2 Komma igång med R 2 2.1 R som miniräknare.............................. 2 2.2 Enkel grafik.................................. 3 3 Att analysera data 4 3.1 Visualisering av data............................. 4 3.2 Numeriska mått................................ 5 3.3 Tvådimensionella data............................ 6 4 Slumpvariabler: modellering och simulering av data 6 4.1 Det sammanlagda antalet drifstopp..................... 7 4.2 Den sammanlagda drifttiden......................... 8 5 *Fördjupning om slumpvariabler och simulering 9 5.1 * Sällsynta händelser............................ 9 5.2 *Simulering inom numerisk analys..................... 9 6 *Mer om R som programmeringsspråk 10 6.1 *Variabler................................... 10 6.2 *Lite mer om vektorer och matriser..................... 11 6.3 *Funktioner.................................. 11 6.4 *If-villkor................................... 11 6.5 *Loopar.................................... 12 7 *Mer om datahantering och grafik 12 7.1 *Spara grafik................................. 12 7.2 *Dataramar.................................. 12 7.3 *Spara och läsa in datafiler......................... 13 8 Att installera R hemma 13 8.1 Windows................................... 13 8.2 Linux..................................... 13 8.3 MacOS X................................... 13 1

1 Inledning I den här datorövningen ska vi bekanta oss med den statistiska mjukvaran R och titta lite på några av dess användningsområden. Målet med datorövningen är Att lära oss hur man kan använda R för att beskriva, illustrera och sammanfatta datamaterial. Att se några första exempel på hur man kan använda R för simulering av komplexa problem där slumpen är inblandad. Några av avsnitten i texten är märkta med en stjärna (*). Dessa är lite mer avancerade och är tänkta att ge fördjupning för den som vill veta mer om slumpvariabler, simulering eller programmering i R. I slutet av texten beskrivs det hur man kan installera R om man har en egen dator hemma. Texten nedan utgår i övrigt från att du använder Windows, men skillnaderna mot att använda programmet i Linux eller MacOS X är mycket små. 2 Komma igång med R I Windows-datorsalarna startas R genom att man väljer och sedan letar upp R i menyn. 2.1 R som miniräknare Start-menyn > Program > Student När du startar programmet möts du av R-prompten > där du kan skriva in olika kommandon. Vi ska först använda R som en räknedosa. Testa t.ex. att skriva in följande kommandon och kontrollera med huvudräkning om R räknar rätt: 2+7 2/(3+5) 8^2 Grunden för mycket av arbetet med R är användandet av funktioner. De skrivs på formen funktionsnamn(a,b,c,...) där bokstäverna innanför parenteserna är de variabler och parametrar som funktionen använder. Exempelvis finns viktiga matematiska funktioner som e x, log(x) och x med i programmet: exp(2) log(2) sqrt(4) exp(log(5)) 2

När du arbetar med den här datorövningen så är det behändigt att ha instruktionerna öppna på datorn i en pdf-läsare. Då kan du kopiera koden direkt från texten till R. Ett annat nyttigt trick är att trycka på uppåtpil när man står i prompten. På så sätt kan man få tillbaka de kommandon som man tidigare skrivit in. Ett exempel på en funktion som har flera parametrar är min, som ger det inmatade värde som är minst: min(2,4,6,8) min(4,6,8) Ibland vill man skriva med kommentarer i sin kod, som ska läsas av människor. Det kan man göra genom att lägga till symbolen # ( brädgård ): # max ger det största värdet: max(4,6,8) # Som i det här fallet är 8. 2.2 Enkel grafik Funktionen curve kan användas för att rita olika grafer. Följande kod ritar funktionen x 2 i intervallet ( 2, 2). curve(x^2,-2,2) Man kan ändra linjens utseende genom olika inställningar, exempelvis med parametern col: curve(x^2,-2,2,col="red") Prova att ändra värdet på col till andra färger. Om man redan har ritat en kurva så kan man lägga till en annan kurva på samma bild genom att lägga till add=true när man använder curve för att rita den nya kurvan: curve(x^2,-2,2,col="red") curve(x^3,add=true,col="blue") Slutligen kan man använda main, xlab och ylab för att sätta en rubrik respektive text på axlarna i figuren: curve(x^2,-2,2,col="red",main="fin figur", xlab="x-axel",ylab="y-axel") col, main, xlab och ylab kan användas med de flesta grafikfunktioner i R. Vi ska snart titta på några exempel. Det finns ett stort antal parametrar som man kan använda för att bestämma utseendet på sin graf. Prova att sätta in olika heltalsvärden (1-6) på parametrarna lty och lwd; t.ex. curve(x^2,-2,2,lty=1,lwd=1) Hur påverkar lty och lwd figuren? 3

3 Att analysera data Hantering av data är grunden för allt arbete i R. Använd följande kommando för att skapa en vektor med namnet x och tilldela den värdena 7, 2, 5: x = c(7,-2,5) Prova nu att skriva x Då visas alltså de värden som vi nyss tilldelade x. Vanligtvis använder vi vektorer för att spara våra datamaterial i R. Härnäst ska vi undersöka några datamaterialet med hjälp av R. Ett svenskt företag som utvecklar hårdmetallstift för borrkronor har i sitt laboratorium undersökt brottsegheten (enhet MPa m) för två material, A och B. Vi ska här använda R för att visualisera och numeriska beskriva mätresultaten. Vi börjar med att läsa in de två datamaterialen: segheta=c(10.352164,10.656582,10.196051,9.995613,10.104502, 9.856742,9.887077,9.648028,9.817729,9.745394) seghetb=c(11.02873,10.82891,11.17634,10.97323,11.20560, 10.61503,10.96547,10.47024, 10.71189,10.83139) Vi kan nu skriva segheta för att få mätvärdena för brottsegheten för material A och seghetb för att få mätvärdena för brottsegheten för material B. 3.1 Visualisering av data Vi börjar med att rita upp ett histogram för mätvärdena för material A: hist(segheta) Histogrammet visar frekvensen av mätvärden i de olika intervallen. Dess form berättar hur värdena är fördelade. Är histogrammet symmetriskt kring dess mittpunkt eller finns det fler värden till vänster eller till höger? Hur ska detta tolkas? Man vill ofta skala om y-axeln så att den sammanlagda arean av rektanglarna blir 1. Det gör man genom att skriva hist(segheta,freq=0) Vi vill jämföra histogrammet för material A med det för material B. Om vi bara skriver hist(seghetb,freq=0) så ritas det nya histogrammet i samma fönster som det gamla, så att det gamla histogrammet försvinner. Genom att skriva dev.new() så kan man öppna ett nytt grafikfönster där ny grafik hamnar: hist(segheta,freq=0) dev.new() hist(seghetb,freq=0) 4

Titta lite på histogrammen, jämför deras form och fundera över vad de säger om skillnaderna mellan de två materialen. Alternativ kan man rita de två histogrammen bredvid varandra i samma grafikfönster, med hjälp av kommandot par: par(mfrow=c(1,2)) hist(segheta,freq=0) hist(seghetb,freq=0) Ett annat nyttigt hjälpmedel är lådagram, som i R fås med funktionen boxplot (från det engelska namnet box-and-whiskers plot). Vi kan rita upp lådagrammen för de båda materialen genom att skriva: boxplot(segheta,seghetb) Vi kan lägga till förklarande text med main och names: boxplot(segheta,seghetb,main="brottseghet", names=c("material A","Material B")) eller kanske piffa upp grafiken lite genom att sätta färg på lådorna med col: boxplot(segheta,seghetb,main="brottseghet", names=c("material A","Material B"), col=c("purple","pink")) Ser det ut att finnas en skillnad mellan brottsegheten hos de båda materialen? För många funktioner i R finns en rad parametrar som man kan använda för att exempelvis ställa in färg och lägga till förklarande texter. För att se en lista över alla parametrar för boxplot kan man skriva:?boxplot Då öppnas ett hjälpfönster där funktionen beskrivs 1 (men ibland är beskrivningarna rätt tekniska). 3.2 Numeriska mått En stor fördel med att använda R är att man slipper räkna ut medelvärden och andra numeriska mått för hand. Medelvärdet får man exempelvis genom funktionen mean: mean(segheta) mean(seghetb) medan summary ger, i tur och ordning, det minsta värdet, undre kvartilen, medianen, övre kvartilen och det största värdet: summary(segheta) summary(seghetb) 1 I Linux-versionen av R måste man trycka på tangenten Q (som i quit) för att lämna hjälpbeskrivningen. För Windows stänger eller minimerar man fönster. 5

Det kan vara intressant att exempelvis observera att det största värdet för material A är mindre än den undre kvartilen för material B! Vad gäller spridningsmått så fås variansen med kommandot var och standardavvikelsen med sd: var(segheta) sd(segheta) sqrt(var(segheta)) # Standardavvikelsen är roten ur variansen! 3.3 Tvådimensionella data För tvådimensionella data är man ofta intresserad av att rita ett spridningsdiagram för de två variablerna. Vi ska här titta på data från ett försök i Alperna, där man mätte kokpunkten för vatten (i grader Celsius) vid olika atmosfäriska tryck (i tum kvicksilver). Vi läser in datamaterialet: kokpunkt=c(90.27778,90.16667,92.16667,92.44444,93.00000,93.27778, 93.83333,93.94444,94.11111,94.05556,95.33333,95.88889, 98.61111,98.11111,99.27778,99.94444,100.11111) tryck=c(20.79,20.79,22.40,22.67,23.15,23.35,23.89,23.99,24.02, 24.01,25.14,26.57,28.49,27.76,29.04,29.88,30.06) och ritar ett spridningsdiagram med funktionen plot: plot(tryck,kokpunkt) Kontrollera vilken variabel som hamnar på x-axeln och vilken som hamnar på y-axeln. Vi kan snygga till det hela lite med några grafiska parametrar. lwd avgör storleken på punkterna: plot(tryck,kokpunkt,main="kokpunkt i Alperna",col="red",lwd=5) Slutligen kan vi räkna ut korrelationen mellan kokpunkt och tryck: cor(tryck,kokpunkt) 4 Slumpvariabler: modellering och simulering av data De mest intressanta tillämpningarna av sannolikhetsteori och statistik rör data som kan beskrivas med slumpvariabler. Vi ska här titta på några exempel där de kommer till användning och visa hur man med datorsimulering kan använda dem för att lösa olika problem. Att simulera data är vanligt inom både industri och vetenskap. Det finns många situationer där de matematiska modellerna är för komplicerade för att man ska kunna räkna ut sannolikheter på något annat sätt eller där man av olika anledningar inte kan samla in data för statistisk analys. Med hjälp av simuleringar kan man då få en uppfattning om slumpbeteendet och till exempel modellera risker av olika slag (exempelvis för avbrott, översvämningar eller kortslutningar). 6

4.1 Det sammanlagda antalet drifstopp Ett företag har 30 fabriker. Under ett år för man statistik över antalet större driftstopp i var och en av fabrikerna. Utifrån insamlade data tror man att driftstopp vid olika fabriker är oberoende av varandra och att då X i betecknar antalet större driftstopp för fabrik i så är X i P o(4). Genom att låta datorn simulera slumpvariabler med fördelningen P o(4) så kan vi försöka få en känsla för hur fördelningen ser ut. Koden nedan gör 1000 simuleringar av antalet driftstopp för en fabrik med hjälp av kommandot rpois, som används för simulering av Poissonfördelningen. Den simulerar därmed hur det hade kunnat se ut om vi samlat in data för en fabrik under 1000 år (och inget på fabriken ändrades under de åren!). Vi ritar sedan upp resultatet i ett histogram. sim1=rpois(1000,4) hist(sim1,main="antalet driftstopp i en fabrik") Prova att köra simuleringen flera gånger för att se hur resultatet varierar. Titta på utseendet på histogrammet. Är fördelningen symmetrisk kring sin mittpunkt eller verkar det som att man oftare hamnar till vänster eller till höger om den? Är avvikelserna lika stora åt vänster och höger? Hur ska det tolkas? Företaget är intresserade av det totala antalet driftstopp i de 30 fabrikerna, dvs av 30 i=1 X i. Det är den sortens problem som vi stötte på på föreläsning 4, där vi behövde räkna ut sannolikheter för summor av slumpvariabler. Koden nedan gör 1000 simuleringar av det totala antalet driftstopp under ett år; vi använder den utan att förklara i detalj vad som görs i de olika stegen. sim2=matrix(na,30,1000) for(i in 1:30) { sim2[i,]=rpois(1000,4) } sim3=colsums(sim2) hist(sim3,main="totala antalet driftstopp i 30 fabriker") Jämför histogrammet med det som vi fick för en enda fabrik. Är fördelningen mer symmetrisk nu än förut? Företaget anser att 4 driftstopp per år är ett för högt genomsnitt och inför ett antal förbättringar som får ner antalet driftstopp till i genomsnitt 2 per år. Då blir istället X i P o(2). Vi jämför fördelningen för antalet driftstopp i en fabrik före och efter förbättringen: par(mfrow=c(1,2)) sim.fore=rpois(1000,4) sim.efter=rpois(1000,2) hist(sim.fore,main="fördelning före förbättring", xlim=c(0,15),ylim=c(0,0.6),freq=false) hist(sim.efter,main="fördelning efter förbättring", xlim=c(0,15),ylim=c(0,0.6),freq=false) Slutligen är företaget intresserade av att veta hur fördelningen för det totala antalet driftstopp i de 30 fabrikerna har förändrats. Vi jämför fördelningen för 30 i=1 X i före och efter förbättringen: 7

par(mfrow=c(1,2)) sim2=matrix(na,30,1000) for(i in 1:30) { sim2[i,]=rpois(1000,4) } sim3=colsums(sim2) sim4=matrix(na,30,1000) for(i in 1:30) { sim4[i,]=rpois(1000,2) } sim5=colsums(sim4) hist(sim3,main="totala antalet driftstopp, före förbättring", freq=false) hist(sim5,main="totala antalet driftstopp, efter förbättring", freq=false) Skalan har ändrats, men verkar fördelningen ha ändrats bortsett från det? Har den samma form som tidigare, eller har formen ändrats (exempelvis genom att bli mindre symmetrisk)? Om formen är densamma, eller åtminstone ungefär densamma, så kan man kanske hoppas på att det finns en fördelning som går att använda för att beskriva 30 i=1 X i då X i P o(m), oavsett vilket värde vi har på m! 4.2 Den sammanlagda drifttiden I en stor serverpark körs hundratals processorer parallellt. Processorerna jobbar konstant från det att de installeras tills de går sönder. Livslängden för en processor, dvs hur länge den kan köras innan den går sönder, beskrivs av en kontinuerlig slumpvariabel som anses vara exponentialfördelad med en genomsnittlig livslängd på 1000 dagar. Fördelningen illustreras av koden nedan, som genomför 1000 simuleringar av livslängden för en processor. sim1=rexp(1000,1/1000) hist(sim1,main="livslängd för en processor") Är fördelningen symmetrisk eller inte? Är avvikelsen till höger om dess mittpunkt större än avvikelsen till vänster? Hur ska detta tolkas? Vid ett tillfälle installeras 100 nya processorer i serverparken. Man är intresserad av att veta vad den totala livslängden är för de 100 nya processorerna, dvs hur länge de sammanlagt kommer att ha arbetat innan alla har gått sönder. Koden nedan gör 1000 simuleringar av den totala livslängden för 100 processorer: sim2=matrix(na,100,1000) for(i in 1:100) { sim2[i,]=rexp(1000,1/1000) } sim3=colsums(sim2) hist(sim3,main="totala livslängden för 100 processorer") Om livslängden för en processor betecknas X i så är den totala livslängden alltså 100 i=1 X i. Precis som i det föregående avsnittet så är vi här därmed intresserade av en summa av slumpvariabler. Jämför histogrammet för den totala livslängden med histogrammen från simuleringarna av driftstopp. Liknar fördelningarna varandra, bortsett från att skalan på histogrammen skiljer sig åt? Vad kan vi dra för slutsatser av detta? 8

5 *Fördjupning om slumpvariabler och simulering 5.1 * Sällsynta händelser När vi introducerade Poissonfördelningen så påstod vi att den kan användas när man räknar hur ofta en sällsynt händelse inträffar under en tidsperiod. Motiveringen var att om X Bin(n, p) där n är stort och p är litet så får man approximationen Bin(n, p) P o(n p). Med hjälp av R kan vi undersöka när approximationen är bra och när den är dålig. Funktionerna dbinom och dpois beräknar sannolikhetsfunktionerna för binomial- respektive Poissonfördelningarna. Om approximationen är bra så ska dessa ge nästan samma svar. På föreläsningen gavs tumregeln är approximationen är tillräckligt bra om n > 10 och p < 0.1. Prova olika värden på n och p i koden nedan för att undersöka om det verkar vara en bra tumregel! # Bestäm värden på n och p: n=20 p=0.1 # Beräkna sannolikhetsfunktionerna: binomial=dbinom(0:n,n,p) poisson=dpois(0:n,n*p) # Rita upp sannolikhetsfunktionerna: barplot(rbind(binomial,poisson), beside=1, col=c("purple","pink"), legend.text=c("bin(n,p)","po(n*p)"), ylab="sannolikhetsfunktion",xlab="x", main=paste("jämförelse av Bin(n,p) och Po(n*p) då n =",n,"och p =",p)) 5.2 *Simulering inom numerisk analys Numeriska metoder som bygger på simulering av slumpvariabler kallas Monte Carlometoder. Dessa används inte bara inom slumpmodellering, utan även inom exempelvis numerisk analys. Med hjälp av slumpvariabler kan man beräkna integraler numeriskt, vilket vi kort ska illustrera som avslutning på datorövningen. Funktionen 1 x 2 bildar en kvartscirkel på intervallet (0, 1). Vi provar att rita upp den med R: curve(sqrt(1-x^2),0,1) För att beräkna 1 0 1 x 2 dx, dvs arean under kurvan i figuren, kan vi simulera par (X i, Y i ) av slumptal som är likformigt fördelade 2 i kvadraten (0, 1) 2. Om vi simulerar ett stort antal likformigt fördelade talpar kan vi beräkna arean under kurvan som andelen talpar som hamnar under kurvan. 2 Vi tänker oss att slumptalen kan anta alla värden i intervallet, så att det här är fråga om kontinuerliga slumpvariabler och inte diskreta slumpvariabler! 9

För att illustrera principen simulerar vi 100 talpar: # Antal simulerade talpar: n=100 # Simulera (x,y) x=runif(n) y=runif(n) # Kontrollera vilka talpar som ligger på eller under kurvan: under.kurvan = y<=sqrt(1-x^2) # Ger värdena TRUE eller FALSE # Rita upp kurvan igen: curve(sqrt(1-x^2),0,1,lwd=2) # Rita ut de simulerade talparen, med punkter under kurvan i rött: points(x,y,col=under.kurvan+1) # Hur stor andel av punkterna är röda? integralen=sum(under.kurvan)/n Analytiskt får vi 1 0 1 x 2 dx = π/4. Vad blir resultatet av Monte Carlo-beräkningen? Kommer svaret närmare π/4 när antalet simulerade talpar ökas? Monte Carlo-beräkning av integraler är ganska ineffektivt inom envariabelanalys, då de kräver fler iterationer än andra metoder (metoderna är O(1/ n)). Däremot är de mycket användbara inom flervariabelanalys, där andra metoder är för svåra att implementera eller dras med andra problem. Ofta används mer sofistikerade integrationsmetoder än den vi presenterade ovan; en typ av metoder som kallas MCMC, Markov Chain Monte Carlo, används idag flitigt inom en rad olika områden. 6 *Mer om R som programmeringsspråk 6.1 *Variabler Hantering av vektorer är viktigt i många beräkningsprogram. Vi skapade tidigare vektorn x: x = c(7,-2,5) Man refererar till exempelvis det andra elementet genom att skriva x[2] och till element 2 och 3 genom x[2:3] Vektorer kan manipuleras, t.ex. genom att addera en konstant till samtliga element; prova x+100 10

En vektor x bestående av talen 1, 2,..., 10 kan enkelt skapas genom att skriva y = c(1:10) Med hjälp av semikolon kan man skriva fler kommandon efter varandra på samma rad: y[1:5]+1; y^2 6.2 *Lite mer om vektorer och matriser Vektorer med särskilt valda, regelbundna mellanrum mellan elementen kan skapas med kommandot seq: z = seq(0,10,2) Kommandona rbind och cbind kan användas för att foga samman rad- eller kolumnvektorer och därmed skapa matriser. Prova följande: x = c(1,2,3); y = c(4,5,6); A = cbind(x,y); B = rbind(x,y); C = t(b) Det sista kommandot ger matristransponat. 6.3 *Funktioner Ibland är man intresserad av att skapa egna funktioner i R, vilket lyckligtvis är ganska enkelt att göra. Ett exempel är: powern=function(x,n=2) { z=x^n return(z) } som skapar en funktion powern som har två inparametrar; dels en vektor x och dels en vektor n. Om inget värde ges på n så använder funktionen det förinställda värdet n=2. Funktionen returnerar x n. Efter att vi har definierat funktionen så kan vi anropa den precis som vilken annan funktion som helst: powern(2) powern(4,-1) powern(4,1/2) x=c(1,2,3); powern(x,x) Dock måste vi definiera funktionen på nytt varje gång vi startar R. 6.4 *If-villkor If-else-satser fås på samma sätt som i de flesta andra programmeringsspråk. Kommandot cat används för att skriva ut text: slantsingling<-rbinom(1,1,1/2) if(slantsingling==0) { cat("krona! \n") } else { cat("klave! \n") } x==y kontrollera om två variabler x och y är lika, medan x<y och x<=y undersöker om x är mindre än respektive mindre än eller lika med y. 11

6.5 *Loopar Loopar kan skapas genom både for och while: for(i in 1:10) { cat(i,"\n") } i<-1 while(i<=10) { cat(i^2, "\n") i<-i+1 } 7 *Mer om datahantering och grafik 7.1 *Spara grafik Om man kör R i Windows så kan man spara grafik genom att högerklicka på figuren. Ett alternativ är att använda kod för att spara sin grafik: pdf("fig1.pdf", width=8, height=8, title="min pdf") curve(x^2,-5,5,xlab="x-axel",ylab="y-axel",main="bild som pdf!") dev.off() Figuren sparas i filen fig.pdf. Man kan spara grafik i andra format än pdf genom att byta ut pdf(fig1.pdf",... mot någon av följande postscript("fig1.ps",...) postscript("fig1.eps",...) png(file="fig1.png",...) jpeg(file="fig1.jpg",...) bitmap(file="fig1.bmp",...) 7.2 *Dataramar Med kommandot data.frame organisera data av olika slag i en dataram och sedan extrahera olika delar av datamaterialet. Låt säga att vi sammanfattar data för några personer som följer: langd = c(180,175,190); vikt = c(75,82,88); namn = c("adam","bertil","cesar") friends = data.frame(namn,langd,vikt) Data ligger nu samlat i en matrisliknande struktur: friends som alltså är det som vi kallar dataramen. Vi kan plocka ut de delar vi är intresserade av genom att använda dollartecken: friends$namn 12

7.3 *Spara och läsa in datafiler Man kan spara data från R i textfiler med kommandot write.table. Exempelvis kan vi spara dataramen friends som vi skapade ovan: write.table(friends,file="friends.txt") Textfilen friends.txt hamnar automatiskt i arbetsmappen. När vi senare vill läsa in datamaterial i R igen och spara det i variabeln friend2 skriver vi nu 3 friends2=read.table("friends.txt") 8 Att installera R hemma 8.1 Windows Gå till http://ftp.sunet.se/pub/lang/cran/bin/windows/base/ och klicka på Download R 2.15.2 for Windows. Dubbelklicka på den nerladdade filen för att påbörja installationen. 8.2 Linux Instruktionerna nedan är för Ubuntu. För övriga distributioner, se http://ftp.sunet.se/pub/lang/cran/bin/linux/ Öppna en terminal och skriv sudo gedit /etc/apt/sources.list Lägg till raden deb http://ftp.sunet.se/pub/lang/cran/bin/linux/ubuntu oneiric/ längst ned i filen. Om du kör en annan Ubuntuutgåva än oneiric så ändrar du till den utgåvans adjektiv (lucid, natty, hardy...) istället. Spara och avsluta gedit. Du kan nu installera R från terminalen genom att skriva sudo apt-get update sudo apt-get install r-base Programuppdateringar fås automatiskt tillsammans med andra systemuppdateringar. Du startar programmet genom att skriva R i terminalen. 8.3 MacOS X Gå till http://ftp.sunet.se/pub/lang/cran/bin/macosx/ och klicka på R-2.15.2.pkg (latest version). Dubbelklicka på den nerladdade filen för att påbörja installationen. 3 Eftersom filen ligger i arbetsmappen så räcker det med att skriva filnamnet när man använder read.table för att läsa in data. Alternativt kan man skriva hela sökvägen (t.ex. C:\Filer\Statistik\friends.txt) för att komma åt filer som inte ligger i arbetsmappen. 13