Løsning til øvelser i logistisk regression, november 2008 1 Løsning til opgave i logistisk regression 1. Først indlæses data, og vi kan lige sørge for at danne en dummy-variable for cml, som indikator variable for CML gruppen. Endelig laves logaritmetransformationer af index. data gvhd; filename gvhdtxt url "http://staff.pubhealth.ku.dk/~lts/basal/data/gvhd.txt"; infile gvhdtxt; input pnr rcpage donage type preg index gvhd; * Dannelse af indikatorvariable for alle tre grupper ; aml = (type eq 1) ; all = (type eq 2) ; cml = (type eq 3) ; * Logartimetransformation med naturlig og 2-talslogaritme ; lidx = log(index) ; lidx2 = log2(index) ; run ; proc print data = gvhd; som resulterer i følgende output: Obs pnr rcpage donage type preg index gvhd aml all cml lidx lidx2 1 1 27 23 2 0 0.27 0 0 1 0-1.30933-1.88897 2 2 13 18 2 0 0.31 0 0 1 0-1.17118-1.68966 3 3 19 19 1 0 0.39 0 1 0 0-0.94161-1.35845 4 4 21 22 2 0 0.48 0 0 1 0-0.73397-1.05889 5 5 28 38 2 0 0.49 0 0 1 0-0.71335-1.02915 6 6 22 20 2 0 0.50 0 0 1 0-0.69315-1.00000 7 7 19 19 2 0 0.81 0 0 1 0-0.21072-0.30401 8 8 20 23 2 0 0.82 0 0 1 0-0.19845-0.28630 9 9 33 36 1 0 0.86 0 1 0 0-0.15082-0.21759 10 10 18 19 1 0 0.92 0 1 0 0-0.08338-0.12029 11 11 17 20 2 0 1.10 0 0 1 0 0.09531 0.13750 12 12 31 21 3 0 1.52 0 0 0 1 0.41871 0.60407 13 13 23 38 2 0 1.88 0 0 1 0 0.63127 0.91073 14 14 17 15 2 0 2.01 0 0 1 0 0.69813 1.00720 15 15 26 16 2 0 2.40 0 0 1 0 0.87547 1.26303 16 16 28 25 1 0 2.45 0 1 0 0 0.89609 1.29278 17 17 24 21 1 1 2.60 0 1 0 0 0.95551 1.37851 18 18 18 20 2 0 2.64 0 0 1 0 0.97078 1.40054 19 19 24 25 1 1 3.78 0 1 0 0 1.32972 1.91839 20 20 20 24 3 0 4.72 0 0 0 1 1.55181 2.23879 21 21 23 35 1 1 1.10 1 1 0 0 0.09531 0.13750 22 22 21 35 2 1 1.16 1 0 1 0 0.14842 0.21412 23 23 21 23 3 0 1.45 1 0 0 1 0.37156 0.53605 24 24 33 43 3 0 1.50 1 0 0 1 0.40547 0.58496 25 25 29 24 3 1 1.85 1 0 0 1 0.61519 0.88753 26 26 42 35 2 1 2.30 1 0 1 0 0.83291 1.20163 27 27 37 31 3 0 2.34 1 0 0 1 0.85015 1.22651 28 28 43 29 2 1 2.44 1 0 1 0 0.89200 1.28688 29 29 22 20 1 0 3.70 1 1 0 0 1.30833 1.88753 30 30 35 39 1 1 3.73 1 1 0 0 1.31641 1.89918 31 31 16 14 1 0 4.13 1 1 0 0 1.41828 2.04614 32 32 39 35 2 1 4.52 1 0 1 0 1.50851 2.17632 33 33 28 25 3 1 4.52 1 0 0 1 1.50851 2.17632 34 34 29 32 3 0 4.71 1 0 0 1 1.54969 2.23573 35 35 23 19 3 0 5.07 1 0 0 1 1.62334 2.34199 36 36 33 34 3 0 9.00 1 0 0 1 2.19722 3.16993 37 37 19 20 1 0 10.11 1 1 0 0 2.31353 3.33771 2. Logistisk regression laves med proc logistic. Bemærk, at vi bruger class type / param=ref; for at få SAS til at generere dummy-variable for niveauerne af type.
2 Løsning til øvelser i logistisk regression, november 2008 class type / param=ref; model gvhd(event="1") = type lidx preg donage rcpage; proc logistic giver indledningsvis en beskrivelse af datamaterialet og derefter estimaterne: The LOGISTIC Procedure Model Information Data Set WORK.GVHD Response Variable gvhd Number of Response Levels 2 Model binary logit Optimization Technique Fisher s scoring Number of Observations Read 37 Number of Observations Used 37 Response Profile Ordered Total Value gvhd Frequency 1 0 20 2 1 17 Probability modeled is gvhd=1. Class Level Information Design Class Value Variables type 1 1 0 2 0 1 3 0 0 Model Convergence Status Convergence criterion (GCONV=1E-8) satisfied. Model Fit Statistics Intercept Criterion Intercept Only and Covariates AIC 53.049 40.252 SC 54.660 51.529-2 Log L 51.049 26.252 Testing Global Null Hypothesis: BETA=0 Test Chi-Square DF Pr > ChiSq Likelihood Ratio 24.7970 6 0.0004 Score 19.1944 6 0.0038 9.7367 6 0.1362
Løsning til øvelser i logistisk regression, november 2008 3 Type 3 Analysis of Effects Effect DF Chi-Square Pr > ChiSq type 2 2.4617 0.2920 lidx 1 4.1836 0.0408 preg 1 1.9812 0.1593 donage 1 1.6847 0.1943 rcpage 1 0.0379 0.8457 Analysis of Maximum Likelihood Estimates Intercept 1-3.8590 2.8107 1.8850 0.1698 type 1 1-1.6152 1.3074 1.5261 0.2167 type 2 1-2.0434 1.3677 2.2320 0.1352 lidx 1 1.8187 0.8892 4.1836 0.0408 preg 1 1.6624 1.1810 1.9812 0.1593 donage 1 0.1072 0.0826 1.6847 0.1943 rcpage 1 0.0160 0.0820 0.0379 0.8457 95% type 1 vs 3 0.199 0.015 2.579 type 2 vs 3 0.130 0.009 1.891 lidx 6.164 1.079 35.215 preg 5.272 0.521 53.364 donage 1.113 0.947 1.309 rcpage 1.016 0.865 1.193 3. Man ser at rcpage, patientens alder, er den mindst signifikante variabel, så vi fitter en model uden denne: class type / param=ref; model gvhd(event="1")=type lidx preg donage; Type 3 Analysis of Effects Effect DF Chi-Square Pr > ChiSq type 2 2.7621 0.2513 lidx 1 4.3020 0.0381 preg 1 2.2601 0.1327 donage 1 2.2277 0.1356 Analysis of Maximum Likelihood Estimates Intercept 1-3.6049 2.4754 2.1207 0.1453 type 1 1-1.6913 1.2620 1.7959 0.1802 type 2 1-2.0880 1.3424 2.4194 0.1198 lidx 1 1.8407 0.8875 4.3020 0.0381 preg 1 1.7219 1.1453 2.2601 0.1327 donage 1 0.1135 0.0761 2.2277 0.1356
4 Løsning til øvelser i logistisk regression, november 2008 95% type 1 vs 3 0.184 0.016 2.186 type 2 vs 3 0.124 0.009 1.721 lidx 6.301 1.107 35.878 preg 5.595 0.593 52.808 donage 1.120 0.965 1.300 Den mindst signifikante variabel blandt de tilbageværende er nu type=1. Denne beskriver forskellen mellem patienter med AML og patienter med CML. Imidlertid er kodningen af type valgt således at det sidste niveau, CML, type=3 er referenceniveauet, så vi ved faktisk ikke om forskellen mellem AML og CML er den mindst signifikante forskel mellem diagnostiske grupper. For at belyse forskellen mellem AML og ALL skal en af disse gøres til reference-niveau. Vi vælger ALL (type = 2). Det kan lettest gøres ved at tilføje (ref="2") i class statementet: class type(ref="2") / param=ref; model gvhd(event="1")=type lidx preg donage; Type 3 Analysis of Effects Effect DF Chi-Square Pr > ChiSq type 2 2.7621 0.2513 lidx 1 4.3020 0.0381 preg 1 2.2601 0.1327 donage 1 2.2277 0.1356 Analysis of Maximum Likelihood Estimates Intercept 1-5.6929 2.5784 4.8749 0.0273 type 1 1 0.3968 1.2424 0.1020 0.7495 type 3 1 2.0880 1.3424 2.4194 0.1198 lidx 1 1.8407 0.8875 4.3020 0.0381 preg 1 1.7219 1.1453 2.2601 0.1327 donage 1 0.1135 0.0761 2.2277 0.1356 95% type 1 vs 2 1.487 0.130 16.978 type 3 vs 2 8.069 0.581 112.069 lidx 6.301 1.107 35.878 preg 5.595 0.593 52.808 donage 1.120 0.965 1.300 Bemærk at Type III test og alle parameterestimater bortset fra de der vedrører diagnosen er uændrede det er nemlig den samme model, blot parametriseret på en anden måde. Koefficienten til type=3 svarer nu til log-odds-ratio mellem patienter med CML og patienter med ALL, og den er derfor præcis den modsatte af koefficienten til type=2 fra den forrige model. Tilsvarende er koefficienten til type=1 log-odds-ratio mellem patienter med AML og ALL, og den er derfor differensen mellem koefficienterne til type=1 og type=2: 1.6913 ( 2.0881) = 0.3968 i den forrige model. Det er nu klart at den mindst signifikante forskel er mellem AML og ALL patienter, dvs. at den eneste betydende prognostiske forskel mht. GvHD er om der er tale om en akut eller kronisk leukæmi.
Løsning til øvelser i logistisk regression, november 2008 5 Det betyder at vi skal erstatte variablen type på 3 niveauer med en variabel der kun har 2 niveauer, Akut / Kronisk. Dette er netop variable cml, indikatoren for CML, idet den er 1 for patienter med CML og 0 for patienter med ALL/AML. Den næste model vil derfor være modellen hvor alene cml er med: model gvhd(event="1")=cml lidx preg donage; Analysis of Maximum Likelihood Estimates Intercept 1-5.4121 2.3377 5.3600 0.0206 cml 1 1.8702 1.1421 2.6813 0.1015 lidx 1 1.8972 0.8672 4.7865 0.0287 preg 1 1.7346 1.1485 2.2810 0.1310 donage 1 0.1092 0.0735 2.2060 0.1375 95% cml 6.490 0.692 60.870 lidx 6.667 1.218 36.482 preg 5.667 0.597 53.819 donage 1.115 0.966 1.288 I denne model er der tre variable med p-værdier omkring 10 15%, cml, preg og donage, så det er ikke umiddelbart klart hvilken af den man skal fjerne først, så vi har valgt at fitte alle tre mulige modeller hvor en af dem er fjernet: model gvhd(event="1")= lidx preg donage ; Intercept 1-5.2587 2.1335 6.0750 0.0137 lidx 1 2.1060 0.8227 6.5526 0.0105 preg 1 1.2912 1.0302 1.5711 0.2100 donage 1 0.1245 0.0658 3.5829 0.0584 model gvhd(event="1")= cml lidx donage ; Intercept 1-5.8530 2.2624 6.6931 0.0097 cml 1 1.5142 1.0788 1.9703 0.1604 lidx 1 2.0592 0.8281 6.1833 0.0129 donage 1 0.1488 0.0694 4.5972 0.0320 model gvhd(event="1")= cml lidx preg ; Intercept 1-2.5464 0.9486 7.2060 0.0073 cml 1 2.2506 1.1061 4.1401 0.0419 lidx 1 1.4877 0.7197 4.2725 0.0387 preg 1 2.4955 1.1012 5.1354 0.0234
6 Løsning til øvelser i logistisk regression, november 2008 Det fremgår at når en af variablene fjernes, så bliver mindst en af de andre signifikante. I den sidste model er såvel cml som preg signifikante, så det vil næppe være en god ide at udelade nogen af disse. 4. De estimerede odds-ratioer fremgår direkte af output fra proc logistic, i den sidste model med cml og preg finder vi dem som: 95% cml 9.493 1.086 82.965 lidx 4.427 1.080 18.145 preg 12.128 1.401 104.987 Man ser at selv om de estimerede odds-ratioer er ret store og signifikant forskellige fra 1, er den nedre grænse for begge ret tæt på 1, så der er ikke megen evidens for substantielle effekter af disse to variable. 5. Koefficienten til lidx svarer til logaritmen til odds-ratio mellem to patienter der adskiller sig 1 i værdien af lidx, dvs. hvor forskellen i ln(index) er 1, altså mellem to patienter hvor forholdet mellem deres indexværdier er e = 2.7183. Det er næppe en intuitivt rimelig måde at rapportere effekten af index på. 6. Dette er baggrunden for at bruge 2-tals-logaritmen til index som variabel i stedet, thi en forskel på 1 i log 2 svarer til en fordobling af index-værdien. Hvis vi fitter en model med l2idx=log2(index) i stedet for lidx=log(index) får vi: model gvhd(event="1")=cml l2idx preg; Intercept 1-2.5464 0.9486 7.2060 0.0073 cml 1 2.2506 1.1061 4.1401 0.0419 l2idx 1 1.0312 0.4989 4.2725 0.0387 preg 1 2.4955 1.1012 5.1354 0.0234 95% cml 9.493 1.086 82.965 l2idx 2.804 1.055 7.456 preg 12.128 1.401 104.987 Estimatet for odds-ratio associeret med log 2 (index), dvs. med en fordobling af index-værdien, bliver 2.80 med et 95% konfidensinterval (1.06 7.46). Bemærk at fittet af de to modeller er fuldstændigt det samme, det er kun koefficienten til lidx2 der er anderledes, -testet og p-værdien er den samme. I princippet kunne man i stedet for at vælge 2-talslogaritmen have valgt 10-talslogaritmen. Den estimerede odds-ratio ville da svare til effekten af en 10-dobling af index-værdien. I dette materiale ville dette svare til range af index, så en reference til fordobling af værdien vil nok i dette materiale være det mest klinisk relevante, mens man i andre materialer vil støde på variable som i populationen varierer meget mere, og hvor en reference til en 10-dobling vil være mere relevant. Hvilken reference man skal anvende til rapportering af effekten af en kovariat der indgår logaritmisk i en regressionsanalyse afhænger altså helt af den konkrete sammenhæng, og er ikke et statistisk spørgsmål. 7. Vi beregner de nødvendige variable og estimerer i modellen med interaktion; dvs. den model hvor variablen l2idx er erstattet af to variable; en som er lig l2idx hvis preg=1 og 0 ellers, og en variabel som er lig l2idx hvis preg=0 og 0 ellers. Koefficienterne til disse vil være effekten af l2idx i hver af de to grupper af preg, svarende til forskellige hældning i hver af grupperne. Det er yderst vigtigt at hovedeffekten af preg bibeholdes i modellen, idet man ellers får en model hvor man antager at effekten af preg er 0 for l2idx=0 totalt forvrøvlet.
Løsning til øvelser i logistisk regression, november 2008 7 Interaktionen, dvs. om der er forskel på hældningerne testes ved at undersøge om de to resulterende regressions koefficienter er 0; dette kan gøres ved at tilføje et test-statement til kaldet af proc logistic. porc logistic... ;... test l2idx_preg = l2idx_notpreg; run ; Analyserne af de to interaktioner er altså: data gvhd2; set gvhd; l2idx_preg=l2idx*(preg=1); l2idx_notpreg=l2idx*(preg=0); l2idx_cml=l2idx*(cml=1); l2idx_notcml=l2idx*(cml=0); proc logistic data=gvhd2; model gvhd(event="1")=cml preg l2idx_preg l2idx_notpreg; test l2idx_preg = l2idx_notpreg; Intercept 1-3.5104 1.4644 5.7464 0.0165 cml 1 2.5028 1.2661 3.9072 0.0481 preg 1 6.3005 2.8769 4.7964 0.0285 l2idx_preg 1-1.1542 1.4700 0.6165 0.4324 l2idx_notpreg 1 1.7238 0.8507 4.1058 0.0427 95% cml 12.216 1.021 146.108 preg 544.868 1.939 >999.999 l2idx_preg 0.315 0.018 5.624 l2idx_notpreg 5.606 1.058 29.703 Linear Hypotheses Testing Results Label Chi-Square DF Pr > ChiSq Test 1 2.8374 1 0.0921 Med en p-værdi på 9% ser det faktisk ud til at der kunne være en forskel på effekten af indexvariablen afhænger af om donor har været gravid eller ej. Effekten ser ud til at være modsat i de to grupper. For CML og index ser der ikke ud til at være nogen interaktion: proc logistic data=gvhd2; model gvhd(event="1")=cml preg l2idx_cml l2idx_notcml; test l2idx_cml = l2idx_notcml; Intercept 1-2.9163 1.1673 6.2414 0.0125 cml 1 3.5863 1.9291 3.4559 0.0630 preg 1 2.5760 1.1674 4.8694 0.0273
8 Løsning til øvelser i logistisk regression, november 2008 l2idx_cml 1 0.2979 0.8929 0.1113 0.7387 l2idx_notcml 1 1.3145 0.6570 4.0025 0.0454 95% cml 36.100 0.823 >999.999 preg 13.144 1.334 129.540 l2idx_cml 1.347 0.234 7.753 l2idx_notcml 3.723 1.027 13.495 Linear Hypotheses Testing Results Label Chi-Square DF Pr > ChiSq Test 1 0.8414 1 0.3590 Den samlede SAS-kode title1 Basal statistikkursus, foraar 2008 ; data gvhd; filename gvhdtxt url "http://staff.pubhealth.ku.dk/~lts/basal/data/gvhd.txt"; infile gvhdtxt; input pnr rcpage donage type preg index gvhd; * Dannelse af indikatorvariable for alle tre grupper ; aml = (type eq 1) ; all = (type eq 2) ; cml = (type eq 3) ; * Logartimetransformation med naturlig of 2-talslogaritme ; lidx = log(index) ; l2idx = log2(index) ; run ; proc print data=gvhd; class type / param=ref; model gvhd(event="1")=type lidx preg donage rcpage; class type / param=ref; model gvhd(event="1")=type lidx preg donage; class type(ref="2") / param=ref; model gvhd(event="1")=type lidx preg donage; model gvhd(event="1")=cml lidx preg donage; model gvhd(event="1")= lidx preg donage; model gvhd(event="1")=cml lidx donage;
Løsning til øvelser i logistisk regression, november 2008 9 model gvhd(event="1")=cml lidx preg; model gvhd(event="1")=cml l2idx preg; ***************** Interaktioner ********************; data gvhd2; set gvhd; l2idx_preg=l2idx*(preg=1); l2idx_notpreg=l2idx*(preg=0); l2idx_cml=l2idx*(cml=1); l2idx_notcml=l2idx*(cml=0); *** Interaktion mellem preg og index; proc logistic data=gvhd2; model gvhd(event="1")=cml preg l2idx_preg l2idx_notpreg; test l2idx_preg = l2idx_notpreg; *** Interaktion mellem cml og index; proc logistic data=gvhd2; model gvhd(event="1")=cml preg l2idx_cml l2idx_notcml; test l2idx_cml = l2idx_notcml;