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 ook in de dataset de variabele voor de duur eerst door bijvoorbeeld 10 kunnen delen, en dan het model draaien. 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.
Moet ik mijn ordinale predictor als categorische variabele meegeven in het logistisch model?
Ik doe momenteel een logistische regressie analyse. Mijn predictoren zijn ordinale variabelen (score 0,1,3 of 5). Moet ik dit in het logistische regressiemodel wel of niet aangeven als categorische variabelen?
Wanneer je de variabele niet als categorische variabele opgeeft, dan wordt er een lineair op- of aflopend effect verondersteld. Dat wil zeggen er wordt 1 odds ratio geschat die aangeeft hoeveel extra kans op de uitkomst 1 punt toename op de score geeft. Een score op de predictor van 3 versus een score van 1 geeft dan evenveel extra kans op de uitkomst als een score op de predictor van 5 versus 3. Een score van 1 versus 0 geeft de helft van die extra kans (alles gemeten op de logodds schaal). Wanneer je de predictor wel als categorisch opgeeft, dan worden er 3 odds ratios geschat. Het model kan dan vrij allerlei effecten schatten. Er kan dan bijvoorbeeld ook uitkomen dat categorie 0 en 5 een hoge kans op de uitkomst geven en categorie 1 en 3 een lage. De richting van het effect hoeft dan dus niet mooi op- of aflopend te zijn. Het meegeven als categorische legt minder restricties op en is daarom aan te raden. Wel zijn er voor het schatten van al die losse effecten meer parameters nodig (3 ipv 1), wat zou kunnen leiden tot minder efficiente schattingen (minder power). Een advies zou kunnen zijn om eerst de resultaten met gebruik van een categorische predictor te bekijken. Indien de gevonden odds ratios mooi op- of aflopen, dan kun je overwegen de predictor alsnog als numerieke mee te geven, mits dit ook overeen stemt met jouw hypothese.
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.
Komt univariabele logistische regressie overeen met een Chi-kwadraat toets?
Op zoek naar risicofactoren voor het ontstaan van PSC wil ik de frequentie van het optreden van een risicofactor (roken) in de PSC groep vergelijken met de controle groep, en vervolgens corrigeren voor mogelijke interacterende variabelen door middel van multivariabele logistische regressie analyse. In eerste instantie had ik voor de analyse naar risicofactoren een Chi-kwadraat toets gedaan. Maar aangezien je met een univariabele logistische regressie in principe hetzelfde test, en ik verder ga met een mutivariabel model, heb ik besloten in plaatst van chi2 een univariabele logistische regressie te doen. Echter als ik uitkomsten van beide toetsen met elkaar vergelijk, valt op dat de OR en 95 CI gelijk zijn, maar dat de p-waarde verschilt tussen beide testen. Hoe valt dit te verklaren?
De 'precieze' overeenstemming tussen de twee procedures zit 'm in de toets die in de SPSS Crosstabs output vermeld wordt onder 'likelihood ratio' en de toets die in de logistische regressie output vermeld wordt in de tabel 'omnibus tests of model coefficients'. De p-waardes die we doorgaans gebruiken uit deze twee procedures zijn bij de crosstabs de 'Pearson chi-square' en bij de logistische regressie de Wald test uit de 'variables in the equation' tabel. Deze twee kunnen iets van elkaar verschillen omdat ze op verschillende formules gebaseerd zijn. De verschillen zouden echter zeer klein moeten zijn. Indien er grote verschillen zijn, dan er zowiso reden om nader te bekijken of de model/toets aannames wel kloppen en wat de beste analyse zou zijn. Je kunt bij voldoende kleine verschillen (zeg als de p-waardes afgerond op 2 decimalen gelijk zijn) zelf een keuze maken in welke toets je gebruikt. Indien er multivariabele analyse gepland is, verhoogt het de consistentie als ook de univariabele analyse binnen het regressie framework afgelezen wordt. Dit geldt uiteraard voor categorische (nominale) voorspellers, voor numerieke voorspellers gaat de Chi-kwadraat toets toets niet op.
Waar vind ik logistische regressie in SPSS?
Je vindt deze techniek in SPSS onder Analyze->Regression->Binary Logistic.
Hoeveel 'events' heb ik bij multivariate logistische regressie nodig?
Je kunt antwoord hierop vinden op de pagina over Multivariabele regressie.
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.