STOCKHOLMS UNIVERSITET 13 februari 2009 Matematiska institutionen Avd. för matematisk statistik Gudrun Brattström Laboration 3: Enkel linjär regression och korrelationsanalys I sista datorövningen kommer ni att använda enkel linjär regression och korrelationsanalys för att studera egenskaperna hos ett material bestående av bivariata data. Precis som i tidigare övningar kommer först en inledande beskrivning av hur dessa metoder ser ut i R, och sedan följer själva uppgifterna. Enkel linjär regression och korrelationsanalys i R Börja på liknande sätt som i tidigare laborationer med att skapa ett nytt underbibliotek för den här laborationen och flytta sedan dit genom kommandona $ mkdir statan3 $ cd statan3 Om ni måste avbryta laborationen så sparas samtliga variabler i detta bibliotek. När ni sedan vill återuppta arbetet så hoppa direkt till underbiblioteket genom $ cd statan3 och starta sedan R. Enkel linjär regression Enkel linjär regression hanteras i R av funktionen lm. Skriv >?lm för en detaljerad beskrivning av hur denna funktion är uppbyggd. Beskrivningen består av ganska mycket text, som kan vara svår att läsa i terminalfönstret, så ett smidigare sätt är att först skriva 1
> help.start() Då kommer webb-läsaren Mozilla att startas (om den inte redan har startats) och en hjälpsida för R öppnas. När man sedan skriver >?lm kommer hjälptexten att visas i webb-läsaren i stället för i terminalfönstret, vilket kan vara praktiskt. Detta är, som ni kan se, en väldigt kraftfull funktion som kan hantera betydligt mer komplicerade modeller än enkel linjär regression men i den här datorövningen kommer vi endast att använda den i det specialfallet. Det innebär bland annat att vi endast kommer att anropa den med ett enda argument, nämligen formula. Låt oss anta att bakgrundsvariablerna finns lagrade i variabeln x och responsvariablerna i variabeln y. En linjär regressionsanalys i R görs då med kommandona > modell <- lm(y ~ x) > summary(modell) Call: lm(formula = y ~ x) Residuals: Min 1Q Median 3Q Max -1.9827-0.1798 0.1372 0.5361 1.1349 Coefficients: Estimate Std. Error t value Pr(> t ) (Intercept) 1.2588 0.6701 1.879 0.0971. x 0.7941 0.1080 7.354 7.97e-05 *** --- Signif. codes: 0 *** 0.001 ** 0.01 * 0.05. 0.1 1 Residual standard error: 0.9809 on 8 degrees of freedom Multiple R-Squared: 0.8711, Adjusted R-squared: 0.855 F-statistic: 54.08 on 1 and 8 DF, p-value: 7.965e-05 Som ni ser ger kommandot summary en hel del information om modellen. Framförallt ges skattningar av parametrarna α (intercept) och β (lutningskoefficient) samt tvåsidiga test av hypoteserna H 0 : α = 0 och H 0 : β = 0. Kolumnen Pr(> t ) anger p-värdena för dessa test. Tyvärr finns inget enkelt sätt att få R att automtatiskt genomföra ensidiga test, men man kan enkelt få p-värden för ett ensidigt test genom att halvera p-värdet för motsvarande tvåsidiga test. Man får också skattningen av variansen s 2 som Residual standard error och förklaringsgraden R 2 som Multiple R-Squared. För att få residualerna (vilka behövs för att undersöka om förutsättningarna för modellen är uppfyllda) kan man enkelt skriva 2
> residual <- modell$residuals En residualplot fås nu med > plot(x,residual) > lines(c(min(x),max(x)),c(0,0),lty="dotted") Det andra kommandot ritar en prickad ( dotted ) linje längs nollan, vilket kan underlätta avläsning av en residualplot. Slutligen fås en normalfördelningsplot av residualerna på vanligt sätt enligt > qqnorm(residual) > qqline(residual) Korrelationsanalys Korrelationsanalys görs i R med funktionen cor.test. Skriv >?cor.test för en detaljerad beskrivning av hur den fungerar. Som ni ser kan man specificera om man vill ha ensidigt eller tvåsidigt test av hypotesen H 0 : ρ = 0 och konfidensgrad för approximativt konfidensintervall. Argumentet method anger om man vill skatta och testa Pearsons (den vanliga som gås igenom i avsnitt 6.4 och 9.4 i boken), Kendalls (ingår ej i kursen) eller Spearmans (gås igenom i 8.4.3) korrelationskoefficient. Uppgift 1: Jordens medeltemperatur 1850-2007 I filen temperatur.txt på kursens hemsida finns data över avvikelsen av jordens medeltemperatur under perioden 1850-2007 jämfört med genomsnittet för perioden 1961-1990. 1 Börja med att ladda ner filen till ert underbibliotek statan3 och läs som förut in den i R med kommandot > data <- read.table("temperatur.txt",header=true) Filen innehåller fem kolumner: year som anger året, globe som anger den globala medeltemperaturen, nh som anger medeltemperaturen för norra halvklotet, sh som anger medeltemperaturen för södra halvklotet och shnext som anger medeltemperaturen för södra halvklotet året efter. Data kommer från Carbon Dioxide Information Analysis Center (http://cdiac.ornl.gov/). Skapa sedan variablerna 1 Perioden 1961-1990 används internationellt som referensperiod när man skall avgöra om klimatet avviker på något sätt. När exempelvis TV-meteorologerna säger att medeltemperaturen under den kommande femdygnsperioden ligger över eller under det normala är det motsvarande period under 1961-1990 de jämför med. 3
> year <- data$year > globe <- data$globe > nh <- data$nh > sh <- data$sh > shnext <- data$shnext 1. Genomför en enkel linjär regression av den globala medeltemperaturen som responsvariabel och år som bakgrundsvariabel inklusive residualplot och normalfördelningsplot. 2. Anser ni att förutsättningarna för modellen enkel linjär regression är uppfyllda? Uppgift 1 skall redovisas med residualplot och normalfördelningsplot och de slutsatser ni har dragit från dessa. Uppgift 2: Jordens medeltemperatur under tre perioder Ett sätt att få modellen att passa bättre är att dela in hela mätperioden i ett antal delperioder. Vi skall nu dela in datamaterialet i tre separata tidsperioder, nämligen 1880 1929, 1930 1969 och 1970 2007. Man kan nu dela upp samtliga variabler i tre delar med hjälp av logiska uttryck som i Uppgift 2 i andra datorlaborationen enligt mönstret > globe1 <- globe[year <= 1929] > globe2 <- globe[(year >= 1930) & (year <= 1969)] > globe3 <- globe[year >= 1970] 1. Dela upp variabeln year enligt samma mönster och genomför enkel linjär regression på alla tre tidsperioder var för sig och undersök om förutsättningarna nu är bättre uppfyllda. 2. En direktör för oljebolaget Fossil Fools hävdar: Växthuseffekten är inget problem, det finns ingen bevisad trend mot ett varmare klimat. Testa denna hypotes på signifikansnivån 5 % för perioden 1970 2007. Bör testet vara ensidigt eller tvåsidigt? Uppgift 2 skall redovisas med punktskattningar av α och β för alla tre tidsperioder samt resultatet av testet i fråga 2. Uppgift 3: Samband mellan norra och södra halvkloten? En grupp fysiker har en hypotes att klimatet på norra halvklotet påverkar klimatet på södra halvklotet med ett års fördröjning. För att undersöka denna hypotes beräknar de 4
korrelationskoefficienten mellan medeltemperaturen på norra halvklotet ett visst år och medeltemperaturen på södra halvklotet året efter. Till sin glädje finner de att den uppskattade korrelationskoefficienten blir 0.822 och att p-värdet blir i princip lika med noll. 1. Rita en scatterplot och verifiera att fysikerna har räknat rätt. 2. Fysikerna använder resultatet för att hävda att klimatet på norra halvklotet påverkar klimatet på södra halvklotet. Den höga korrelationen kan dock förklaras på ett annat sätt, som är mer troligt. Vilket då? 3. Testa hypotesen att medeltemperaturen på norra och södra halvklotet samma år är okorrelerade på signifikansnivån 10 % för data under den senaste 25-årsperioden 1998 2007. Rita även en scatterplot över data. Testa både med Pearsons och Spearmans korrelationskoefficienter. Får ni samma resultat? Uppgift 3 skall redovisas med svar på fråga 2 och uppskattade korrelationskoefficienter och resultat av testen i fråga 3. Dessutom skall scatterplot från fråga 1 och 3 bifogas. Skriftlig laborationsrapport Precis som i förra datorövningen skall uppgifterna redovisas skriftligt i en strukturerad och genomtänkt laborationsrapport försedd med ett titelblad där kursens namn, laborationens nummer och ert/era namn tydligt skall anges. På kurshemsidan finns instruktioner för hur en skriftlig redovisning skall se ut. 5