11 Logistisk regression
Eksempel: prostata uge 8.
Den Logistiske regressionsmodel går også under betegnelsen Generalized Linear Model. Dette er ikke det samme som General Linear Model, idet sidstnævnte dækker over modeller for kvantitative outcomes hvor kovariaterne kan være både kvantitative og kvalitative (herunder lineær regression, ANOVA, ANCOVA, …). Generaliseret Lineær Model refererer til at vi specificerer modeller som vi plejer ved lineære udtryk (a la a+b*x
), men at sammenhængen mellem den parameter vi er interesseret i (for logistisk regression odds eller sandsynlighed) og det lineære udtryk ikke er lineært. For logistisk regression er sammenhængen mellem sandsynligheden \(p_i\) for at outcome for person nr i antager værdien 1 (ud af de mulige udfald 0 og 1)
\[ \log (\frac{p_i}{1-p_i}) = a + b \cdot x_i \]
Som funktion af \(p_i\) er dette ikke lineært i \(p_i\) - men udtrykket på højre side er lineært som funktion af kovariaten \(x_i.\) Derfor udtrykket generaliseret lineær model. Funktionen på venstre side af lighedstegnet kaldes link-funktionen, fordi den angiver et ‘link’ mellem det lineære udtryk og sandsyndsynligheden for at vores outcome antager værdien 1. Linkfunktionen her hørende til den logistiske regressionsmodel kaldes også for logit-funktionen: \(\mbox{logit}(p)=\log(\frac{p}{1-p})\)
Logistisk regression laver vi ved hjælp af proc logistic
. Syntaksen er meget lig den vi kender for den generelle lineære model i proc glm
.
For prostata-data er outcome-variablen gennemtraengning01
, som er kodet 0/1. Vi laver som sædvanligt en model
-linje, hvor outcome står på venstre side, forklarende variable på højre. Her skal vi dog angive om vi ønsker at modellere sandsynligheden for at outcome er 0 eller 1. Det gør vi ved at tilføje (event='0')
eller (event=1)
inden lighedstegnet. Glemmer vi det, benytter SAS pr default (event='0')
.
Den forklarende variabel involvering
er kodet 0/1, dvs det er en dummy-variabel og vi kan derfor vælge om vi vil sætte den ind som kvantitativ eller kvalitativ.
- Som kvantitativ behøver vi blot:
=prostata;
proc logistic datagennemtraengning01(event='1') = involvering;
model run;
- Som kvalitativ skal vi tilføje en
class
-linje. Her tilføjesparam=glm
efter en slash, hvorved vi får output på en form, som ligner den vi kender fraproc glm
:
=prostata;
proc logistic datainvolvering (ref='0') / param=glm;
class gennemtraengning01(event='1') = involvering;
model run;
Estimater på log-odds skala og p-værdier aflæses i tabellen med titel Analysis of Maximum Likelihood Estimates, odds-ratio’er aflæses i tabellen med titel Odds Ratio Estimates
11.0.1 Rapportering af interaktioner
Interaktioner håndteres som sædvanligt ved at inkludere de to interaktionsvariable med en *
imellem. Ønsker vi at kvantificere en interaktion, dvs beregne OR for den ene variabel for fastholdt værdi af den anden, kan vi imidlertid ikke gøre som vi plejer i proc glm
med at udelade hovedeffekten af den ene variabel i modellinjen. I stedet skal vi tilføje en oddsratio
-linje:
=prostata;
proc logistic datainvolvering (ref='0') alder65 / param=glm;
class gennemtraengning01(event='1') = involvering alder65 involvering*alder65;
model / at (alder65="Under" "Over");
oddsratio involvering run;
Her angiver vi altså, at vi ønsker at bestemme OR for involvering for patienter “Under” hhv “Over” 65 år. Parentesen kan ikke udelades.
11.1 Modelkontrol
11.1.1 Hosmer-Lemeshow Goodness-Of-Fit test
Hosmer-Lemeshow testet udføres ved at tilføje lackfit
i modellinjen:
=prostata;
proc logistic datagennemtraengning01(event='1') = psa / lackfit;
model run;
I testet sammenligner vi i et antal grupper (ofte 10 nogenlunde lige store grupper) det observerede antal med outcome=1 (gennemtraengning01=1
) med de prædikterede værdier (dvs ud fra vores model, sandsynlighederne for at observere gennemtraengning01=1
(plejer vi at kalde for p)).
Her får vi blot en p-værdi frem - er denne større end 0.05 er der ikke tegn på at modellen ikke passer, er den mindre end 0.05 bør vi undersøge modellen nærmere.
Advarsel: Hosmer-Lemeshow testet er følsomt over for, hvordan de 10 grupper defineres, og det afhænger af, hvilket software-program man bruger. Derudover kan p-værdien også ændres, hvis man i stedet interesserede sig for odds for den modsatte hændelse (outcome=0 i stedet for outcome=1). Det betyder at man skal tage testet med et gran salt.
11.1.2 Residualplot
Her plotter vi Pearson-residualerne mod kvantitative kovariater for at vurdere, om der er problemer med lineariteten
\[ res_i \ = \ \frac{y_i-\hat p_i}{\sqrt{\hat p_i\cdot(1-\hat p_i)}} \] Se i kapitel 11.2 nedenfor, hvordan vi får SAS til at beregne residualerne og lave plottene.
11.2 Beregning af prædiktioner og residualer
Vi kan få SAS til at bestemme prædiktioner og residualer for hvert individ ved at benytte et output
-statement.
I den logistiske regressionsmodel kan vi prædiktere på to mulige skalaer:
- logit / log-odds-skala: Her beregnes prædiktionerne ud fra modelformlen, e.g.
a+b*psa
. Dette kaldes også den linære prædiktor og angives ved at benytte ekstra argumenttype='link'
(link-funktionen henviser her til logit-funktionen, som angiver sammenhængen mellem den lineære prædiktor og sandsynligheden (p)) - sandsynlighedsskala: Her beregnes prædiktionerne ud fra formlen, exp(
a+b*psa
)/(1+exp(a+b*psa
)).
Vi kan få SAS til at beregne residualer og prædiktioner på log-odds såvel som sandsynlighedsskala ved at benytte en output
-linje.
Først angives navnet på det datasæt, som skal indeholde prædiktionerne, i et out=
statement. Dernæst angiver vi hvilke beregninger vi ønsker foretaget, og hvad de skal hedde. Se evt SAS’ egen hjemmeside for hvilke muligheder der er her.
Her bestemmer vi prædiktionerne på sandsynlighedsskala (predicted=
) og log-odds (xbeta=
). Pearson residualerne fås ved stdreschi
:
=prostata;
proc logistic datagennemtraengning01(event='1') = psa;
model =predictions predictions=pred xbeta=log_odds stdreschi=pearson_res;
output out run;
Dermed indeholder det nye datasæt med navn predictions
en kopi af datasættet prostata
, med to variable tilføjet: pred
og log_odds
. Tag gerne et kig på data, inden du plotter residualer, prædiktioner eller log-odds mod kovariaten (her har vi benyttet psa
som forklarende variabel):
=predictions (obs=15);
proc print data run;
Residualplot:
=predictions;
proc sgplot data=psa y=pearson_res;
loess x run;
Plot af prædiktioner på log-odds-skala (punkter og linje):
=predictions;
proc sgplot data=psa y=log_odds;
scatter x=psa y=log_odds;
reg x run;
Plot af prædiktioner på sandsynlighedsskala:
=predictions;
proc sgplot data=psa y=gennemtraengning01;
scatter x=psa y=pred;
scatter x run;
Er der problemer med lineariteten kan vi vælge at benytte spline-funktioner eller transformere kovariaten (ofte med en logaritme…). Præcis som for den lineære model.
11.2.1 Cook’s afstand og influence
I output-linjen beskrevet i kapitel 11.2 tilføjes dfbeta=_all_
hvorved vi får tilføjet Dfbeta for alle koefficienter i modellen.
Cooks distance virker ikke i nyeste version af SAS (i hvert
fald ikke hos mig …) tidligere kunne man i output linjen
også angive cooksd
. Uden Cook må vi nøjes med at se på Dfbetas.
=prostata;
proc logistic datagennemtraengning01(event='1') = psa;
model =diagnostics dfbeta=_all_;
output out run;
I datasættet her navngivet diagnostics
får vi tilføjet to variable til vores prostata
-datasæt med navne DFBETA_Intercept
og DFBETA_psa
. Disse kan nu plottes mod f.eks. et id-nummer (hvis vi havde det) eller PSA-værdierne. Vælg gerne forskellig farve afhængigt af outcome, så det er nemt at se, hvilke observationer, der passer dårligt med modellen:
=diagnostics;
proc sgplot data=psa y=dfbeta_psa / group=gennemtraengning01;
scatter x run;
11.3 ROC-kurver, AUC
Vi kan få tegnet en ROC kurve ved at tilføje plots(only)=roc
i proc
-linjen:
=prostata plots(only)=roc;
proc logistic datagennemtraengning01(event='1') = psa;
model run;
11.3.1 Optimale tærskelværdier
Youden’s index er bestemt ved det punkt på ROC-kurven, som har den maksimale lodrette afstand ned til diagonalen.
‘Closest Top Left’ bestemmer tærskelværdien ud fra det punkt på kurven, som ligger tættest på øverste venstre hjørne.
Se SAS programmet hørende til slides uge 8 hvordan man finder disse størrelser, det kræver en lille smule programmering (du finder programmet i kapitel 14 her i e-bogen).