LUNDS TEKNISKA HÖGSKOLA MATEMATIKCENTRUM MATEMATISK STATISTIK DATORLABORATION 6 MATEMATISK STATISTIK, AK FÖR I, FMS 120, HT-00 Laboration 6: Regression Syftet med den här laborationen är att du skall bli mer förtrogen med det i praktiken kanske viktigaste området inom kursen nämligen Enkel linjär regression Multipel linjär regression 1 Förberedelseuppgifter Som förberedelse till laborationen bör du läsa igenom Kapitel 20.9 (om normalfördelningsdiagram), 23, 26.3 och 27.1 27.6, 27.8 (a) (d), 27.12 och hela laborationshandledningen. Till laborationens start har du med dig lösningar till uppgifterna (a) (c): (a) Ange modellen för enkel linjär regression med normalfördelade fel. Ge en grafisk tolkning av och. Hur skattar man, och 2? Vilken fördelning får och? Hur gör man konfidensintervall för, och m 0 = + (x 0 x)? Vad är ett prediktionsintervall (23.6)? Gör ett kalibreringsintervall för x 0 (23.7). Hur kan man testa huruvida linjens lutning är 0? (b) Residualanalys (26.3) är ett centralt moment i all regressionsanalys. Hur bör residualerna se ut vid en korrekt regressionsanalys? Ange några tekniker för att kontrollera detta. (c) Lös uppgift ST35. Skriv addpath c:/matstat/ikurs i MATLAB för att komma åt datamaterial och specialrutiner. 2 Enkel linjär regression Vid enkel linjär regression söker man anpassa en rät linje till datamaterialet, dvs modellen är y i = + x i + i = + (x i x) + i, i = 1,..., n, där i är oberoende likafördelade störningar med väntevärdet 0 och variansen 2. Vi kommer i den följande framställningen att arbeta med matrisformuleringen av modellen, Y = U + W, där de ingående matriserna har följande form: y 1 1 x 1 x y 2 Y =., U = 1 x 2 x (.., = 1 x n x y n ) och W = 1 2. n. Vi skall använda MATLAB-rutinen regress som skattar parametrar, beräknar konfidensintervall för dem, beräknar residualer och lite till. Gör help regress för att se vad den gör. Notera att det regress kallar X är den matris vi kallar U.
Uppgift 1: Använd regress för att räkna uppgift ST35. En n 1-kolumn med ettor fås med ones(n,1), medelvärdet av kolumnen x fås med mean(x) och två kolumner k1 och k2 läggs bredvid varandra med [k1 k2].... 2.1 Fallgropar För att illustrera vådan av att okritiskt anpassa en linjär modell till ett givet datamaterial har F. J. Anscombe konstruerat ett datamaterial, som ser ut på följande sätt: observation x 1, x 2, x 3 y 1 y 2 y 3 x 4 y 4 1 10 8.04 9.19 7.46 8 6.58 2 8 6.95 8.14 6.77 8 5.76 3 13 7.58 8.74 12.74 8 7.71 4 9 8.81 8.77 7.11 8 8.84 5 11 8.33 9.26 7.81 8 8.47 6 14 9.96 8.10 8.84 8 7.04 7 6 7.24 6.13 6.08 8 5.25 8 4 4.26 3.10 5.39 8 5.56 9 12 10.84 9.13 8.11 8 7.91 10 7 4.82 7.26 6.42 8 6.89 11 5 5.68 4.74 5.73 19 12.50 Datamaterialet finns lagrat i filen anscombe.mat och kan laddas in i MATLAB på vanligt sätt. Med kommandot who får du reda på aktuella variabler i minnet. En lämplig början är alltid att ta sig en titt på datamaterialet. Uppgift 2: Börja med att plotta y1 mot x1. Se det ut som om linjärt samband vore lämpligt? Plotta också de andra paren mot varandra. Uppgift 3: Vi skall nu helt aningslöst anpassa en linjär modell enligt y i = + (x i x) + i, i = 1,..., n, där i är oberoende likafördelade störningar med väntevärdet 0 och variansen 2. (a) Konstruera matrisen U1 (enligt notationen i det inledande avsnittet ovan) för den första datamängden och beräkna skattningen av med MATLABs inbyggda funktion regress >> U1 = [ones(size(x1)) x1-mean(x1)] >> th1hat=regress(y1,u1) (b) Beräkna den skattade regressionslinjen y1hat=u1*th1hat och rita in den i samma diagram som datamaterialet. Är det rimligt att teckna sambandet mellan den förklarande variabeln x1 och den beroende variabeln y1 som ett linjärt samband? 2
För att studera hur väl vår modell stämmer med givna data beräknar vi först vektorn av residualer. Om modellen är korrekt skall residualerna ungefärligen (vi använder skattade parametrar) vara observationer av likafördelade stokastiska variabler. För att undersöka hur det förhåller sig med detta utför vi en residualanalys enligt beskrivningen i kurslitteraturen. Vi kan t.ex. plotta residualerna gentemot den förklarande variabeln. Uppgift 4: Beräkna residualerna y1-y1hat och plotta dem mot x1. Om vårt modellantagande är korrekt skall vi inte kunna skönja någon systematisk variation i diagrammet. Kan du finna något beroende? Nu vill vi göra motsvarande för de övriga tre datamaterialen, dvs lösa ekvationssystemen, skatta regressionslinjerna och rita ut residualerna. För att du ska slippa göra alla dessa kommandon finns de sammanställda i MATLAB-filen anscombe.m. Skriv alltså >> anscombe för att få skattningar och plottar och besvara sedan följande frågor: Uppgift 5: Jämför värdena på de skattade koefficienterna för var och en av fyra regressionslinjerna. Studera och jämför residualplottarna för de fyra olika fallen. Hur skulle man tolka resultaten om man bara fick de skattade modellparametrarna men ingen grafisk framställning? 3 Polynomregression Datamaterialet som du skall arbeta med i detta avsnitt är koldioxidhalter uppmätta över en vulkan varje månad under en period av 32 år, dvs totalt finns 32 12 = 384 mätvärden. Materialet finns i filen co2.dat, och den kan laddas in på vanligt sätt. Mätvärdena hamnar då i en vektor med namnet co2. Plotta mätvärdena. Det finns uppenbarligen en kraftig periodicitet (årsvariation) i mätningarna, och en sådan låter sig inte så lätt fångas med en polynomiell regressionsfunktion. Detta problem kan lösas på flera sätt. Ett är att införa en sinus-funktion som modellerar variationen, ett annat är att differentiera datasekvensen, dvs undersöka z i = y i y i 1 i stället för y-värdena själva. Vi skall dock välja den mycket enkla lösningen att medelvärdesbilda över varje år. Detta fordrar litet trixande i MATLAB. Uppgift 6: Först skapar vi en 12 32-matris med bara nollor. >> z=zeros(12,32); Sedan överför vi mätvärdena till denna matris. >> z(:)=co2 >> plot(z) Värdena i co2 överförs här kolonnvis, så att första kolonnen i z innehåller mätvärdena från första året osv. Kontrollera gärna detta. Vi kan nu använda funktionen mean för att beräkna årsmedelvärdena. >> y=mean(z) 3
Slutligen vill vi att mätvärdena skall finnas i en kolonnvektor för att regressionsberäkningarna skall se ut som vanligt. >> y=y Kom ihåg att betecknar transponat. Vi har nu skapat den mätvärdesvektor vi skall arbeta med. Vi skapar även en vektor med den förklarande variabeln (årtalet, räknat från lämplig nollpunkt). >> x=(1:32) ; Plotta mätvärdena y mot x. Uppenbarligen är den periodiska variationen borta, vilket också var syftet med medelvärdesbildningen. Vi skall nu göra polynomregression på materialet, dvs vår modell är y i = + 1x i + 2x 2 i + + kx k i + i, i = 1,..., n, där i är oberoende likafördelade störningar med väntevärdet 0 och variansen 2. Som modellen är skriven ovan är den olinjär, ty ett polynom är inte en linjär funktion, men vi kan göra den linjär genom att införa de nya förklarande variablerna x ij = x j i för j = 1,..., k, i = 1,..., n, och skriva y i = + 1x i1 + 2x i2 + + kx ik + i, i = 1,..., n. Slutligen skriver vi om modellen enligt y i = + 1(x i1 x 1 ) + 2(x i2 x 2 ) + + k(x ik x k ) + i, i = 1,..., n, där x j = 1 n arbeta med. n x ij är medelvärdet av den förklarande variabeln nummer j. Detta är den modell vi skall i=1 3.1 Enkel linjär regression Uppgift 7: Vi börjar med att anpassa en linjär funktion till datamaterialet, dvs polynomets ordningsgrad k = 1. Skattningarna av och = 1 erhålles med hjälp av funktionen regress som också kan ge konfidensintervall för dem, samt residualer (se help regress). Konstruera U-matrisen, skatta regressionsmodellen och rita upp den. Rita också upp residualerna. Verkar en rät linje vara en tillfredsställande regressionsmodell? Diagrammet visar att residualerna i mitten av mätserien tycks komma från en annan fördelning är residualerna i början och slutet av densamma. Alternativt finns en stark korrelation mellan störningarna vilket strider mot oberoendeantagandet. Vi drar alltså slutsatsen att en enkel linjär regressionsmodell inte passar det aktuella datamaterialet. 4
3.2 Kvadratisk regression Nästa steg är att försöka anpassa en kvadratisk funktion till mätvärdena, dvs vi använder ordningstalet k = 2 för regressionspolynomet. Uppgift 8: Skapa vektorer som innehåller de förklarande variablerna x i1 = x i och x i2 = xi 2. Skapa också den nya U-matrisen och gör om beräkningarna och plottarna för den nya modellen. (a) Verkar den kvadratiska modellen vara bättre än den linjära? Kan residualerna tänkas komma från samma fördelning? Finns något beroende? (b) Nästa steg är att undersöka om residualerna eventuellt kan komma från en normalfördelning. Gör detta genom att plotta dem i ett normalfördelningsdiagram (normplot). Verkar det rimligt att anta normalfördelade störningar? Är väntevärdet av dessa lika med 0? (c) Skatta felens varians 2 genom att dela residualkvadratsumman med n 3 = 29: >> s2 = sum(res2.^2)/29 där res2 fås ur regress. (d) Avsluta med att studera de 95 %-iga konfidensintervallen för, 1 och 2 (fås med regress). Är 2 signifikant skild från 0, dvs testa H 0 : 2 = 0 mot H 1 : 2 0 på nivån 5 %? I så fall kan vi med gott samvete anta den kvadratiska modellen före den linjära. På samma sätt kan man gå vidare och testa om en tredjegradsterm i regressionsfunktionen är relevant. Vi skall nu använda en färdigskriven funktion reggui och låta den göra grovjobbet. Uppgift 9: Undersök med help-kommandot vad funktionen reggui gör och vad den har för inparametrar. Undersök de olika möjligheterna reggui ger dig att studera en regressionsmodell och välj olika gradtal i modellen. (a) Fick du några varningsmeddelanden? Vad kan det i så fall bero på? (b) Gör en bedömning av figurerna och utskriften med de skattade parametrarna och konfidensintervallen och avgör vilken polynommodell som är mest adekvat. 5
4 Multipel regression och icke-linjära samband transformeringar till linjära samband Det är inte alltid som de sökta sambanden är linjära. I en del fall kan vi approximera det olinjära sambandet med ett polynom, men vi kan också leta upp en transformation som omvandlar det olinjära sambandet till ett linjärt. I många fall kan vi genom en enkel logaritmering transformera en olinjär modell till en linjär. I följande modell för syresättningens, Z ppm/dag, beroende av strömningshastighet, V fot/s, och vattendjup, H fot, skall vi utnyttja denna teknik. Vi skall skatta a, 1 och 2 i den angivna modellen med hjälp av de givna observationerna. Modell: Z a V 1 H 2 Data finns i syre.mat. Logaritmering av modellen ger ln Z = ln a + 1 ln V + 2 ln H Vi inför därför nya variabler Y = ln Z, X 1 = ln V och X 2 = ln H samt sätter modellen som = ln a. Då kan vi skriva Y = + X 1 + 2X 2 Uppgift 10: Här finns inget slumpmässigt fel angivet. Hur bör det vara definierat och hur ser transformationssambandet ut? I och med att vi redan vid enkel linjär regression arbetat med matrismodeller, erbjuder multipel linjär regression inget nytt vad beträffar parameterskattningarna. Vi får utöka matrisen U med ytterligare en kolonn för varje ny förklarande variabel, men minsta-kvadrat-problemet löser vi på samma sätt som tidigare. Uppgift 11: Konstruera de nya variablerna och tillhörande U-matris och skatta modellen, beräkna konfidensintervall för parametrarna och beräkna residualer med regress. (a) Plotta residualerna. Ser de ut som de ska? (b) Kan vi ta bort någon parameter i modellen? Vilken? Räkna om modellen. Hur blir residualerna nu? 4.1 Konfidensintervall, prediktionsintervall och kalibrering Antag att vi tar bort strömningshastigheten V ur modellen, dvs Z a H eller Y = + X. För att studerakonfidensintervall, prediktionsintervall och kalibreringintervall ska vi använda funktionen reggui vars finesser du förhoppningsvis redan bekantat dig med. Observera att du t.ex. automatiskt kan rita ut konfidensintervall och prediktionsintervall genom att markera i tillämplig ruta. >> reggui(log(h),log(z)) 6
Uppgift 12: Använd nu funktionen interaktivt (kryssa gärna i rutan Mark ints) för att göra följande beräkningar: (a) Beräkna den förväntade logaritmerade syresättningen då vattendjupet är e 1.4 fot, dvs då ln H = 1.4. Beräkna också ett 95%-igt konfidensintervall för detta förväntade värde. Beräkna dessutom ett 95%-igt prediktionsintervall för en framtida observation på logaritmerad syresättning, då vattendjupet är e 1.4 fot. Identifiera dessa två intervall i figuren och förklara vad det är som skiljer dem åt. (b) Räkna om värdena du fick i (a) till intervall för den o-logaritmerade syresättningen istället.... (c) Vi kan sedan skatta vattendjupet med hjälp av syresättningen genom att gå baklänges i kalibreringskurvan. Antag att vi fått mätvärdet 1.0 ppm/dag för syresättningen, dvs ln Z = ln 1 = 0. Beräkna ett 95%-igt konfidensintervall för det sanna vattendjupet. Börja med det logaritmerade vattendjupet och identifiera i figuren de kurvor som används vid den grafiska bestämningen av detta konfidensintervall och förklara varför det är just dem, man skall använda. 7