STOCKHOLMS UNIVERSITET 13 februari 2009 Matematiska institutionen Avd. för matematisk statistik Gudrun Brattström Laboration 1: Introduktion till R och Deskriptiv statistik Denna första datorlaboration i kursen Statistisk analys består väsentligen av tre olika delar; först en introduktion till datorprogrammet R som kommer att användas på samtliga laborationer, sedan en övning i att avgöra huruvida ett stickprov kan anses normalfördelat samt, avslutningsvis, en deskriptiv (beskrivande) analys av ett litet datamaterial. Som förberedelse till laborationen bör den teoretiska Uppgift 0 lösas. Uppgift 2 och 3 skall redovisas skriftligt senast det datum som anges på schemat. 0 Två teorifrågor 1. Om en exponentialfördelad variabel har väntevärde a, vad är då dess standardavvikelse? 2. Den stokastiska variablen X är likformigt fördelad med väntevärde a. Vad skall fördelningens undre och övre gränser vara, uttryckt i a, för att standardavvikelsen skall bli lika stor som väntevärdet? (Ledning: Om X U[α, β] så gäller att Var(X) = (β α) 2 /12.) 1 Introduktion till R Programspråket R är ett relativt nytt språk som har växt i popularitet, framförallt hos statistiker, de senaste åren. Till sin struktur och uppbyggnad påminner det starkt om Matlab som ni har jobbat med i kursen Sannolikhetsteori I, men som har den fördelen att det finns gott om färdiga statistiska funktioner som inte finns tillgängliga i Matlab. En annan fördel är att det är gratis för alla att ladda hem det, bland annat från hemsidan www.r-project.org. Där kan ni dessutom hitta hjälp och tips exempelvis via länkarna under rubriken Documentation. 1
1.1 Att komma i gång Börja med att logga in som vanligt och öppna sedan ett terminalfönster genom att högerklicka på musen och gå ner i menyn som dyker upp på skärmen och vänsterklicka på Run Command. Skriv sedan konsole (observera stavning) i det nya fönstret som dyker upp och tryck på Return. Det man bör göra allra först innan man startar R är att skapa ett nytt underbibliotek under sitt huvudbibliotek och sedan flytta sig dit genom operationerna $ mkdir statan1 $ cd statan1 Detta är praktiskt på så vis att alla datafiler och figurer som hör till första laborationen samlas på ett och samma ställe där man inte blandar ihop dem med filer från andra labbar och andra kurser. Nu kan man starta R helt enkelt genom att skriva R i terminalfönstret. Programspråket R fungerar interaktivt precis som Matlab genom att man skriver in kommandon, anropar funktioner och skapar datavariabler vid promptern > som dyker upp. Man kan, precis som i Matlab, när som helst få information om hur ett visst kommando eller funktion fungerar genom kommandot help enligt mönstret > help(mean) eller >?mean som ger information om hur man beräknar medelvärde i R. Man kan också öppna ett hjälpfönster i HTML-format genom kommandot > help.start() där man kan klicka sig fram till olika hjälpsidor. Exempelvis kan man få samma hjälp som ovan om man klickar på Packages, base och mean. När man sedan är klar med laborationen eller vill göra ett uppehåll skriver man bara > q() Då kommer programmet att fråga om man vill spara sin workspace image, det vill säga alla variabler som man har definierat under körningen. Svarar man ja (genom att skriva y) så kommer allting att sparas och laddas in i R när man startar det nästa gång från samma underbibliotek. 2
1.2 Enkla numeriska operationer Datamängder hanteras i R, precis som i Matlab, i form av vektorer som kan skapas enligt > x <- c(2.3,5.9,3.87,42,15.51) där symbolen <- betyder att uttrycket till höger skall lagras i variabeln till vänster. Notera att man måste anropa funktionen c (står för combine) samt att resultatet inte skrivs ut. För att se hur variabeln x ser ut i R, skriv helt enkelt > x De elementära aritmetiska operationerna fungerar precis som i Matlab med symbolerna +, -, * och / för de fyra räknesätten. En skillnad jämfört med Matlab är att alla operationer görs elementvis. Dessutom finns även alla elementära matematiska funktionerna exp, sqrt, log, sin, cos och så vidare tillgängliga som i Matlab. Slutligen kan nämnas att föregående kommando kan återkallas genom att trycka pil uppåt. Detta är praktiskt om man skriver något litet fel i ett långt kommando. I stället för att behöva skriva in alltihop för hand igen kan man återkalla kommandot, rätta felet och exekvera det igen. 1.3 Deskriptiv statistik För att få en uppfattning om hur man kan beskriva ett datamaterial numeriskt och grafiskt skall ni genomföra följande enkla uppgift. I staden Grötköping mättes kroppslängden på 11 av stadens invånare och resultaten (i cm) blev: 174.6 173.2 189.6 167.7 179.2 179.6 170.5 168.5 185.3 164.1 178.4 Börja med att mata in data i variablen x. De vanliga läges- och spridningsmåtten kan enkelt fås med hjälp av funktionerna mean (för medelvärdet), var (för stickprovsvariansen), sd (för standardavvikelsen) och summary (för minimum, maximum, median och kvartiler). Ett träd-bladdiagram fås med stem, histogram (stapeldiagram) med hist, boxplot med boxplot och normalfördelningsplot med qqnorm. I samtliga fall räcker det att ange vektorn x som enda argument så ritar R upp samtliga diagram automatiskt. När det gäller histogram så vill man ibland ha en annan klassindelning än den som R ger automatiskt. Pröva exempelvis > hist(x,seq(162,192,5)) och > hist(x,seq(162,190,4)) 3
och se vad som händer. Kommandot seq(162,190,4) skapar en talsekvens med 162 som första värde, 190 som sista värde med mellanrum 4. Denna talsekvens anger sedan gränserna för klasserna i histogrammet. När det gäller normalfördelningsplotten så är den ju konstruerad på ett sådant sätt att data kommer att ligga längs en rät linje om data verkligen är normalfördelade. En sådan jämförelse underlättas om man ritar ut en rät linje, vilket enkelt åstadkommes med kommandot qqline(x). Om man vill skriva ut sin figur exempelvis ett histogram på skrivare måste man först ange kommandona > postscript("figur.ps") > hist(x) > dev.off() Då skapas postscript-filen figur.ps i ert hembibliotek. För att skriva ut denna, öppna först ett nytt terminalfönster och skriv lpr figur.ps. 1 Uppgift 1 behöver inte redovisas. 2 Kommer data från en normalfördelning? Vid praktiska tillämpningar av matematisk statistik ställs man ofta inför frågan om en uppsättning data kan anses komma från en normalfördelning (eventuellt med viss approximation). Man har således ett stickprov med n oberoende observationer från en okänd sannolikhetsfördelning. Frågan är om den okända fördelningen kan vara en normalfördelning. Vi skall här jämföra olika metoder (främst grafiska) som kan användas för att besvara ovanstående fråga. Vi skall också försöka svara på frågan hur stort n behöver vara för att vi med rimlig approximation skall kunna avgöra om data är normalfördelade eller inte. För detta ändamål skall vi simulera data från för oss kända fördelningar, både normalfördelade och icke-normalfördelade data. Alla fördelningar som ni skall jämföra skall ha väntevärde och standardavvikelse lika med a som ni sätter till de två sista siffrorna i ett av era personnummer. 2.1 Normalfördelade data Normalfördelade data kan enkelt simuleras i R med funktionen rnorm(n,m,s) där n anger antal värden som skall simuleras, m anger väntevärde och s anger standardavvikelse för den fördelning som skall simuleras. Börja med att simulera ett stickprov av storlek 10 enligt > x1 <- rnorm(10,a,a) 1 R kan även skapa bilder i andra format, exempelvis jpeg; detta görs genom att ersätta extensionen.ps med.jpg i ovanstående kommandosekvens. 4
där ni har tilldelat a värdet enligt ovan. Rita sedan upp ett histogram med lämpliga klassgränser. Eftersom vi vet den sanna fördelningen kan vi göra en jämförelse mellan histogrammet och täthetsfunktionen för fördelningen, men då måste vi lägga till argumentet prob=true enligt > hist(x1,prob=true) för att skalan på y-axeln skall bli korrekt. Man kan nu plotta tätheten för normalfördelningen i histogrammet genom kommandona > x <- seq(l,u,1) > lines(x,dnorm(x,a,a)) Första kommandot skapar en sekvens med första värdet l och sista värdet u (välj egna värden på l och u som passar histogrammet). Andra kommandot ritar en kurva med x- koordinater x och y-koordinater dnorm(x,a,a), som beräknar värdet på täthetsfunktionen i punkterna x för en normalfördelning med väntevärde och standardavvikelse a. Rita även en boxplot och en normalfördelningsplot för data. Simulera sedan ytterligare sju stickprov x2, x3,..., x8 av storlek 10 med samma väntevärde och standardavvikelse. Börja med att jämföra stickproven med en gemensam boxplot enligt > boxplot(x1,x2,x3,x4,x5,x6,x7,x8) Lägg märke till att de åtta stickproven verkar skilja sig åt ganska markant trots att de alla är simulerade från samma fördelning. För att få en motsvarande jämförelse mellan histogram måste vi först tala om för R att dela upp det grafiska fönstret i mindre delfönster med kommandot > op=par(mfrow=c(3,3)) Vi skall inte gå in i detalj på hur detta kommando fungerar utan konstatera att det delar in det grafiska fönstret i nio delfönster organiserade i 3 rader och 3 kolumner. (Vill ni ta bort denna indelning och plotta figurer i hela det grafiska fönstret igen så skriv bara op=par(mfrow=c(1,1)).) Rita sedan upp histogram efter histogram enligt > hist(x1) > hist(x2) > hist(x3) och så vidare. För att underlätta jämförelsen kan ni eventuellt skriva om histogrammen med samma klassindelningar. På samma sätt kan man få samtliga normalfördelningsplottar i samma grafikfönster genom kommandot op=par(mfrow=c(3,3)) och 5
> qqnorm(x1) > qqline(x1) > qqnorm(x2) > qqline(x2) och så vidare. 2.2 Likformigt fördelade data För simulering av likformigt fördelade stickprov används i R funktionen runif(n,l,u) där n anger stickprovsstorleken, l anger undre och u anger övre gräns i det intervall som fördelningen är definierad för. Lösningen på Uppgift 0 ger er intervallgränserna för det värde på a som ni använder. Använd denna funktion för att simulera fem oberoende stickprov av storleken 10 och jämför dem grafiskt dels med varandra och dels med de normalfördelade stickproven ovan. Rita exempelvis upp fem normalfördelade stickprov och fem likformigt fördelade stickprov i samma boxplot. 2.3 Exponentialfördelade data Genomför samma jämförelse även för exponentialfördelade stickprov med hjälp av funktionen rexp(n,r), där n är stickprovsstorlek och r är intensiteten i exponentialfördelningen. 2.4 Växande stickprovsstorlekar Upprepa Uppgift 2.2 och 2.3 med stickprovsstorlekarna n = 20, n = 100 och ytterligare något n-värde som ni väljer själva. 2.5 Några sammanfattande frågor 1. Hur stort n behövs för att den likformiga fördelningen skall avslöja sig som ickenormal? 2. Hur stort n behövs för att exponentialfördelningen skall avslöja sig som icke-normal? 3. Vilken grafisk metod är mest effektiv för att avgöra om ett stickprov är normalfördelat? Uppgift 2 redovisas genom skriftliga svar på frågorna 1 3 ovan. Motivera era svar ordentligt. 6
3 Explorativ dataanalys Ni skall nu undersöka ett verkligt datamaterial med de grafiska metoderna ovan samt med så kallade scatterplots som illustrerar beroenden mellan variabler på ett bra sätt. En scatterplot ritas med kommandot > plot(x,y) På kursens hemsida finns filen olvinsprit.txt som innehåller data över genomsnittlig konsumtion av öl, vin och starksprit i några OECD-länder. Börja med att spara filen olvinsprit.txt i underbiblioteket statan1 genom att högerklicka på filen på hemsidan och välja Save Link As.... Eventuellt ger datorn filen ett annat namn i den dialogruta som visas; döp i så fall om den till olvinsprit.txt. Data kan sedan matas in i R genom kommandot > data<-read.table("olvinsprit.txt",header=true) Skapa därefter de fyra variablerna > Land<-data$Land > beer<-data$beer > vin<-data$vin > sprit<-data$sprit En scatterplot ritas med kommandot > plot(beer,vin) vilket ger, i det här fallet, ölkonsumtionen och vinkonsumtionen för samtliga länder. Vill man tydligare se vilka länder punkterna motsvarar kan man i stället skriva > plot(beer,vin,type="n") > text(beer,vin,land) så dyker namnen på länderna upp i stället för punkterna. Illustrera fördelningen för de tre variablerna var för sig. Kan data anses komma från normalfördelningen? Hur ligger Sverige till i förhållande till andra länder? Är Sverige extremt åt något håll? Vilka länder är extrema? Finns det gemensamma drag hos de extrema länderna? Medför hög konsumtion av en typ av alkohol hög eller låg konsumtion av andra? Uppgift 3 skall redovisas skriftligt. Sammanfatta era slutsatser om alkoholkonsumtionen i Europa. Bifoga några illustrativa figurer. 7
4 Skriftlig laborationsrapport Uppgift 2 och 3 ovan skall redovisas skriftligt. Ange tydligt kursens namn, laborationens nummer och ert/era namn! Handskrivna rapporter kommer inte att godkännas. På Linuxdatorerna i datorsalarna finns flera ordbehandlingsprogram som kan användas, däribland L A TEX, i vilket dessa instruktioner är skrivna. För er som är vana vid Windows rekommenderas OpenOffice, som är en slags gratisvariant av Word. Man öppnar OpenOffice genom att klicka på ikonen nere till vänster som liknar en penna och några pappersark. Första gången ni klickar på den kommer det upp några fönster på skärmen som styr hur programmet installeras på er dator. Klicka bara på Next överallt så startar ordbehandlingsprogrammet så småningom. Om ni skickar in er rapport elektroniskt vill vi att ni sparar den i pdf-format. Detta kan man göra i OpenOffice genom att klicka på file och där välja export as PDF.... 8