Logistische regressie
Auteur | prof dr R.J. de Haan | |
Co-Auteur | prof dr J.W.R. Twisk | |
auteurschap op deze site |
Wanneer gebruik ik een logistisch regressie model?
Met logistische regressie kan je een dichotome uitkomstvariabele (dood versus leven, wel of geen klachten, etc.) relateren aan één of meerdere predictoren. Het basis idee achter logistische regressie is dat je de uitkomstvariabele zodanig transformeert dat er een soort lineaire regressie mogelijk is. De logistische regressie coëfficiënten van de onafhankelijke variabelen in het model kunnen vervolgens worden omgezet in odds ratio’s.
In tegenstelling tot bij lineaire regressie gelden bij logistische regressie niet al te veel statistische voorwaarden. Zo hoeven er bijvoorbeeld geen aannames te worden gedaan over de verdeling van de uitkomstvariabele. De voorspellers (of verklarende variabelen) kunnen (net als bij lineaire regressie) zowel discreet als continu zijn. Wel moeten de observaties onafhankelijk van elkaar zijn. Dat betekent dat logistische regressie niet geschikt is om onderzoeksgegevens te analyseren waarbij de patiënten herhaaldelijk in de tijd zijn gemeten (voor herhaalde metingen bestaan andere technieken).
Hoe werkt logistische regressie?
In een logistisch regressiemodel wordt niet de dichotome uitkomst zelf gemodelleerd, maar de kans op die uitkomst. Omdat een kans loopt van minimum 0 tot maximaal 1 en bij lineaire regressie de uitkomstvariabele continu moet zijn, kunnen we de kans niet rechtstreeks als uitkomstvariabele gebruiken. We kunnen wel gebruik maken van de relatieve kans: de odds. Immers, de odds kan gezien worden als een continue variabele die loopt van 0 tot oneindig. Vervolgens moet er statistisch nog iets aanvullends worden gedaan. De odds, die loopt van 0 tot oneindig, is immers nog niet normaal verdeeld, hetgeen óók een voorwaarde is voor lineaire regressie. Als uitkomstvariabele wordt daarom niet de odds gebruikt, maar de natuurlijke logaritme van de odds, die niet alleen continu maar ook normaal verdeeld is. In de logistische regressie vergelijking
is de natuurlijke logaritme van de odds de uitkomst variabele, is de constante, zijn Failed to parse (SVG (MathML can be enabled via browser plugin): Invalid response ("Math extension cannot connect to Restbase.") from server "https://wikimedia.org/api/rest_v1/":): {\displaystyle X_i, (i = 1,2, ….., k)} de verklarende variabelen of covariaten, en vormen de logistische regressiecoëfficiënten.
Hoe interpreteer ik mijn SPSS output bij gebruik van een enkelvoudig logistisch model?
(Het hierna volgende voorbeeld is afkomstig uit het boek “Inleiding in de toegepaste biostatistiek” van J.W.R Twisk, Elsevier gezondheidszorg, Maarssen, 2007).
In een case-control onderzoek wordt bij 100 patiënten en 100 controlepersonen de relatie onderzocht tussen roken en het krijgen van een hartinfarct. De onderzoeksresultaten staan in de volgende 2x2 tabel weergegeven.
patient | controle | totaal | |
rookt wel | 39 | 14 | 53 |
rookt niet | 61 | 86 | 147 |
totaal | 100 | 100 | 200 |
De odds ratio (OR) voor roken in vergelijking tot niet-roken op het krijgen van een hartinfarct kan op de volgende manier berekend worden:
Het 95% betrouwbaarheidsinterval loopt van 1,70 tot 7,86. Er is een significante associatie, want de waarde van de nulhypothese (er is geen associatie: OR = 1) ligt buiten het betrouwbaarheidsinterval.
We gaan deze analyse herhalen, maar nu met behulp van logistische regressie. Als we in SPSS in de schermen van de module Binary Logistic de variabele ‘type proefpersoon’ (als afhankelijke (dependent) variabele opgeven (0 = controle, 1 = patiënt) en de variabele ‘roken’ (0 = nee, 1= ja) als onafhankelijke (independent) invoeren, dan zal SPSS, naast ander output, de concluderende slot-tabel “Variables in the Equation” genereren.
Variables in the Equation | |||||||||
---|---|---|---|---|---|---|---|---|---|
B | S.E. | Wald | df | Sig. | Exp(B) | 95.0% C.I.for Exp(B) | |||
Lower | Upper | ||||||||
Step 1 | roken | 1.368 | .354 | 14.960 | 1 | .000 | 3.927 | 1.694 | 7.855 |
Constant | -.343 | .167 | 4.210 | 1 | .040 | .709 |
De logistische regressiecoëfficiënt b heeft de waarde 1,368. De Wald test geeft aan dat er sprake is van een significant verband (p < 0,001) tussen roken en het krijgen van een infarct. Omdat de logistische regressiecoëfficiënt gelijk is aan de natuurlijk logaritme van de OR, kunnen we de e-macht nemen van de regressiecoëfficiënt [EXP(B)], waardoor de natuurlijke logaritme als het ware ‘wegvalt’ en de OR overblijft. De OR op het hebben van een hartinfarct voor rokers ten opzichte van niet-rokers is hier dus = 3,927 (95% CI: 1,694 - 7,855).
Hoe interpreteer ik mijn SPSS output bij gebruik van een meervoudig logistisch model?
In dit voorbeeld zullen we met behulp van meervoudige ('multiple' of 'multivariable') logistische regressie meerdere onafhankelijke variabelen (covariaten) gelijkertijd meenemen in het model. Laten we ervan uitgaan dat we in een prospectief cohortonderzoek bij 115 in het ziekenhuis opgenomen oudere patiënten de kans op het optreden van delier (0 = niet, 1 = wel) tijdens hun opname willen voorspellen. Dit doen we aan de hand van de volgende patiëntkenmerken: cognitief functioneren voor opname (0 = geen stoornis, 1 = wel stoornis), ADL niveau voor opname (0 = niet beperkt, 1 = beperkt), en leeftijd (continue variabele). Merk op dat de geschatte OR bij een continue variabele, in dit geval leeftijd, geïnterpreteerd moet worden als de OR op het krijgen van een delier voor het verschil van één eenheid in leeftijd (hier uitgedrukt in jaren). Stel bijvoorbeeld dat de variabele ‘leeftijd’ een OR heeft van 1,028 (zoals in het voorbeeld), dan wil dat zeggen dat de odds op het krijgen van een delier van een persoon die één jaar ouder is 1,028 keer zo hoog is als de odds van een persoon die één jaar jonger is.
SPSS laat in de concluderende tabel “Variables in the Equation” de volgende resultaten zien:
Variables in the Equation | |||||||||
---|---|---|---|---|---|---|---|---|---|
B | S.E. | Wald | df | Sig. | Exp(B) | 95.0% C.I.for Exp(B) | |||
Lower | Upper | ||||||||
Step 1 | Cognitie | 1.800 | .607 | 8.794 | 1 | .003 | 6.047 | 1.841 | 19.863 |
ADL | 1.237 | .508 | 5.928 | 1 | .015 | 3.444 | 1.273 | 9.321 | |
Leeftijd | .028 | .032 | .761 | 1 | .383 | 1.028 | .966 | 1.094 | |
Constant | -5.034 | 2.527 | 3.970 | 1 | .046 | .007 |
Cognitief functioneren (p = 0,003) en ADL niveau (p = 0,015) blijken onafhankelijke voorspellers te zijn voor het optreden van delier tijdens ziekenhuisopname. Cognitie laat een OR zien van 6,047. Met andere woorden: geadjusteerd voor het ADL niveau en leeftijd, is de odds op het krijgen van een delier bij patiënten met cognitieve stoornissen ongeveer 6 keer zo hoog als de odds voor patiënten zonder cognitieve stoornissen. Rekening houdend met de invloeden van cognitie en leeftijd, blijken patiënten met functionele beperkingen eveneens een grotere kans te hebben op het krijgen van een delier (OR = 3,444). Geadjusteerd voor de twee indicators van functionele gezondheid (cognitie en ADL), blijkt de leeftijd van de patiënt echter niet significant geassocieerd te zijn met het krijgen van een delier (OR = 1,028; p = 0,383).
Hoe interpreteer ik de output van een continue voorspeller een logistisch model?
Een van de risicofactoren die in ons model zit is de totale duur van de anesthesie in minuten. In het model geeft dit een B waarde van 0,005 en een odds ratio van 1,005 zien. Dit geeft een p waarde die sterk significant is (0.001), maar ik begrijp niet precies hoe ik die odds ratio moet interpreteren. Wat ik denk is dat het de toename van de kans op postoperatieve misselijkheid per minuut anesthesieduur weergeeft, maar zeker weten doe ik dat niet.
Je interpretatie per minuut is juist. Om een meer sprekende OR te krijgen zou de duur bijvoorbeeld door 10 kunnen delen. De OR wordt dan gegeven per 10 minuten toename van anesthesie. Als je daarbij geen afronding gebruikt, verandert er verder niets aan het model.
Hoe bepaal ik of ik age als continue voorspeller of opgedeeld in categorien meegeef aan het model?
Bij age twijfelde ik of ik het als een continue waarde moest laten, of dat ik het in (4) leeftijdscategorieën moet opdelen. Kunt u mij hierbij helpen?
Statistisch is het mooier om age als continue mee te nemen, omdat je dan maar 1 parameter hoeft te schatten, je houdt dan meer ruimte over in het model voor het schatten van andere effecten. Die ene parameter staat voor het extra risico per jaar en je veronderstelt dan dat het effect van een jaar extra niet afhangt van de startleeftijd. Bijv leeftijd 21 tov leeftijd 20 geeft dan evenveel 'extra risico' als leeftijd 76 tov leeftijd 75. Om te checken of die aanname redelijk is om te maken in jouw data, zou je de data eerst een keer ingedeeld in (4, eventueel meer, je moet wel een redelijk aantal personen per categorie overhouden) categorien te analyseren. Je kunt dan kijken of de risicoschatting inderdaad mooi 'linear' oploopt. Bijv:
categorie | OR |
20-30 | ref |
30-40 | 1.10 |
40-50 | 1.21 |
50-60 | 1.46 |
loopt prachtig linear op (iedere 10 jaar verder wordt de OR vermenigvuldigd met 1.1), terwijl een uitslag als
categorie | OR |
20-30 | ref |
30-40 | 1.20 |
40-50 | 0.63 |
50-60 | 1.01 |
helemaal niet mooi oploopt: 30-40 geeft meer risico dan 20-30 en 40-50 geeft minder risico dan 20-30. In dit tweede voorbeeld past het meenemen van age als continue voorspeller niet goed.
Wat betekenen de regressiecoeffienten in een logistisch model?
Ik onderzoek de invloed van leeftijd van de patient op het wel/ niet uitvoeren van een onderzoek. afhankelijke = onderzoek ja/nee dichotoom) onafhankelijke = leeftijd (numeriek) Hier heb ik logistische regressie gebruikt, wat er eerst erg interessant uitzag: Exp(B) is 0.951. Ik dacht dat je per toename van levensjaar 5% minder kans had om onderzoek te krijgen. Maar later zag ik dat zowel de a (-0.05) als de b (-0.0556) negatief waren. Nu kan ik het niet meer interpreteren, dat zou betekenen dat voor iedere leeftijd de kans op het krijgen van het onderzoek kleiner dan 0 is? Heb ik iets over het hoofd gezien?
De eerste interpretatie is de juiste. OR van 0.951 zegt inderdaad dat met ieder levensjaar de kans (eigenlijk de odds) op onderzoek krijgen met ~5% afneemt. De a is meestal niet van belang. Die geeft binnen het model de intercept weer (dus de verwachte waarde bij een leeftijd van 0). De a staat op de logit schaal genoteerd. De proportie behorend bij een a van -0.05 kan als volgt hieruit berekend worden:
ln(odds)= ln (p/(1-p)) = -0,05
p = exp(-0.05)/(1+exp(-0.05)) = 0.49,
waarbij exp(x) is e-tot de macht-x. Je ziet dus dat er voor kinderen met leeftijd 0 een proportie van 0.49 onderzoek ja geschat wordt. Vaak is een patient met de covariabele waarde 0 niet aanwezig binnen de studiepopulatie en heeft deze intercept minder betekenis, maar het is wel goed om te kijken of deze waarde redelijk lijkt.
De b staat ook genoteerd in de logit context. Een negatieve b betekent dat de kans op onderzoek afneemt bij toenemende leeftijd. De b is direct gekoppeld aan de OR.
OR = exp(b) = exp(-0.0556) = 0.95
Let er dus op dat de regressiecoefficienten (a en b) niet op dezelfde manier geïnterpreteerd kunnen worden als bij lineaire regressie.
Kan ik adjusted proporties krijgen uit mijn logistisch model?
Bij de follow-up evaluatie van de uitkomsten van een RCT (interventie versus usual care) willen we tevens een analyse doen waarbij we corrigeren voor baseline verschillen. Voor een dichotome variabele (wel of niet neurologisch afwijkend) hebben we univariaat een crostab gemaakt, met een chi-kwadraat toets. Vervolgens hebben we dit met een log regressie gedaan en daarna een multivariate log regressie met de covariaten erin. De vraag is nu, hoe presenteren we de data? Normaal gesproken zouden we de frequenties geven (24% versus 14% afwijkend), maar uit de log regr komt een odds ratio. Is het dan logischer om twee keer een odds ratio te presenteren? dus van het univariate en multivariate log model? Of kunnen we ook vergelijkbaar met adjusted means uit een ANCOVA een adjusted frequentie krijgen? En zo ja, hoe dan.
Meestal worden inderdaad univariable en multivariable odds ratios gepresenteerd. Je kunt echter ook geadjusteerde proporties berekenen. Het is daarvoor gebruikelijk om de voorspelde frequenties te berekenen voor een patient die voor alle corrigeerde variabelen de gemiddelde waarde heeft. Met behulp van de formule van de logistische regressie waarbij je voor de corrigerende variabelen de gemiddelde waarde invult en voor de variabele van interesse (intervenite versus usual care) een keer een 0 en een keer een 1. Als het model bijv is:
ln(odds_neurologische afwijking) = intercept + B1 * interventie + B2 * age_at_baseline,
en de gemiddelde leeftijd op baseline van alle patietnen was 63, dan geldt voor de 'usual care groep'
ln(odds_neurologische afwijking) = intercept + B2 * 63,
en voor de interventiegroep:
ln(odds_neurologische afwijking) = intercept + B1 *1 + B2 * 63.
De intercept, B1 en B2 lees je af uit de coefficienten tabel van de logsitsche regressie.
De zo gevonden 'log odds'-getallen kun je terugrekenen naar proporties door de inverse transformatie erop los te laten. Er geldt
ln(odds) = ln (P/1-P)
Als je hier weer de P terug uit wilt vinden kun je gebruiken:
P = exp(ln(odds))/(1+exp(ln(odds))), waarbij exp staat voor 'e tot de macht'.
De P is 'kans op het event', maar kan ook geinterpreteerd worden als (voorspelde) proportie events. De voorspelde proportie events in de twee groepen voor patienten met alle andere covariaten op hun gemiddelde is een goede weergave van het 'geadjusteerde' effect.
Mijn logistische regressie lukt niet vanwege een 0 in mijn 2x2 tabel, wat nu?
Ik heb een binaire uitkomstmaat (wel of geen detectie) waarvoor ik met logistische regressie aan de gang ben gegaan. Nu kom ik echter bij een voorspellende factor (ook binair) waarbij ik in de war raak. Ik heb een 2x2 tabel gemaakt om een odds ratio te berekenen (ter controle omdat de logistische regressie niet werkt), maar kom dan niet verder.
Wel detectie | Geen detectie | totaal | |
Factor aanwezig | 17 | 3 | 20 |
Factor afwezig | 7 | 0 | 7 |
totaal | 24 | 3 | 27 |
Het probleem is dus die 0. Hoe kan ik hiervoor alsnog een logistische regressie uitvoeren?
Het berekenen van een odds ratio lukt niet vanwege de 0. De odds ratio op geen detectie is hier (3/17)/(0/7) = oneindig (delen door nul is flauwekul). Indien je alleen een univariabele analyse doet (wat met deze aantallen het hoogst haalbare lijkt), is een simpele truc voor het alsnog berekenen van odds ratio het optellen van 0.5 in ieder van de 4 cellen. Je krijgt dan (3.5/17.5)/(0.5/7.5) = 3. Voor het berekenen van een bijbehorende p-waarde zou je bijvoorbeeld een Fisher's exact toets kunnen gebruiken.
Er bestaan ook statistisch meer geavanceerdere oplossingen hiervoor. Deze zijn vooral handig als je een multivariabele analyse wilt doen waarin ook deze factor moet worden opgenomen. Je kunt dan gebruik maken van zogeheten 'penalized-likelihood logistic regression'. Daarbij wordt tijdens het schatten ervoor gezorgd dat de OR 'eindig' blijft door een 'penalty' te geven aan grote ORs. Dergelijke methoden zijn nog niet in SPSS geimplementeerd. Wel in bijvoorbeeld de logistf package van R. In jouw geval zou een univariabele penalized regression uitkomen op een OR van 3.000008.
Ik wil een logistische regressie doen op een dataset met gematchte patienten, hoe doe ik dat in SPSS?
Wanneer de data bestaat uit gematchte paren, bijv cases en controles gematched op leeftijd en geslacht, is een gewone logistische regressie niet voldoende. Om op goede manier met de gepaardheid van de data rekening te houden is een conditionele logistische regressie nodig. SPSS bevat hier geen directe functie voor, maar de analyse kan wel met een truc via de Cox procedure gedaan worden. Dit Youtube filmpje van Robin Beaumont legt het zeer duidelijk uit.
Het effect van een scheef verdeelde voorspeller is anders in een logistisch model dan in een Mann-Whitney test, wat nu?
Ik wil graag een multivariabele logistische regressie doen voor de uitkomst postoperatieve complicaties ja/ nee. Eén van de variabelen is 'aantal dagen opgenomen in ziekenhuis vóór operatie'. Uit de literatuur is bekend dat als patienten langer opgenomen liggen, dat ze het dan vaak slechter doen postoperatief. Deze variabele is continu, maar scheef verdeeld. Eerst keek ik univariabel - nu had ik eerst een Mann-Whitney U toets gedaan om te zien of er een verschil was tussen de groep met en de groep zonder compicaties; hieruit kwam P=0.019. Vervolgens deed ik in SPSS een univariable analyse via de logistische regressie knoppen en toen kreeg ik ineens een P=0.275. Vaak verschilt de P dan wel iets, maar nu wel heel veel vind ik. Is het omdat de variabele skewed is, en de logistische regressie hier geen rekening mee houdt?
De verschillen tussen beide analyses zouden inderdaad veroorzaakt kunnen worden door de scheefheid van de variabele. In de logistische regressie wordt aangenomen dat iedere 1 dag extra ligduur een vaste toename in risico (op de log odds schaal) op postoperiatieve complicaties geeft. In de Mann Whitney analyse wordt dit niet gedaan en is enkel de aanname dat degenen met complicaties een gemiddeld hoger ranknummer hebben wanneer alle opnameduren van laag naar hoog gerankd worden.
Om te controleren of de 'iedere dag is evenveel extra risico'-aanname in het logistisch model inderdaad het verschil tussen beide analyses verklaart, zou je het volgende kunnen doen: maak een nieuwe variabele aan die de ranknummers van de opnameduur bevat (zie bijv deze instructie). Geef deze rank-variabele mee aan een logistische regressie. Wanneer deze 'rank-regressie' wel overeenkomt in conclusie met de Mann-Whitney, dan is dat aanleiding te denken dat de 'iedere dag is evenveel extra risico' aanname niet klopt. Let op, deze analyse is alleen ter controle, het is niet zaligmakend omdat de resulterende OR een 'extra risico per ranknummer' geeft en dergelijke informatie is niet te generaliseren naar andere populaties / patienten. Je zou - indien je toch graag een multivariabele logistische regressie doet - een transformatie van de ligdag variabele kunnen overwegen. Bijv. een log-transformatie. Kijk of je met die log transformatie beter passende informatie krijgt.
Waar vind ik logistische regressie in SPSS?
Je vindt deze techniek in SPSS onder Analyze->Regression->Binary Logistic.
Referenties
- Course material on logistic regression from the web based distance learning course - Regression Models as a Tool in Medical Research - International School of Quantitative Research, University of Freiburg.
- Course material on the use of categorical predictors (in logistic regression) from the web based distance learning course - Regression Models as a Tool in Medical Research - International School of Quantitative Research, University of Freiburg.
Terug naar OVERZICHT voor een overzicht van alle statistische onderwerpen op deze wiki.
Terug naar KEUZE TOETS voor hulp bij het uitzoeken van een geschikte toets of analyse.