UPPSALA UNIVERSITET Matematiska institutionen Jesper Rydén Matematisk statistik 1MS026 vt 2014 DATORÖVNING MED R: ANALYS AV KORSTABELLER, RANGSUMMETEST, ÅTERSAMPLINGSMETODER I denna datorövning studerar vi hur olika typer av χ 2 -test och rangsummetest kan utföras med R, samt tittar avslutningsvis på några enkla exempel på återsampling, det senare ett exempel på s.k. datorintensiv statistisk metod. I det senare fallet används en färdig rutin (ett s.k. script) som får laddas ned: resamp.r. 1 Analys av korstabeller Vid statistisk analys där χ 2 -metoder används är det centrala kommandot chisq.test. Vi skall här studera några typexempel. 1.1 Enkelt χ 2 -test Vid ett korsningsförsök med en viss blomma förekommer färgerna purpur, röd och vit. Enligt en genetisk teori som bygger på vissa antaganden ska färgerna förekomma i proportionerna 27:9:28. Detta medför att p 1 = P(Purpurfärgad blomma) = 27 27 + 9 + 28 = 27 64 och analogt gäller p 2 = 9/64 och p 3 = 28/64 för röd resp. vit avkomma. En empirisk studie resulterade i följande tabell: Pröva på felrisknivån 5% hypotesen Med R gör vi som följer: blomfarg <- c(158,19,123) ph0 <- c(27/64,9/64,28/64) chisq.test(blomfarg, p=ph0) Tolka på sedvanligt vis resultatet. Färg Purpur Röd Vit Antal 158 19 123 H 0 : p 1 = 27 64, p 2 = 9 64, p 3 = 28 64
1.2 Homogenitetstest Betrakta följande sammanställning av data för hästkrafter: Stark Medel Svag Summa Fjordhäst 12 8 3 23 Dölehäst 13 13 5 31 Islandshäst 9 8 12 29 Arab 3 5 8 16 Summa 37 34 28 99 För att analysera korstabellen med ett homogenitetstest anropas återigen chisq.test. Kommandon som följer: horses <- matrix(c(12,13,9,3,8,13,8,5,3,5,12,8),ncol=3) chisq.test(horses) Vilken slutsats kan dras om huruvida fördelningen över kraft är densamma för alla hästraser? 2 Rangsummetest 2.1 Två oberoende stickprov Vi återvänder till datamaterialet från datorövning 1, mtcars; detta finns inbyggt i R och läses in genom data(mtcars). Man är nu intresserad av att undersöka om någon skillnad finns i bränsleförbrukning mellan bilar med manuell växellåda, jämfört med bilar med automat. Den kvantitativa variabeln av intresse är mpg, medan den binära variabeln am endast antar värdena 0 och 1 och anger typ av växellåda. Nollhypotes: Bränsleförbrukningen kommer från samma fördelning, oavsett typ av växellåda. Vi använder Wilcoxons rangsummetest, wilcox.test, då vi kanske inte är säkra på antagande om normalfördelning. Studera med hjälpkommandot anropsparametrarna till wilcox.test, t.ex. hur ensidigt vs. tvåsidigt test kan hanteras. Lägg märke till att data här är sparat enligt strukturen data.frame (jämför datorövning 1). Vi presenterar här två tillvägagångssätt att R-tekniskt hantera data. Alt. 1. Idén är här att först söka ut bilar med avseende på växellådstyp och spara i två objekt; huvudrutinen för sökningen är subset. Ur dessa kan sedan extraheras variabeln mpg varefter Wilcoxons test appliceras. Koden blir som följer: aut <- subset(mtcars,am==0) man <- subset(mtcars,am==1) wilcox.test(aut$mpg,man$mpg) Slutsats från testet? Alt. 2. I just detta fall, där man har en binär variabel som delar in i fall, kan man göra anropet utan att spara i separata objekt som ovan: wilcox.test(mpg~am,mtcars) Jämför med svaret från Alt. 1. Arbete med symbolen används flitigt i regressionsanalys med R, mer om det i senare datorövningar.
2.2 Parade stickprov Vi studerar nu resultaten av odling av korn under två olika år (1931 och 1932). Ladda in data och läs närmare information genom följande kommandosekvens: library(mass) data(immer)?immer Man vill jämföra avkastningen mellan de två åren, och dåflera olika platser anges är det viktigt att använda en parvis modell. Nollhypotes: Fördelningen för avkastning av korn är densamma för de bägge åren. Anrop i R: wilcox.test(immer$y1, immer$y2, paired=true) Slutsats? Vi studerar nu exempel 8.15 i kursboken (sid. 392). Det rör sig där om ett parat stickprov, men vi kan inte se ursprungsdata eftersom differenserna är givna direkt. Man var intresserad av en mothypotes av ensidig typ (ny komponent bättre, minskar CO-nivån). Det finns här två sätt angripa: x <-c(1.1,2.4,-1.8,1.2,3.4,-0.7,4.1,1.0,2.5,1.2,2.4,1.3,-2.3, 1.3,1.9, -1.7,3.9,-1.6,4.4,-0.5,2.7,1.2,-1.2,3.4) wilcox.test(x,alternative="greater") Blir det signifikant resultat på nivån 0.01? Jämför det erhållna p-värdet i R med bokens räkningar; p-värdet kan beräknas därur som Φ( 2.56) vilket beräknas i R med pnorm(-2.56). Det kan skilja någon decimal mellan resultaten; R varnar för ties, dvs. dubletter (alltså inte slipsar). Angreppssätt 2: Om man mer ortodoxt vill uppfatta data som två stickprov kan man skapa en andra parad vektor och därefter återigen utföra testet med wilcox.test, fast med något ändrade anropsparametrar: x <- c(1.1,2.4,-1.8,1.2,3.4,-0.7,4.1,1.0,2.5,1.2,2.4,1.3,-2.3, 1.3,1.9,-1.7,3.9,-1.6,4.4,-0.5,2.7,1.2,-1.2,3.4) y <- rep(0,length(x)) wilcox.test(x,y,paired=true,alternative="greater") Verifiera att p-värdet blir detsamma som ovan. 3 Återsamplingsmetoder Vi hänvisar till kursboken, kap. 8, för bakgrund till metoderna. Läs igenom nämnda avsnitt innan du ger dig i kast med datorarbetet!
3.1 Inledande exempel Givet ett stickprov kan återsampling ske med kommandot sample. Här är ett fingerat stickprov om 5 observationer, säg kroppslängder i cm: x <- c(165,182,170,173,190) sample(x,replace=t) Prova att anropa med sample några gånger och se hur utfallet varierar från gång till gång. Ett centralt inslag för återsamplingsmetoder är att kunna utföra dragningen från stickprovet många gånger. Vi bygger ut exemplet ovan och simulerar 10 stickprov. Dessa lagras i matrisen simdat. print( simdat <- matrix(sample(x,size=10*5,replace=t),nrow=10) ) 3.2 Inferens för väntevärde Ladda ned rutinen resamp.r till lämplig katalog, öppna den i en editor och försök förstå de olika stegen! Hur används t.ex. den viktiga funktionen sample? Vi ska nu studera bootstrapskattningar för väntevärde och relaterade konfidensintervall för två datamaterial. Dels ska vi analysera ett simulerat datamaterial där vi känner fördelningen, dels ska vi undersöka ett verkligt datamaterial. Simulerade data från normalfördelning Först ska vi simulera från en normalfördelning, dvs. vi vet väntevärde och varians, men i ett praktiskt fall är givetvis dessa parametrar okända och endast normalfördelning förutsätts. I sådant fall finns den grundläggande teorin för inferens kring väntevärde i normalfördelning, och ett intervall fås lätt med R genom att använda t.test. Följande kommandosekvens skapar ett simulerat datamaterial om 10 observationer, aktiverar rutinen resamp samt gör anrop till denna (med B = 5000). Sist sker en beräkning av konfidensintervall på klassiskt sätt. x <- rnorm(10,50,5) source("resamp.r") boot.result <- resamp(x,b=5000,theta=mean) boot.result t.test(x) Jämför resultaten. Bootstrap-proceduren verkar fungera bra i det här exemplet, eller hur? Varför den till synes enkla principen fungerar kan motiveras och bevisas teoretiskt, men det innebär (minst) en egen kurs i sig. En fördel med metodiken är att man kan få en visuell uppfattning om fördelningen för den skattade parametern. Rita helt enkelt upp ett histogram över resultaten från alla B simulerade stickprov: hist(boot.result$thetastar)
Datamaterial: Tider mellan jordbävningar Vi ska nu studera ett datamaterial vilket utgörs av tidsintervall mellan större jordbävningar världen över. Med större avses en magnitud på minst 7.5 på Richterskalan eller mer än 1000 förolyckade personer. Datamaterialet är insamlat under tidsperioden 16 december 1902 till 4 mars 1977. Ladda ned filen quakeper.dat, läs in den i R och starta med ett rita ett histogram. quakeper <- read.table("quakeper.dat") hist(quakeper$v1) Reflektera över fördelningen. Kan normalfördelning anses gälla? Kan man klassiskt beräkna ett intervall för väntevärdet (skattat med x) trots allt? Svaret är ja, om stickprovet är tillräckligt stort (centrala gränsvärdessatsen). Beräkna nu punktskattning för väntevärde samt intervall som ovan: boot.result <- resamp(quakeper$v1,b=5000,theta=mean) boot.result t.test(quakeper$v1) Jämför resultaten: datorintensivt vs. klassiskt. Avslutande kommentar: I exemplen vi studerat gick det att på klassiskt vis beräkna intervall för punktskattningarna och dessa visade sig stämma väl överens med motsvarande intervall erhållna med återsamplingsteknik. Styrkan hos bootstrapmetoderna ligger dock i att kunna göra inferens för mer komplicerade storheter, t.ex. median eller mer allmänt kvantiler, korrelationskoefficienter, osv.