UPPSALA UNIVERSITET Matematiska institutionen Jesper Rydén Matematisk statistik 1MS026 vt 2015 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 (Alm & Britton: Övning 8.4.3.) En bilägare vill undersöka om bensinförbrukningen hos bilen beror på bensinens oktantal. Vederbörande tankar premium och regular i slumpmässig ordning och noterar varje gång medelförbrukningen. Efter en tid erhålls följande tabell: Kvalitet Premium 0.87 0.93 0.82 0.95 0.86 Regular 0.88 0.96 0.92 0.94 Testa vid 5% felrisk om det föreligger någon skillnad i bensinförbrukning mellan de två bensinkvaliteterna. Nollhypotes: Bensinförbrukningen kommer från samma fördelning, oavsett oktantal. Vi använder Wilcoxons rangsummetest, rutinen wilcox.test, då vi inte är säkra på antagande om fördelning. Studera med hjälpkommandot anropsparametrarna till wilcox.test, t.ex. hur ensidigt vs. tvåsidigt test kan hanteras. I R blir koden som följer: prem = c(0.87,0.93,0.82,0.95,0.86) regu = c(0.88,0.96,0.92,0.94) wilcox.test(prem,regu,two.sided=false) Slutsats från testet (ett p-värde rapporteras)? I utskriften ges dessutom ett värde på måttet W, relaterat till rangsummor; i R är detta summan av rangerna för första stickprovet (här: regu) minus minsta möjliga rangsumman för detta stickprov. (Här: (3 + 6 + 1 + 8 + 2) (1 + 2 + 3 + 4 + 5) = 5.)
2.2 Parade stickprov Exempel 1. Vi studerar här 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 antages vara densamma för de bägge åren. Anrop i R: wilcox.test(immer$y1, immer$y2, paired=true) Slutsats, baserat på p-värde? (I utskriften motsvarar V rangsumman för de positiva differenserna.) Exempel 2. 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, ordinarie ny, ä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 att angripa problemet: 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. Ur exemplets räkningar fås p-värdet 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 verkligen 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, vilken utför dragning med återläggning. 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, vilka för översiktens skull presenteras i matrisformat (10 5): 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 från N(50, 5 2 ), aktiverar rutinen resamp samt gör anrop till denna (med B = 5000). Sist sker en beräkning av konfidensintervall på klassiskt sätt, för smidighetens skull utfört med t.test. x = rnorm(10,50,5) source("resamp.r") boot.result = resamp(x,b=5000,theta=mean) boot.result t.test(x,mu=50) # Nollhypotes: väntevärdet = 50 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 på den senare frågan är ja, om stickprovet är tillräckligt stort (centrala gränsvärdessatsen). Beräkna nu punktskattning för väntevärdet samt intervall som i simuleringsstudien ovan: boot.result = resamp(quakeper$v1,b=5000,theta=mean) boot.result t.test(quakeper$v1)$conf.int Jämför resultaten för konfidensintervallen: 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.