STOCKHOLMS UNIVERSITET 7 oktober 2004 Matematiska institutionen Avd. för matematisk statistik Mikael Andersson Laboration 3: Icke-parametrisk korrelations- och regressionsanalys I den här laborationen skall vi analysera sambandet mellan två variabler genom att beräkna några av de vanligaste icke-parametriska korrelationskoefficienterna och testa om de är skilda från noll. Vi skall även skatta lutningen i en linjär regressionsmodell. Instruktionerna är skrivna för MATLAB, men det går bra att lösa uppgifterna med hjälp av annan programvara om man så önskar. I första avsnittet gås ett exempel igenom i detalj, precis som tidigare, och i andra avsnittet finns själva uppgiften. 1 Introduktion I det här avsnittet skall vi analysera följande problem: Vid en försöksfarm i England genomfördes ett försök där man ville undersöka sambandet mellan lufttemperaturen och fetthalten i mjölk från ett antal utegåe mjölkkor. Under femton dagar i april uppmättes därför dygnsmedeltemperaturen (i C ) och genomsnittlig fetthalt (i %) i mjölken enligt Temp. 18.1 18.4 17.7 16.3 12.9 3.7 4.9 7.8 Fetthalt 4.58 4.67 4.60 4.83 4.55 5.14 4.71 4.69 Temp. 14.8 13.2 13.1 2.8 2.6 13.6 12.5 Fetthalt 4.65 4.36 4.82 4.66 4.95 4.68 4.46 Börja med att mata in data i MATLAB i vektorerna x och y. För att skaffa oss en uppfattning om hur variablerna är kopplade till varandra kan vi åskådliggöra datamaterialet i ett punktdiagram enligt >> plot(x,y, o ) Som vi ser finns det en antydan till avtagande fetthalt med stigande temperatur, men långt ifrån uppenbar. 1
1.1 Pearsons korrelationskoefficient Vi börjar som tidigare med att analysera problemet under den klassiska förutsättningen att data kommer från en bivariat normalfördelning. Pearsons korrelationskoefficient ρ p kan enkelt uppskattas enligt >> cm=corrcoef([x y ]) cm = 1.0000-0.4865-0.4865 1.0000 >> rp=cm(1,2) rp = -0.4865 Funktionen corrcoef(a) ger en korrelationsmatris för kolumnerna i matrisen A. Vi måste alltså först skapa en matris innehållande x och y som kolumner, vilket vi kan åstadkomma genom kommandot [x y ]. Apostroferna är nödvändiga därför att x och y är definierade som radvektorer. Vi vill nu testa hypoteserna H 0 : ρ p = 0 H 1 : ρ p 0 Under H 0 gäller att T = n 2rp 1 r 2 p är t-fördelad med n 2 frihetsgrader. Det innebär att vi kan beräkna p-värdet enligt >> T=sqrt(13)*rp/sqrt(1-power(rp,2)) T = -2.0080 >> 2*tcdf(T,13) 0.0659 Här måste vi multiplicera med 2 eftersom vi utför ett tvåsidigt test. 2
1.1.1 Bootstrap av Pearsons korrelationskoefficient Bootstrap-simulering ger oss möjligheten att inte bara utföra ovanståe test utan normalfördelningsantagande men även beräkna konfidensintervall, vilket annars är ganska komplicerat. Vi börjar som vanligt med att generera bootstrap-stickprov enligt >> slump=ceil(rand(1000,15)*15); bootstrapx(i,:)=x(slump(i,:)); bootstrapy(i,:)=y(slump(i,:)); Notera att vi använder samma slumpmatris för att generera båda uppsättningarna bootstrapstickprov. Det beror på att observationerna i de ursprungliga stickproven är parvis kopplade och måste förbli så för att inte förstöra beroestrukturen och därmed ge missvisande korrelationskoefficienter. Därefter skattar vi Pearsons ρ p för varje bootstrap-stickprov enligt cm=corrcoef([bootstrapx(i,:) bootstrapy(i,:) ]); pearson(i)=cm(1,2); >> pearson=sort(pearson); Vi åskådliggör fördelningen enligt >> hist(pearson,-1:.05:1) beräknar p-värdet enligt >> 2*sum(pearson>=0)/1000 0.0700 och gränserna i ett 95 %-igt konfidensintervall enligt >> pearson(25) -0.7456 >> pearson(975) 0.0214 3
1.2 Spearmans korrelationskoefficient För att kunna uppskatta Spearmans ρ s behöver vi först bestämma rangerna för respektive stickprov enligt >> r=tiedrank(x) >> s=tiedrank(y) Som vi ser förekommer inga ties, vilket innebär att vi kan beräkna r s enligt formeln r s = 1 6T n(n 2 1) där T = n i=1 (r i s i ) 2. Detta gör vi nu enkelt genom >> T=sum(power(r-s,2)) T = 764 >> rs=1-6*t/(15*(power(15,2)-1)) rs = -0.3643 För att testa hypoteserna H 0 : ρ s = 0 H 1 : ρ s 0 behöver vi fördelningen för r s under H 0. Teoretiskt sett kan vi bestämma den genom att beräkna r s för samtliga n! permutationer av y-vektorn. I vårt fall skulle det innebära totalt 15! = 1307674368000 permutationer, vilket är fullkomligt orealistiskt. Ett sätt att förenkla detta är att välja exempelvis 1000 av dessa permutationer slumpmässigt och beräkna r s. Vi får då bara en approximation av den fullständiga fördelningen, som dessutom är slumpmässig, men det förkortar beräkningstiden väsentligt. Vill man få bättre precision går det naturligtvis bra att utöka antalet simuleringar. I MATLAB kan man enkelt generera slumpmässiga permutationer genom kommandot randperm(n) enligt följande perms(i,:)=randperm(15); Detta ger oss en slumpmatris perms vars 1000 rader består av slumpmässiga permutationer av heltalen 1, 2,..., 15. Värdena för r s fås nu som rs0(i)=1-6*sum(power(r-perms(i,:),2))/(15*(power(15,2)-1)); >> hist(rs0,-1:.05:1) 4
Vi får nu p-värdet enligt >> 2*sum(rs0<=rs)/1000 0.1920 För stora stickprov kan vi använda oss av resultatet att T = n 2rs 1 r 2 s är approximativt t-fördelat med n 2 frihetsgrader. Detta ger ett approximativt p-värde enligt >> T=sqrt(13)*rs/sqrt(1-power(rs,2)) T = -1.4104 >> 2*tcdf(T,13) 0.1819 vilket överensstämmer ganska bra med approximationen ovan. 1.2.1 Bootstrap av Spearmans korrelationskoefficient Vi kan naturligtvis tillämpa bootstrap-simulering även på Spearmans ρ s. Nackdelen är att eftersom sannolikheten är stor att vi väljer samma observation flera gånger måste vi ta hänsyn till ties och kan därför inte använda formeln för r s ovan. Däremot kan vi använda funktionen corrcoef eftersom Spearmans ρ s kan betraktas som Pearsons ρ p tillämpat på rangerna även då vi har ties. I MATLAB kan vi beräkna detta enligt >> slump=ceil(rand(1000,15)*15); bootstrapr(i,:)=tiedrank(x(slump(i,:))); bootstraps(i,:)=tiedrank(y(slump(i,:))); och sedan beräkna r s för varje bootstrap-stickprov enligt cm=corrcoef([bootstrapr(i,:) bootstraps(i,:) ]); spearman(i)=cm(1,2); >> spearman=sort(spearman); 5
Ett histogram för fördelningen ges av >> hist(spearman,-1:.05:1) vi får p-värdet enligt >> 2*sum(spearman>=0)/1000 0.2000 och gränserna i ett 95 %-igt konfidensintervall enligt >> spearman(25) -0.7546 >> spearman(975) 0.1838 1.3 Kalls korrelationskoefficient Som bekant bygger uppskattningen av Kalls τ k på antal konkordanser n c och antal diskordanser n d. Enligt boken kan dessa beräknas genom att betrakta antal positiva och negativa skillnader s j s i då i = 1, 2,..., n 1 och j > i om r i = i. Det innebär att vi först måste sortera r 1, r 2,..., r n i storleksordning enligt >> [r,ord]=sort(r); >> s=s(ord); Genom att ange två vektorer r och ord där resultatet av sorteringen skall lagras, får vi de sorterade värdena i r och själva ordningen i indexvektorn ord. Denna vektor är viktig för att kunna ordna rangerna i s så att de fortfarande överensstämmer med rangerna i r parvis. Nu kan vi beräkna antalet konkordanser och diskordanser enligt >> nc=0; >> nd=0; >> for i=1:14 for j=i+1:15 if s(j)-s(i)>0 nc=nc+1; if s(j)-s(i)<0 nd=nd+1; 6
Kommandot if anger att det andra uttrycket skall utföras om det första uttrycket är uppfyllt. Nu får vi t k enligt formeln t k = n c n d n(n 1)/2 vilket i MATLAB blir >> tk=(nc-nd)/(15*14/2) tk = -0.2571 För att testa hypoteserna H 0 : τ k = 0 H 1 : τ k 0 behöver vi även här teoretiskt sett betrakta samtliga n! permutationer av rangerna. Eftersom detta är praktiskt omöjligt skall vi även här approximera genom att välja permutationer slumpmässigt enligt perms(i,:)=randperm(15); och sedan beräkna r s för samtliga dessa permutationer enligt >> for k=1:1000 nc=0; nd=0; for i=1:14 for j=i+1:15 if perms(k,j)-perms(k,i)>0 nc=nc+1; if perms(k,j)-perms(k,i)<0 nd=nd+1; tk0(k)=(nc-nd)/(15*14/2); Vi får histogram över fördelningen enligt >> hist(tk0,-1:.05:1) och p-värdet enligt >> 2*sum(tk0<=tk)/1000 0.1720 7
Vi kan också få ett approximativt p-värde genom att använda oss av det faktum att Z = 3t k n(n 1) 2(2n + 5) är approximativt standard normalfördelat för stora stickprov. Detta innebär att p-värdet kan beräknas enligt >> Z=3*tk*sqrt(15*14)/sqrt(2*35) Z = -1.3362 >> 2*normcdf(Z,0,1) 0.1815 vilket ligger nära vår första uppskattning. Vi gör ingen bootstrap-simulering för Kalls τ k eftersom det är betydligt mer komplicerat att hantera ties i det fallet. 1.4 Linjär regression Slutligen skall vi se hur vi kan analysera lutningen β i en linjär regressionsmodell y i = α + βx i + ε i i = 1, 2,..., n både parametriskt och icke-parametriskt. Under normalfördelningsantagande kan vi få ML-skattning av lutningen β med konfidensintervall genom kommandot regress i MATLAB enligt >> [b,bint]=regress(y,[ones(15,1) x ],.05) b = 4.8787-0.0164 bint = 4.6538 5.1035-0.0341 0.0012 Vi går inte genom i detalj hur regress fungerar eftersom det parametriska fallet bara tjänar som referensfall. Hursomhelst innehåller vektorn b ML-skattningar av α och β medan bint innehåller 95 %-iga konfidensintervall. Sammanfattningsvis får vi alltså ˆβ = 0.016 och 0.034 β 0.001 (95%) 8
Den lämpligaste metoden att skatta β och ta fram konfidensintervall i det icke-parametriska fallet är Thiel-Kalls metod som är nära förknippad med Kalls τ k. Vi behöver först alla parvisa lutningar b ij = y j y i x j x i i = 1, 2,..., n 1; j > i vilket i MATLAB kan beräknas enligt >> b=[]; >> for i=1:14 for j=i+1:15 b=[b (y(j)-y(i))/(x(j)-x(i))]; >> b=sort(b); En skattning av β ges nu av medianen >> median(b) -0.0091 För att få ett konfidensintervall behöver vi först ett acceptansområde för T t (b) = n c n d Eftersom T t (b) skiljer sig från Kalls τ k enbart genom nämnaren n(n 1)/2 kan vi få fördelningen för T t (b) under hypotesen H 0 : β = 0 enligt >> T=tk0*15*14/2; Av numeriska skäl kan det bli så att T inte bara innehåller heltalsvärden, men detta kan åstadkommas genom kommandot >> T=round(T); Kommandot round avrundar alla värden till närmaste heltal. Genom att sedan pröva sig fram får man acceptansområdet >> sum(t>=-37 & T<=37)/1000 0.9550 (Tänk på att T t (b) ast innehåller udda heltal.) Observera att detta resultat bygger på slumptalsapproximation så era resultat kan variera något. Eftersom n c + n d = n(n 1)/2 = 15 14/2 = 105 medför exempelvis T t (b) = 37 att n d = (105 37)/2 = 34. Vi skall alltså förkasta de 34 minsta och de 34 största värdena bland b ij, vilket innebär att gränserna i konfidensintervallet ges av 9
>> b(35) -0.0275 >> b(71) 0.0058 2 Uppgift År 1970 gjordes en världsomspännande undersökning för att statistiskt försöka belägga ett samband mellan tobakskonsumtion och förekomsten av hjärt- och kärlsjukdomar. Statistik över genomsnittligt antal cigarretter per år och vuxen invånare samt dödligheten i hjärt- och kärlsjukdom per 100 000 invånare i åldrarna 35-64 år samlades in för 21 olika länder. Resultatet blev: Land Antal cig./år Dödlighet Australien 3220 238.1 Belgien 1700 118.1 Danmark 1500 144.9 Finland 2160 233.1 Frankrike 1410 59.7 Grekland 1800 41.2 Irland 2770 187.3 Island 2290 110.5 Italien 1510 114.3 Kanada 3350 211.6 Mexiko 1680 31.9 Nederländerna 1810 124.7 Norge 1090 136.3 Nya Zeeland 3200 211.8 Schweiz 2780 124.5 Spanien 1200 43.9 Storbritannien 2790 194.1 Sverige 1270 126.9 USA 3900 256.9 Västtyskland 1890 150.3 Österrike 1770 182.1 Undersök om det finns en positiv korrelation mellan tobakskonsumtion och hjärt- och 10
kärlsjukdomar genom att beräkna 1) Pearsons, 2) Spearmans och 3) Kalls korrelationskoefficient samt 4) lutningen i en linjär regressionsmodell med Thiel-Kalls metod. Beräkna även p-värden för test av hypotesen att det inte finns någon korrelation med Monte Carlosimulering och normalapproximation för Spearman och Kall och bootstrap-simulering för Pearson och Spearman. I bootstrap-fallet skall även 95 %-iga konfidensintervall beräknas. Slutligen skall p-värden för ingen lutning i regressionsmodellen och konfidensintervall för lutningen beräknas med Thiel-Kalls metod. I den skriftliga redovisningen skall ingå p-värden för alla test, övre och undre gräns i konfidensintervallen och histogram över fördelningarna för de olika korrelationskoefficienterna både under hypotesen om ingen korrelation och i bootstrap-simuleringarna. Dessutom skall en jämförelse göras mellan de fyra metoderna och en diskussion angåe vilken/vilka som kan anses mest lämplig/lämpliga för det aktuella datamaterialet ingå. 11