UPPSALA UNIVERSITET Matematiska institutionen Jesper Rydén Statistik för ingenjörer 1MS 008 vt 2010 DATORÖVNING 1: INTRODUKTION, BESKRIVANDE STATISTIK 1 Inledning Utvecklingen av datorer har lett till uppkomsten av många statistiska programpaket. Dessa påminner ofta om varandra till stora delar. Programmen kan användas för beskrivande statistik, exempelvis genom frekvenstabeller eller olika grafiska metoder. Beträffande inferentiell statistik återfinns ofta de flesta av de mer eller mindre standardbetonade testen, regressionmodeller osv. Programpaketet R innehåller färdiga kommandon för flera av de statistiska standardmetoderna. Det har också fördelen att man kan programmera och skriva sina egna funktioner. Sist men inte minst är R fri programvara. Statistiker runtom i världen bidrar med rutiner inom sina specialområden och allt är tillgängligt via internet: http://www.r-project.org Det primära syftet med den här laborationen är att ge en första introduktion till R. Framställningen är indelad i tvåhuvudmoment: allmänt om R (enkla beräkningar, vektorer, grafik, dataformat); beskrivande statistik (enkla läges- och spridningsmått; histogram, lådagram) 2 Komma igång med R I Windows-datorsalarna startas R genom att man väljer Start-menyn > Program > R > Rgui Enklare kommandon eller kommandosekvenser ges direkt vid kommandoprompten (i denna stencil används symbolen hake, >) men som nämnts ovan kan även egna program skrivas (s.k. scripts). 2.1 Allmänna kommandon, vektorer och enkel plottning Vi ska först använda R som en räknedosa. Testa t.ex. följande kommandon och kontrollera med huvudräkning om R räknar rätt: 1
> 2+7 > 2/(3+5) > sqrt(9)+5^2 > sin(pi/2)-log(exp(1)) Hjälp om specifika kommandon kan fås genom att skriva ett frågetecken före själva kommandot, prova t.ex. följande: >?log Alternativt kan help användas; i detta fall, help(log). Använd gärna hjälpkommandot fortsättningsvis om du är osäker på något 1. För övrigt skrivs kommentarer i R som följande exempel visar (med symbolen brädgård ): > 2+3 # En enkel summering Vektorer och matriser Hantering av vektorer är viktigt i många beräkningsprogram. I R används följande kommandon för att skapa en vektor med namnet hello och tilldela den värdena 7, 2, 5: > hello <- c(7,-2,5) (Symbolen <- utläses tilldelas.) Man refererar till exempelvis det andra elementet genom > hello[2] och till element 2 och 3 genom > hello[2:3] Vektorer kan manipuleras, t.ex. genom att addera en konstant till samtliga element; prova > myconst <- 100; hello + myconst (Med semikolon kan en följd av kommandon skrivas på en och samma rad.) En vektor x bestående av talen 1, 2,..., 10 kan enkelt skapas genom att skriva > x <- c(1:10) Vektorer med särskilt valda, regelbundna mellanrum mellan elementen kan skapas med kommandot seq: > hej <- 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) (Sista kommandot ger matristransponat.) 1 I Unix-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. 2
Enkel grafik Funktionsgrafer kan ritas enkelt genom att konstruera lämpliga vektorer. Exempelvis: > x <- seq(0,10,0.2); y <- sqrt(x); plot(x,y); grid() Det sista kommandot lägger på ett rutnät. Om man vill rita flera plottar i olika fönster kan kommandot x11() användas för att öppna ett nytt grafikfönster. I annat fall skrivs den senast ritade figuren över av den nya vid uppritning av en ny figur. UPPGIFT. Rita kurvan y = x 2 i intervallet 2 x 2. (Tänk på vad du vill åstadkomma med figuren: Funktionsvärden i några diskreta punkter? En snygg, kontinuerlig kurva? Fundera över lämpliga val av inparametrar till seq samt studera hjälptexten till plot. Inparametern type kan vara intressant.) 2.2 Skapa och läsa in datafiler Skapa data Det går fint att med kommandot data.frame organisera data av olika slag och sedan extrahera delmängder därav, som vi ska se. 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) Givet en datastruktur kan data extraheras: > mina.namn <- friends$namn Inläsning av data Mycket vanligt är att data finns lagrat externt i en fil. I sådant fall används ofta kommandot read.table för att läsa in data och lagra i en data.frame-struktur. Även kommandot scan kan vara användbart. För inläsning av Excelfiler sparas lämpligen Excelfilerna i s.k. csv-format, varefter kommandot read.csv används. Vi återkommer till inläsning av data i senare laborationer. 3 Analys av datamaterial: Bilar Flera datamaterial följer med R initialt, dvs. är inbyggda. Vi ska här studera ett datamaterial med ursprung från 1970-talets början där diverse uppgifter om personbilar presenteras. Ladda in datamaterialet genom att skriva > data(mtcars) Data ligger här lagrat i en data.frame-struktur. För att få en utskrift på skärmen av hela datamaterialet, skriv helt enkelt 3
> mtcars Läs en närmare beskrivning om data genom kommandot >?mtcars UPPGIFT. Efter att ha läst beskrivningen av data, svara på följande frågor: 1. Hur många bilmodeller finns med? 2. Vilka årsmodeller är aktuella? 3. Vad är innebörden av storheten mpg? 4. Med kommandot subset kan man utföra sökningar som uppfyller vissa villkor. För att t.ex. finna bilar med 5 växlar framåt, prova subset(mtcars,gear==5). Vad innebär subset(mtvars,(wt>5 & disp<470))? 3.1 Deskriptiv statistik Data kan summeras i några enkla mått som medelvärde, standardavvikelse, största och minsta värde osv. En utskrift på skärmen över några sådana mått fås genom kommandot > summary(mtcars) Diverse mått kan även studeras för variabler en i taget, t.ex. > mean(mtcars$hp); median(mtcars$hp); quantile(mtcars$wt); max(mtcars$mpg) > var(mtcars$mpg); sd(mtcars$mpg) # Varians och standardavvikelse Tips: Kommandot attach. Genom att först skriva attach(mtcars) förkortas referenserna till variabler inom mtcars; ovanstående kommandorad blir då > mean(hp); median(hp); quantile(wt); max(mpg) > var(mpg); sd(mpg) UPPGIFT. 1. Vilket är det lägsta värdet på variabeln mpg? 2. Vilken är den tyngsta vikten hos bilarna i datamaterialet? 3. Reflektera över medianvärdet hos variabeln am. 3.2 Visualisering av data Histogram Med hjälp av ett histogram kan spridningen hos kontinuerliga data studeras. Normalt väljer datorprogrammen automatiskt antal klasser, klassbredd osv. Med hjälp av kommandot hist i R kan histogram uppritas. Kommandosekvensen nedan ritar upp histogram i två fönster; till vänster åskådliggörs data för variabeln mpg, till höger för variabeln wt: 4
> par(mfrow=c(1,2)); hist(mtcars$mpg); hist(mtcars$wt) Kommandot par(mfrow=c(n,m)) gör att grafikfönstret får plats för n m figurer (n rader och m kolumner). Med hjälp av inparametern freq i anropet av hist kan alternativt ett normerat histogram ritas, med relativ frekvens på ordinatan. Läs mer i hjälptexten och tag reda på vad hist(mtcars$mpg,freq=false) innebär. Kontrollera själv direkt med R. Lådagram Även lådagram (engelska: boxplots) ger en fin överblick över spridning hos datamaterial. Dessutom kan man visuellt läsa av median och kvartiler samt eventuella avvikande värden (s.k. outliers). Kommandot i R heter boxplot och vi tillämpar detta återigen på två variabler från datamaterialet om bilar: > par(mfrow=c(1,2)); boxplot(mtcars$mpg); boxplot(mtcars$wt) Kontrollera med kommandot median direkt på data att medianen i lådagrammet stämmer. Spridningsdiagram Spidningsdiagram (engelska: scatterplots) är av intresse för att studera eventuella funktionssamband och beroende variabler emellan. En variabel ritas på ordinatan, den andra på abskissan. Prova t.ex. > plot(mtcars$wt,mtcars$mpg) Övertyga dig om att lutningen på punktsvärmen verkar rimlig. Korrelationskoefficienten för data fås med hjälp av kommandot cor. Vad blir den i detta fall? Några ytterligare diagram Två kommandon som kan vara intressanta är barplot som ger ett stolpdiagram och pie som ger ett tårtdiagram. UPPGIFT. Rita histogram för variablerna hp och qsec. Rita lådagram för variablerna hp och qsec. Rita spridningsdiagram för variablerna hp och qsec. Kommentar? 5