Kursus i basal statistik: Ventetidsanalyse (“Overlevelsesanalyse”) Birthe Lykke Thomsen Det Nationale Forskningscenter for Arbejdsmiljø Ventetidsanalyse Baggrund Åreknuder i spiserøret er en alvorlig følgesygdom, der kan optræde hos patienter med levercirrose. Hvis en af åreknuderne brister, er patienten i alvorlig risiko for at dø af den indvendige blødning. Forskningsspørgsmål: Vi ønsker at undersøge, om skleroterapi kan bruges til at forebygge/udskyde forekomsten af reblødning hos patienter med blødende åreknuder i spiserøret p.g.a. levercirrose. 2 Ventetidsanalyse Baggrund Data: Randomiseret studie af patienter, der har blødt én gang fra åreknuder i spiserøret. Respons er, hvornår patienten rebløder. (EVASP, 1984) 3 Ventetidsanalyse Baggrund Særlige egenskaber ved denne slags data • Respons: tid til en given hændelse – her reblødning; men det kunne også være død, sygdom, helbredelse, tilbagefald, graviditet, . . . – gør det særligt interessant at lave simple modeller for sandsynligheden for, at noget sker på et givet tidspunkt forudsat, at personen på det tidspunkt er under risiko for, at det sker – disse betingede sandsynligheder kaldes rater eller hazards – typisk kigger man efter multiplikative effekter på raten – det kaldes Cox’s proportional hazards model – hvis (og kun hvis) raten er konstant, kan den estimeres ved antal hændelser/samlet risikotid (standard formel fra epidemiologi), og effekter kan så estimeres ved Poisson regression 4 Ventetidsanalyse Baggrund Særlige egenskaber ved denne slags data fortsat • Forsinket indgang og censurering: Vi har kun en større eller mindre bid af hvert individs liv med i vores studie – forsinket indgang: nogle personer er ikke med fra start – censurering: for nogle af individerne ved vi kun, at det endnu ikke var sket, da de gik ud af studiet • og vi må kun bruge den tid, hvor vi ville tælle hændelsen med, når/hvis den skete 5 Ventetidsanalyse Baggrund Særlige egenskaber ved denne slags data fortsat • Oftest ingen anelse om fordelingen af tid til hændelsen – den er i praksis stort set aldrig normalt fordelt (for censurerede, normalt fordelte data, f.eks. outcomes med detektionsgrænse, bruges PROC LIFEREG; se s. 65–83 i disse noter til selvstudium) – det kan nogle gange være rimeligt at tro, at raten er konstant – en forudsætning for mange epidemiologiske vurderinger • men det er altid en forudsætning, at censurering er uafhængig af outcome givet de kendte, forklarende variable – censurering må ikke være prædiktivt for, om hændelsen snart vil ske 6 Ventetidsanalyse Baggrund Særlige metoder kan håndtere denne slags data Fordi raten er i fokus, ser man på hvert tidspunkt, et ad gangen, og opsummerer derefter i en • Kaplan-Meier kurve • kumuleret (summeret) rate • Cox regression Når man bruger disse metoder, så er estimaterne for raten og Cox regressionen korrekte, uanset om der er forsinket indgang og censureringer eller ej! Forudsat, selvfølgelig, at censureringen er uafhængig af outcome... Når der er forsinket indgang, og hændelsen sker for alle, der under risiko på det givne (tidlige) tidspunkt, bliver Kaplan-Meier estimatet lig 0, og dermed forkert for resten af tidsperioden (forklaring følger). 7 Ventetidsanalyse Kaplan-Meier Reblødning i de to grupper: Kaplan-Meier og kumuleret rate uden henholdsvis med punktvise konfidensgrænser 8 Ventetidsanalyse Kaplan-Meier Fortolkning af Kaplan-Meier og kumuleret rate Hvis hændelsen er “død af hvilken som helst årsag”, så viser Kaplan-Meier kurven overlevelsessandsynligheden som funktion af tiden t, dvs. hvor stor en andel, man kan regne med vil overleve mindst til tid t. Hvis hændelsen er hvad som helst andet, og død har medført censurering, så giver Kaplan-Meier kurven ingen fornuftig mening! Den kumulerede rate har ingen direkte, intuitiv fortolkning. Den er ikke lig sandsynligheden for, at hændelsen sker inden det givne tidspunkt – men det er en tilnærmelse, når den kumulerede rate er lille. Hældningen på den kumulerede rate er lig med selve raten. Rater og kumulerede rater er korrekte, også når død medfører censurering! 9 Ventetidsanalyse Kaplan-Meier 10 Reblødning i de to grupper – standard plots Trappekurve: et trin ned hver gang, der sker en hændelse. S(T ) ≈ exp(−R(T )) R(T ) ≈ − ln(S(T )) (Stykkevis) konstant rate giver (stykkevis) lineær kumuleret rate R(t). For tidsintervaller med lineær R(t) kan selve raten estimeres som forskellen mellem startværdi og slutværdi for R(t) divideret med længden af tidsintervallet. Høj rate=stejl stigning, lav rate=flad kurve. Ventetidsanalyse Kaplan-Meier Beregning af Kaplan-Meier og kumuleret rate (alt under bølgelinien er skjult for os, og kun de tynde, grønne personer er med fra start) 11 Ventetidsanalyse Kaplan-Meier Beregning af Kaplan-Meier og kumuleret rate På en given dag t observerer vi for hver gruppe g (kaldes sædvanligvis “stratum”, flertal “strata”, i ventetidsanalyse) 1. ng (t) individer totalt 2. mg (t) individer, der begynder at rebløde hvilket giver den daglige reblødningsrate mg (t) rg (t) = ng (t) Kaplan-Meier estimatet Sg (T ) på dag T for gruppe g beregnes ved at gange leddene 1 − rg (t) sammen for alle dage t op til og med dag T . Nelson-Aalen estimatet for den kumulerede reblødningsrate Rg (T ) på dag T for gruppe g beregnes ved at lægge de daglige reblødningsrater rg (t) sammen for alle dage t op til og med dag T . 12 Ventetidsanalyse Kaplan-Meier 13 Estimation af Kaplan-Meier kurver v.h.a. PHREG Respons: “Det tidspunkt, hændelsen sker”; men det sker ikke for alle, så det er nødvendigt at bruge en kombination af 2 responsvariable: “tid” og “hvad skete der”. Datasættet SKL indeholder (bl.a.) DAY: tid for udgang BLD: 1 for reblødning, 0 for censurering SKLERO: 1 for skleroterapigruppen, 0 for kontrolgruppen NB: Alle værdierne for censurering skal skrives i parentesen efter status-variablen! (her BLD) ODS GRAPHICS ON; PROC PHREG DATA=skl PLOTS(OVERLAY=ROW CL)=S; MODEL Day*Bld (0) = ; /*NB ingen X-var*/ STRATA Sklero; /*Hvis ODS GRAPHICS ikke duer, så lav datasæt:*/ BASELINE OUT=km SURVIVAL=KMcurves LOWER=LowerBound UPPER=UpperBound / METHOD=PL CLTYPE=LOGLOG; RUN; SYMBOL1 C=BLACK V=NONE I=STEPLJ MODE=INCLUDE; SYMBOL2 C=RED V=NONE I=STEPLJ MODE=INCLUDE; PROC GPLOT DATA=km; PLOT kmcurves*day=sklero; RUN; Ventetidsanalyse Kaplan-Meier SAS’s ODS GRAPHICS figur 14 Ventetidsanalyse Kaplan-Meier 15 Ekstra SAS kode for at få konfidensgrænser med i egen figur SAS kode for nødvendige datamodifikationer: DATA KM_m_CL; SET km; IF sklero=0 THEN DO; type=1; curve=kmcurves; OUTPUT; type=2; curve=lowerbound; OUTPUT; type=3; curve=upperbound; OUTPUT; END; IF sklero=1 THEN DO; type=4; curve=kmcurves; OUTPUT; type=5; curve=lowerbound; OUTPUT; type=6; curve=upperbound; OUTPUT; END; RUN; Eksempel på kald af GPLOT: AXIS1 LABEL=(H=2) VALUE=(H=1.75); AXIS2 LABEL=(H=2 A=90 "S(t) = Kaplan-Meier") VALUE=(H=1.75); SYMBOL1 SYMBOL2 SYMBOL3 SYMBOL4 R=1 R=2 R=1 R=2 C=BLACK C=BLACK C=RED C=RED V=NONE V=NONE V=NONE V=NONE I=STEPLJ I=STEPLJ I=STEPLJ I=STEPLJ L=2 W=5 MODE=INCLUDE; L=4 MODE=INCLUDE; L=1 W=5 MODE=INCLUDE; L=41 MODE=INCLUDE; PROC GPLOT DATA=KM_m_CL; PLOT curve*day=type / HAXIS=AXIS1 VAXIS=AXIS2 NOLEGEND; RUN; (SAS-kode for plot af kumuleret rate kan findes bagest i disse noter) Ventetidsanalyse Log rank 16 Log rank test (svarer til en-sidet variansanalyse) Grupper kan sammenlignes v.h.a. et log rank test. Princip (for 2 grupper): Vi forudsætter (“nul-hypotesen”), at der ingen forskel er på de 2 grupper, og betinger for hvert ’døds’tidspunkt med • det observerede totale antal ’døde’ m(ti ) (= m1 (ti ) + m2 (ti )) • antallet af personer under risiko på det givne tidspunkt i hver af de 2 grupper, n1 (ti ) og n2 (ti ) (n1 (ti ) + n2 (ti ) = n(ti )) For gruppe 1 kan vi så for hvert ’døds’tidspunkt ti beregne • det forventede antal ’døde’ E1 (ti ) = m(ti ) · • variansen på antallet af ’døde’ n2 (ti ) m(ti )·(n(ti )−m(ti )) 1 (ti ) V (ti ) = nn(t · n(ti ) · (n(ti )−1) i) n1 (ti ) n(ti ) Ventetidsanalyse Log rank Log rank test fortsat De forventede antal ’døde’ E1 (ti ), henholdsvis varianserne V (ti ), adderes for alle ’døds’tidspunkter ti til E1 , henholdsvis V . Desuden tælles det totale antal observerede ’døde’ M1 i gruppe 1. Log rank teststørelsen (M1 − E1 )2 Log Rank Chi Square = , V er χ2 -fordelt med 1 frihedsgrad. Tilnærmelse, der også kan bruges for mere end 2 grupper, her G grupper: G ∑ (Mg − Eg )2 Log Rank Chi Square ≈ , E g g=1 er χ2 -fordelt med G − 1 frihedsgrader (bemærk, at alle grupper bidrager til summen). 17 Ventetidsanalyse Styrkeberegning Styrkeberegning for ventetidsdata Summen af varianserne, V , brugt ved beregningen af log rank teststørrelsen, bruges også ved styrkeberegninger: Hvis man ønsker at kunne påvise en rate ratio på RR for aktiv versus kontrol med et tosidet signifikansniveau på α og en styrke på 1−β, så skal ( U +U )2 β α/2 man inkludere tilstrækkeligt mange personer til, at V ≥ . ln(RR) (Ux =(1−x)-fraktilen i en normal fordeling, eksempelvis U2.5% =1.96, U5% =1.645, U10% =1.282, U20% =0.842) Hvis randomiseringsratioen (aktiv:kontrol) er a:1, og hændelsen er sjælden, a er V ≈ (a+1) 2 · M , hvor M =total antal hændelser, dvs. der skal inkluderes tilstrækkeligt mange personer til, at ( ) Uα/2 + Uβ 2 (a + 1)2 · M≥ a ln(RR) 18 Ventetidsanalyse Log rank Log rank test ved hjælp af PROC PHREG Log rank teststørrelsen kan beregnes som score-teststørrelsen i PROC PHREG med brug af option TIES=DISCRETE: PROC PHREG DATA=skl; MODEL day*bld(0) = sklero / TIES=DISCRETE; RUN; Hvis der er mere end 2 grupper, er det nødvendigt at bruge et CLASS statement, eksempelvis PROC PHREG DATA=skl; CLASS sklero / PARAM=GLM; MODEL day*bld(0) = sklero / TIES=DISCRETE; RUN; 19 Ventetidsanalyse Log rank 20 Dele af output fra PROC PHREG The PHREG Procedure Model Information Data Set WORK.SKL Dependent Variable Day Censoring Variable Bld Censoring Value(s) 0 Ties Handling DISCRETE Summary of the Number of Event and Censored Values Percent Total Event Censored Censored 187 91 96 51.34 Model Fit Statistics Without With Criterion Covariates Covariates -2 LOG L 738.406 737.488 : : : Testing Global Null Hypothesis: BETA=0 Test Chi-Square DF Pr > ChiSq Likelihood Ratio 0.9175 1 0.3381 Score 0.9174 1 0.3382 ← Log rank teststørrelse=0.9174, p=0.3382 Wald 0.9124 1 0.3395 Ventetidsanalyse Log rank Output fra PROC PHREG fortsat Analysis of Maximum Likelihood Estimates Parameter Standard Hazard Variable DF Estimate Error Chi-Square Pr>ChiSq Ratio Sklero 1 -0.20261 0.21212 0.9124 0.3395 0.817 Log rank testet er dårligt til at detektere forskelle, der ændres markant med tiden, som eksempelvis en dårligere korttidsprognose samtidigt med en bedre langtidsprognose! 21 Ventetidsanalyse Opsummering 1. del Opsummering 1. del Ventetidsdata karakteristika: • “et tidspunkt ad gangen”: vi laver modeller for raten • censurering og forsinket indgang • ingen fordelingsantagelser Typisk grafik: • Kaplan-Meier (pas på!) • kumuleret rate – tjek for stykkevis linearitet Numerisk test (’p-værdi’) for sammenligning af grupper (det, der svarer til ensidet variansanalyse): • log rank test – dårligt til at detektere tidsvarierende effekter 22 Ventetidsanalyse Cox model 23 Proportionale rater Kvantificering af behandlingseffekten: r(t; sklero) = r(t; medicinsk) · B Effekt af ascites (væske i bughulen): r(t; ascites) = r(t; ingen ascites) · A Kombineret: r(t; sklero, ascites) = r(t; medicinsk, ascites) · B = r(t; medicinsk, ingen ascites) · A · B = r(t; medicinsk, ingen ascites) · exp(a + b) med a=ln(A) og b=ln(B). 0 ∼ ∼ Sættes X1 = {1 ingen ascites 0 og X = { 2 ascites 1 ∼ ∼ medicinsk skleroterapi så er r(t; sklero, ascites) = r0 (t) · exp(aX1 + bX2 ) Ventetidsanalyse Cox model Cox’s regression model Denne model kaldes Cox’s regression model: r(t; X1 , X2 , . . . , Xk ) = r0 (t) · exp(b1 X1 + b2 X2 + . . . + bk Xk ) Summen i eksponenten, b1 X1 + b2 X2 + . . . + bk Xk , kaldes nogle gange det “prognostiske indeks”. Hvis vi transformerer med den naturlige logaritme og skriver b0 (t) i stedet for ln(r0 (t)), fås noget, der ligner de sædvanlige regressionsmodeller: ln(r(t; X1 , X2 , . . . , Xk )) = b0 (t) + b1 X1 + b2 X2 + . . . + bk Xk Bemærk, at logaritmen til den underliggende rate r0 (t) svarer til den sædvanlige intercept parameter (der altså afhænger af tiden her)! 24 Ventetidsanalyse Cox model En positiv værdi for en regressionsparameter bj betyder, at høje værdier af den tilsvarende kovariat Xj hører sammen med høj rate: For uønskede hændelser betyder det, at høje værdier forværrer prognosen, så vær meget forsigtig med at bruge ordene “positiv/negativ” om effekter, brug eksempelvis “gavnlig/skadelig”. 25 Ventetidsanalyse Cox model 26 PROC PHREG DATA=skl; MODEL day*bld(0) = ascites bilirub sklero / RL; RUN; --------------------------------------------------------Summary of the Number of Event and Censored Values Total 177 Event 87 Censored 90 Percent Censored 50.85 Variable DF Ascites 1 Bilirub 1 Sklero 1 Parameter Standard Estimate Error Chi-Square Pr>ChiSq 0.18072 0.22721 0.6326 0.4264 0.00476 0.00112 18.1500 <.0001 -0.21924 0.21801 1.0113 0.3146 Variable Ascites Bilirub Sklero Hazard Ratio 1.198 1.005 0.803 95% Hazard Confidence 0.768 1.003 0.524 Ratio Limits 1.870 1.007 1.231 Ventetidsanalyse Specielle aspekter ved Cox modellen Forklarende variable i ventetidsanalyser En variabel kan indgå i Cox regressionsanalyser på to essentielt forskellige måder: 1. som en regressionsvariabel, dvs. i det prognostiske index, hvad enten det er som (a) en lineær variabel, eller som (b) en kategorisk (CLASS) variabel 2. som en stratifikationsvariabel for den underliggende rate De to muligheder, regressionsvariabel vs. stratifikationsvariabel, er helt forskellige, og valget har ikke alene konsekvenser for både modellering og fortolkning af den aktuelle variabel, men påvirker også estimationen af effekten af de øvrige variable! 27 Ventetidsanalyse Specielle aspekter ved Cox modellen Estimation i en Cox model For den dag tj , hvor patient j reblødte, beregner vi sandsynligheden for, at det var netop patient j, der reblødte, betinget med, at der “skulle” ske en reblødning den dag i det stratum, som patient j tilhører: exp(b · Xj (tj )) ∑ . i med i ℜj exp(b · Xi (tj )) Her betegner ℜj alle de patienter (i’erne), som var under risiko for reblødning i det samme stratum som j på netop den dag tj , hvor j reblødte. Disse bidrag ganges sammen for alle reblødningstidspunkter, og b estimeres som den værdi, b̂, som maksimerer dette totale produkt, der kaldes “Cox’s partielle likelihood”. 28 Ventetidsanalyse Specielle aspekter ved Cox modellen 29 Forklarende variable i ventetidsanalyser: Regressionsvariable Regressionsvariable (både lineære og kategoriske variable) indgår udelukkende via det prognostiske index, dvs. i exp(bX), og ikke i den underliggende rate r0 (t). Med andre ord, raterne antages at være proportionale for forskellige værdier af variablen, X: r(t; X = 0) = r0 (t) og r(t; X = x + 1) = r0 (t) · exp( b·(x + 1) ) = r(t; X = x) · exp(b) eller r(t; X = referencegruppe) = r0 (t) og r(t; X = sammenligningsgruppe) = r0 (t) · exp(b) Konsekvens: 1. effekten kan beskrive med et enkelt tal (HR=exp(b)), 2. men dette tal er kun meningsfuldt, hvis antagelsen om proportionale rater holder (tilnærmelsesvis). Ventetidsanalyse Specielle aspekter ved Cox modellen 30 Forklarende variable i ventetidsanalyser: Stratifikationsvariable For stratifikationsvariable afhænger den underliggende rate af hvilken værdi variablen har, dvs. forskellen på individer med X = 1 og individer med X = 2 ændres med tiden: r(t; X = 1) = r1 (t) og r(t; X = 2) = r2 (t) Konsekvens: 1. vi kan ikke beskrive effekten med et enkelt tal, 2. stratifikationsvariable er nødt til at være kategoriske variable med et begrænset antal forskellige værdier. Ventetidsanalyse Specielle aspekter ved Cox modellen Stratifikation versus Interaktion Stratifikation er ikke det samme som interaktion! Effekten af stratifikationsvariablen ændres med tiden, men effekten afhænger ikke af de øvrige variable, og deres effekter antages at være identiske i de forskellige strata — i modsætning til den epidemiologiske brug af udtrykket “stratificerede analyser”, som betyder helt separate analyser for hver værdi af stratifikationsvariablen!! Interaktion betyder, at effekten af en variabel, for eksempel bilirubin, afhænger af værdien af en anden variabel, for eksempel behandling, men effekterne ændres ikke med tiden. (Stratifikation og interaktion kan sagtens kombineres.) 31 Ventetidsanalyse Transformation af regressionsvariable Behov for transformation af regressionsvariable − Grafiske vurderinger af sammenhængen er mere kompliceret at lave end for normalt fordelte outcomes, fordi vi ikke kan tegne direkte + Principielle kriterier og simple numeriske vurderinger er som i enhver anden statistisk model 32 Ventetidsanalyse Transformation af regressionsvariable Kriterier for transformation af regressionsvariable Kriterier for valg af parametrisering/transformation • Biologisk/medicinsk begrundelse (bedst, men sjældent muligt). – Raten vokser eksponentielt med utransformerede kovariater, mens en logaritmetransformation af en kovariat betyder, at raten vokser med en fast faktor eller procentdel, hver gang kovariaten vokser med f.eks. 10%. • Transformationer brugt af andre (sammenlignelighed). • Den “bedst mulige” transformation for de aktuelle data — pas på: signifikansen vil blive overvurderet, og man kan ikke gå ud fra, at den samme transformation er den mest optimale i andre data — men det kan være et fornuftigt kriterium for konfounderne. 33 Ventetidsanalyse Transformation af regressionsvariable Kriterier for transformation af regressionsvariable Kriteria for valg af parametrisering/transformation fortsat • Se på fordelingen af den forklarende variabel: Nogle få ekstreme værdier af den forklarende variabel kan have urimeligt stor indflydelse på konklusionerne, medmindre variablen transformeres nogle få ekstremt høje → loga (x), nogle få ekstremt lave → exp(x/c) (sjældent brugt). Det bør altid tjekkes, om den valgte transformation giver en rimeligt lineær sammenhæng. Ved at vælge XX = log(x)/ log(1.1) som kovariat, får man, at exp(b̂) (Hazard Ratio) direkte estimerer den faktor, som raten skal ganges med for en 10% forskel i kovariaten. 34 Ventetidsanalyse Transformation af regressionsvariable Fordelingen af serum bilirubin PROC UNIVARIATE DATA=skl; *- Tjek, om fordelingen er skæv -*; VAR bilirub; HISTOGRAM / HEIGHT=5; RUN; 35 Ventetidsanalyse Transformation af regressionsvariable Fordelingen af log(serum bilirubin) DATA skl; SET skl; log2Bilirub=LOG2(bilirub); RUN; PROC UNIVARIATE DATA=skl; VAR log2Bilirub; HISTOGRAM / HEIGHT=5; RUN; 36 Ventetidsanalyse Transformation af regressionsvariable Test af behov for transformation af regressionsvariable Simpelt, numerisk test: Inkluder både en utransformeret og en transformeret version af variablen samtidigt – f.eks. X og log2 (X) – for at se, om der er et klart svar på hvilken, der er den bedste prediktor. Kræver en fornuftigt valg af transformation – logaritmetransformation er ofte et oplagt valg, fordi det svarer til stabil effekt af relative forskelle, hvilket ofte er det intuitivt naturlige valg. 37 Ventetidsanalyse Transformation af regressionsvariable Test af behov for transformation af en variabel Inklusion af X og log(X) samtidigt (lige meget hvilken logaritme), giver flere svar på en gang (gælder alle statistiske modeller, også almindelig regression og logistisk regression): 1. Hvis log(X) er insignifikant, kan sammenhængen antages at være lineær 2. Hvis X er insignifikant, kan sammenhængen beskrives som konstant effekt af relative (%-vise) forskelle 3. Hvis begge er insignifikante, kan man selv vælge ud fra hvad, der er nemmest at formidle, 4. Hvis begge er signifikante, må man undersøge det nærmere. Tjek effekterne af den lavest mulige og den højest mulige fordobling (eller 10-dobling eller 10% forøgning eller en anden relevant procentvis forskel). NB: Det enkelte parameterestimat i denne model kan ikke fortolkes: “Ændring i outcome, når X fordobles/10-dobles/ændres 10% samtidigt med, at X holdes fast”, giver ikke mening! 38 Ventetidsanalyse Transformation af regressionsvariable Test af behov for transformation af serum bilirubin Laveste observerede bilirubin er 4, højeste er 545 (=2 · 272.5). Inklusion af serum bilirubin utransformeret såvel som log2 -transformeret i SAS, med estimater for effekterne af den lavest mulige og den højest mulige fordobling i de aktuelle data: PROC PHREG DATA=skl; MODEL day*bld(0) = Sklero Bilirub log2Bilirub; ESTIMATE "Mindst dbl" Bilirub 4 Log2Bilirub 1 / EXP ; ESTIMATE "Størst dbl" Bilirub 272.5 Log2Bilirub 1 / EXP ; Begge: TEST Bilirub=log2Bilirub=0; RUN; Ovenstående TEST-statement beregner Wald’s test for, at begge regressionsparametre er lig med 0, så man kan udelade begge variable på en gang, altså at serum bilirubin intet betyder for reblødningsraten. 39 Ventetidsanalyse Transformation af regressionsvariable 40 Udpluk af output Variable DF Sklero 1 Bilirub 1 log2Bilirub 1 Parameter Estimate -0.18290 -0.0001959 0.48004 Standard Error Chi-Square 0.21596 0.7172 0.00231 0.0072 0.18152 6.9939 Pr>ChiSq 0.3971 0.9325 0.0082 Linear Hypotheses Testing Results Wald Label Chi-Square DF Pr>ChiSq Begge 22.8760 2 <.0001 Estimate Standard Label Estimate Error z Value Mindst dbl 0.4793 0.1738 2.76 Størst dbl 0.4267 0.4873 0.88 Pr>|z| Exponentiated 0.0058 1.6149 0.3812 1.5321 Ventetidsanalyse Transformation af regressionsvariable Plot af sammenhængen med bilirubin som en lineær spline Lineær spline giver både grafik og et numerisk test (dvs. p-værdi) (Eksempel til selvstudium med test og estimater af hældningerne i de enkelte intervaller – velegnet til tabel i artikler – kan findes s. 84-93 i disse noter, og generaliserbar “automatisk” SAS-kode findes i det samlede SAS program bagerst i noterne) 41 Ventetidsanalyse Transformation af regressionsvariable Estimation med log2 (serum bilirubin) PROC PHREG DATA=skl; MODEL day*bld(0) = sklero log2bilirub / RL; RUN; --------------------------------------------------Parameter Standard Variable DF Estimate Error Chi-Square Pr>ChiSq Sklero 1 -0.18373 0.21575 0.7252 0.3944 log2Bilirub 1 0.46716 0.09706 23.1656 <.0001 Analysis of Maximum Likelihood Estimates Hazard 95% Hazard Ratio Variable Ratio Confidence Limits Sklero 0.832 0.545 1.270 log2Bilirub 1.595 1.319 1.930 Fortolkning af effekten af serum bilirubin: En dobbelt så stor serum bilirubin værdi ved baseline svarer til en næsten 60% højere reblødningsrate for personer i samme behandlingsgruppe. 42 Ventetidsanalyse Opsummering 2. del Opsummering 2. del Standard valg af regressionsmodel: • Cox’s proportional hazards regressionsmodel Forskellige måder variable kan indgå på: • Regressionsvariable indgår via det prognostiske index – lineære variable – klassevariable – interaktion • Stratifikationsvariable – helt forskellige rater, men samme effekt af alle andre variable Transformation af regressionsvariable: • Kriterier for valg af transformation er helt ’som sædvanligt’ • Simpelt numerisk test (dvs. en p-værdi) er helt ’som sædvanligt’ • Grafisk test med tilhørende p-værdi er mere besværligt (lineær spline) 43 Ventetidsanalyse Særlig modelkontrol for Cox modellen Modelkontrol specielt for Cox modellen Cox modellen forudsætter proportionale rater, R(t; X) = R0 (t) exp(bX), og dermed ln(R(t; X)) = ln(R0 (t)) + bX Grafisk tjek af proportionale rater: Stratificer for hver variabel, en ad gangen, og plot ln(Rstratum (t)) = ln( − ln(Sstratum (t)) ) som funktion af tiden. Kurverne skal være nogenlunde parallelle. For kontinuerte variable skal man dels vælge nogle passende opdelingspunkter, dels huske at den kontinuerte variabel stadig skal indgå i det prognostiske index (se hvordan i programeksemplet allerbagest i disse noter) 44 Ventetidsanalyse Særlig modelkontrol for Cox modellen Plot af log(kumuleret rate) for grafisk tjek af proportionalitet Lineær tidsakse Logaritmisk tidsakse 45 Ventetidsanalyse Særlig modelkontrol for Cox modellen 46 SAS kode til grafisk tjek af proportionale rater PROC PHREG DATA=skl; MODEL Day*bld(0) = log2bilirub; STRATA sklero; BASELINE OUT=check LOGLOGS=LCumRate / METHOD=CH; RUN; SYMBOL1 C=BLACK V=NONE I=STEPLJ L=1 MODE=INCLUDE; SYMBOL2 C=RED V=NONE I=STEPLJ L=1 MODE=INCLUDE; AXIS2 LABEL=(A=90); PROC GPLOT DATA=check; *- Først et plot med almindelig lineær tidsakse -*; PLOT LCumRate*day=sklero / VAXIS=AXIS2 NOLEGEND; RUN; AXIS1 LOGBASE=10 /* Log-skaleret akse med hak ved 1,2,..,10,20,..,100,200,.. */ INTERVAL=PARTIAL ; /* Aksen slutter ved den største observerede værdi */ PROC GPLOT DATA=check; *- Så et plot med logaritmisk tidsakse -*; WHERE 0<Day; *- Bemærk, at Day=0 skal fjernes pga. logaritmen -*; PLOT LCumRate*Day=Sklero / HAXIS=AXIS1 VAXIS=AXIS2 NOLEGEND; GOPTIONS DEVICE=; *- SKAL med for SAS Enterprise, ellers helt unødvendig! -*; RUN; Ventetidsanalyse Særlig modelkontrol for Cox modellen 47 Numerisk test af proportionalitet ved brug af tidsafhængige variable Vælg passende opdeling (her 14 og 105 dage), hvor rate ratioen tillades at være forskellig for de forskellige tidsintervaller. Dette gøres v.h.a. tidsafhængige dummy variable (her Skl_0_14, Skl_14_105 og SklFra105). Proportionalitetsantagelsen testes ved at teste, om de tilsvarende parameterestimater kan antages at være ens: PROC PHREG DATA=skl; MODEL day*bld(0) = log2bilirub Skl_0_14 Skl_14_105 SklFra105; IF day<=14 THEN Skl_0_14=sklero; ELSE Skl_0_14=0; IF 14<day<=105 THEN Skl_14_105=sklero; ELSE Skl_14_105=0; IF 105<day THEN SklFra105=sklero; ELSE SklFra105=0; TestProp: TEST RUN; Skl_0_14 = Skl_14_105 = SKLfra105; For hvert reblødningstidspunkt beregnes variablene inden i PHREG for hver enkelt af de patienter, der er under risiko på netop det tidspunkt (i’erne i nævneren på s. 29). I beregningerne for hver enkelt patient i bruger SAS de værdier, som variablene (her sklero) har for den enkelte patient i, undtagen for tids-responsvariablen (her day), som er lig det aktuelle reblødningstidspunkt tj (reblødningstidspunktet for patient j på s. 29) Ventetidsanalyse Særlig modelkontrol for Cox modellen 48 Del af output fra PROC PHREG Parameter Standard Chi- Pr> Hazard 95% Hazard Ratio Variable DF Estimate Error Square ChiSq Ratio Confidence Limits log2Bilirub 1 0.45629 0.09640 22.4022 <.0001 1.578 1.306 1.906 Skl_0_14 1 0.15759 0.31013 0.2582 0.6114 1.171 0.637 2.150 Skl_14_105 1 -0.46164 0.37626 1.5053 0.2199 0.630 0.301 1.318 SklFra105 1 -0.68164 0.57135 1.4234 0.2329 0.506 0.165 1.550 Linear Hypotheses Testing Results Wald Label Chi-Square DF Pr > ChiSq TestProp 2.5117 2 0.2848 Mønster som forventet biologisk, men ingen statistisk signifikans Ventetidsanalyse Tidsskalaer Virkelighedstjek! Tid fra stop af seneste blødning har stor betydning for sandsynligheden for at begynde at rebløde her og nu • dels er det ikke muligt at rebløde, mens den foregående blødning stadig er i gang, • dels mindskes sandsynligheden for at rebløde markant med, hvor længe det er siden, man blødte sidst. Vi har altså to komplikationer: 1. Patienterne er ikke under risiko fra tid 0 for at blive observeret med start på en reblødning i vores studie. 2. ’Tid’ er ikke bare tid – der er flere tidsskalaer at vælge imellem. 49 Ventetidsanalyse Tidsskalaer Tidsskalaer Eksempler på tidsskalaer • alder • kalendertid • tid siden sygdommen begyndte • tid fra en eller anden hændelse af stor betydning for raten (her tid fra stop af foregående blødning) • tid fra randomisering (ofte et ikke-optimalt valg) Den eneste forskel for det enkelte individ er definitionen af tid=0, men det kan gøre en væsentlig forskel, fordi det kan have stor betydning for hvem, der ellers var “under risiko” i studiet, da hændelsen skete for et givet individ. 50 Ventetidsanalyse Tidsskalaer 51 Forskellige tidsskalaer Kalendertid: Tid siden indgang i studiet: Ventetidsanalyse Tidsskalaer 52 Eksempler på forskellige tidsskalaer ved reblødning Tid siden randomisering B Tid siden indgang i studiet: B A 50 år gammel 50 år gammel 1. blødnings start 1. blødnings start 1. blødning slutter randomiseret 50 år gammel A 50 år gammel 1. blødnings start 1. blødnings start 1. blødning slutter randomiseret 1. blødning slutter randomiseret 1. blødning slutter 2. blødnings start 2. blødnings start randomiseret 2. blødnings start 2. blødnings start Ventetidsanalyse Tidsskalaer Tidsskalaens betydning for Cox modellen Hidtil har vi brugt tid siden randomisering som tid i Cox modellen – men reblødningsraten afhænger langt mere af, hvor længe siden det er, patienten holdt op med at bløde. • Fordelen ved Cox modellen er, at den tillader en vilkårlig sammenhæng mellem den underliggende rate og den valgte tidsskala. • Ratioen mellem raterne for to vilkårlige patienter i samme stratum på et hvilket som helst tidspunkt afhænger kun af regressionsvariablene, altså ikke af tidspunktet. • Egenskaber ved en relevant tidsskala: Der skal være en god grund til at tro, at raten ændres med tid siden tid 0 på samme måde for alle individer i samme stratum. 53 Ventetidsanalyse Tidsskalaer Valg af tidsskala Vælg den tidsskala, hvor raten varierer mest (eller mest ujævnt) med tiden inden for det tidsinterval, hvor man har observationer! Andre tidsskalaer kan indgå via regressionsvariable i Cox modellen og/eller via stratifikation. Hvis betydningen af en alternativ tidsskala ikke følger mønstret “en måned mere betyder altid det samme”, så er det nødvendigt enten at stratificere eller at bruge tidsafhængige regressionsvariable (se det numeriske test for proportionalitet s. 47 for et eksempel på SAS programmering med tidsafhængige variable). Brug aldrig en tidsskala, hvor man skal konstruere pseudotidspunkter for nogle af personerne. Det er et helt sikkert bevis på et forkert valg af tidsskala! 54 Ventetidsanalyse Tidsskalaer Forsinket indgang Årsag: Der skal ske et eller andet bestemt for individerne, før det ville tælle med i vores analyse, hvis de oplevede vores “outcome” hændelse. Dette sker på forskellige tidspunkter for forskellige individer, og det er ikke altid sket før tid 0 i den valgte tidsskala. Eksempler: • for nogle patienter sker randomiseringen efter tid 0 i den valgte tidsskala • i analyser med tid siden randomisering kan patienterne ikke rebløde, før de er holdt op med den første blødning • nogen af de forklarende variable kræver en speciel undersøgelse, og nogen af patienterne er nødt til at vente på denne undersøgelse • for at blive inkluderet skal personerne være i live og “raske” ved studiestart 55 Ventetidsanalyse Tidsskalaer 56 Forsinket indgang i SAS: Option ENTRY= PROC PHREG DATA=skl; MODEL tNotBld*bld(0) = log2bilirub sklero / ENTRY=t_entry RL; RUN; --------------------------------------------Model Information Data Set WORK.SKL Entry Time Variable t_entry Dependent Variable tNotBld Censoring Variable Bld Censoring Value(s) 0 Ties Handling BRESLOW Percent Total Event Censored Censored 149 86 63 42.28 : Analysis of Maximum Likelihood Estimates Parameter Standard Hazard 95% Hazard Variable DF Estimate Error Chi-Square Pr>ChiSq Ratio Confidence log2Bilirub 1 0.43431 0.09580 20.5534 <.0001 1.544 1.280 Sklero 1 -0.16470 0.21682 0.5770 .4475 0.848 0.555 Ratio Limits 1.863 1.297 Ventetidsanalyse Konkurrerende afgangsårsager Virkelighedstjek 2! Når vi overhovedet interesserer os for at mindske reblødningsraten, er det fordi reblødning er en af de væsentligste dødsårsager blandt patienter, der mindst en gang har blødt fra åreknuder i spiserøret. Men patienterne kan jo stadig dø, inden de når at rebløde! 57 Ventetidsanalyse Konkurrerende afgangsårsager Konkurrerende afgangsårsager Individerne kan udgå af flere årsager, her reblødning eller død. Konsekvenser: • Teknisk: Andre afgangsårsager end den, der er i fokus, behandles som censureringer • Fortolkning: Raten og de estimerede effekter har den samme fortolkning som før – MEN • Kaplan-Meier kurven kan ikke fortolkes som sandsynligheden for at undgå den hændelse, der er i fokus Hvis flere slags hændelser er af interesse (som her), så analyseres hver enkelt slags hændelse separat med de andre slags hændelser behandlet som censureringer. 58 Ventetidsanalyse Konkurrerende afgangsårsager 59 Separate analyser af de to typer af hændelser PROC PHREG DATA=skl; MODEL tNotBld*bld(0)=sklero log2bilirub ascites / ENTRY=t_entry RL; RUN; Parameter Standard Hazard 95% Hazard Ratio Variable DF Estimate Error Chi-Sq. Pr>ChiSq Ratio Confidence Limits Sklero 1 -0.19124 0.22021 0.7542 0.3851 0.826 0.536 1.272 log2Bilirub 1 0.42240 0.09677 19.0542 <.0001 1.526 1.262 1.844 Ascites 1 0.15762 0.22776 0.4789 0.4889 1.171 0.749 1.829 ------------------------------------------------------------------------PROC PHREG DATA=skl; MODEL tNotBld*dead(0)=sklero log2bilirub ascites / ENTRY=t_entry RL; RUN; Parameter Standard Hazard 95% Hazard Ratio Variable DF Estimate Error Chi-Sq. Pr>ChiSq Ratio Confidence Limits Sklero 1 0.17358 0.35173 0.2435 0.6217 1.190 0.597 2.370 log2Bilirub 1 0.50353 0.14482 12.0890 0.0005 1.655 1.246 2.198 Ascites 1 0.93763 0.38166 6.0354 0.0140 2.554 1.209 5.396 Ventetidsanalyse Konkurrerende afgangsårsager 60 Sandsynligheden for at være i live uden reblødning Hvis de forskellige hændelser kombineres, fås en vurdering af effekten af de forklarende variable på tid til den første af disse hændelser sker: DATA skl; SET skl; status = bld + 2*dead; RUN; PROC PHREG DATA=skl; MODEL tNotBld*status(0) = sklero log2bilirub ascites / ENTRY=t_entry RL; RUN; -------------------------------------------------------------------Parameter Standard Hazard 95% Hazard Ratio Variable DF Estimate Error Chi-Sq. Pr>ChiSq Ratio Confidence Limits Sklero 1 -0.08715 0.18555 0.2206 0.6386 0.917 0.637 1.319 log2Bilirub 1 0.44557 0.08044 30.6819 <.0001 1.561 1.334 1.828 Ascites 1 0.37333 0.19303 3.7405 0.0531 1.453 0.995 2.121 Ventetidsanalyse Konkurrerende afgangsårsager Konkurrerende afgangsårsager Sandsynligheden for, at reblødningen sker efter præcis t dage, er lig med S(t; X) · r(t; X) hvor S(t; X) er sandsynligheden for at være i live uden reblødning indtil (men ikke med) dag t. Sandsynligheden for at have observeret en reblødning inden tid T fås ved at summere disse for alle t ≤ T Konsekvens: • Faktorer, som ikke påvirker raten for en bestemt slags hændelse, kan have en stærk effekt på sandsynligheden for at opleve hændelsen via en effekt på raten for en konkurrerende hændelse og dermed en effekt på sandsynligheden for at være under risiko. • Effekten på sandsynligheden for at opleve hændelsen kan i ekstreme tilfælde være modsat rettet effekten på selve raten. 61 Ventetidsanalyse Rate ratio, odds ratio og risk ratio Ventetidsanalyse vs. analyse af sandsynlighed for hændelsen • Meningsfuld definition af “sandsynlighed for hændelsen” kræver, at man vælger et fast tidsrum (glemmes desværre ofte, med deraf følgende problematisk fortolkning og konklusion) • Ventetidsanalyse (rate ratio) har større styrke end analyser af sandsynligheden for, at hændelsen er sket inden det bestemte, faste tidspunkt – uanset om man laver logistiske (odds ratio) eller log-lineære (risk ratio) regressionsanalyser • Analyser af “sandsynlighed for hændelsen” er direkte forkerte, når der er censureringer – det gælder både logistisk regression (odds ratio) og log-lineær regression (risk ratio). Censureringer må hverken ses som “ingen hændelse” eller helt udelades af analysen! Kun ventetidsanalyse er korrekt! 62 Ventetidsanalyse Rate ratio, odds ratio og risk ratio Sammenligning af rate ratio, odds ratio og risk ratio Alle tre kan desværre blive kaldt det upræcise “relativ risiko” i artikler! Simple modeller: Hvis sandsynlighederne er meningsfuldt defineret (fast tidsrum og ingen censurering), viser rate (“hazard”) ratio (HR) altid stærkere effekt end odds ratio (OR), som igen viser stærkere effekt end risk ratio (RR). Matematisk relation: Enten er • 1 < RR < OR < HR eller • 1 = RR = OR = HR eller også er • 1 > RR > OR > HR Multiple regressionsmodeller: Modellerne passer ikke sammen! Effekterne kan ikke være multiplikative på alle 3 skalaer, så (mindst) 2 ud af 3 er forkerte! Hvis hændelsen er meget sjælden, ligner de dog hinanden 63 Ventetidsanalyse Opsummering 3. del Opsummering 3. del Modelkontrol af Cox model: • proportionale rater − grafisk vurdering ved plot af log-transformeret kumuleret rate − numerisk test med tidsafhængige variable Tidsskala: • Valg af tidsskala • Forsinket indgang Konkurrerende afgangsårsager: • separate analyser med de andre slags hændelser som censurering • effekten på sandsynligheden kan være meget anderledes end effekten på raten Ventetidsanalyser vs. logistisk eller log-lineær regression • Ventetidsanalyser har størst styrke • Hvis der er censureringer, så er logistisk regression og log-lineær regression direkte forkert 64 Censurerede, normalt fordelte data Censurerede, normalt fordelte data Eksempel med SAS programbidder – til selvstudium – 65 Censurerede, normalt fordelte data (data med detektionsgrænse) Data med detektionsgrænse For lave værdier er der “venstrecensurering”, dvs. man ved bare, at værdien er under en given grænse: Baggrundsstøj eller begrænsning i måleudstyrets/assayets følsomhed har medført, at man ikke kan skelne mellem meget lave værdier. Man tør godt gøre antagelser om fordelingen af de sande målinger, eksempelvis at residualerne er normalt fordelt (eventuelt efter logaritmetransformation af målingerne). 66 Censurerede, normalt fordelte data (data med detektionsgrænse) Eksempel på venstrecensurerede data Målinger af NO2 indendørs og udendørs (Raaschou-Nielsen et al., 1997) Vi har 85 sæt af samhørende mål for NO2 1. udenfor gadedøren 2. i soveværelset med en detektionsgrænse på 0.75. Vi ønsker at undersøge, hvor stor indflydelse udendørsniveauet har på indendørsniveauet. 67 Censurerede, normalt fordelte data (data med detektionsgrænse) Eksempel på venstrecensurerede data Samhørende mål for NO2 inde og ude (under detektionsgrænsen er plottet som lig med detektionsgrænsen) 68 Censurerede, normalt fordelte data (data med detektionsgrænse) Estimation af sammenhæng Hvad med bare at udelade de “ukendte”? Pas på: Det er selektion baseret på responsvariablen! DATA no2; SET no2; IF UPCASE(UnderDetekt)="JA" THEN inde=.; ude_25 = ude - 2.5; * Centrering af variabel ; RUN; PROC REG DATA=no2; Udensmaa: MODEL inde = ude_25; RUN; 69 Censurerede, normalt fordelte data (data med detektionsgrænse) The REG Procedure Model: Udensmaa Dependent Variable: INDE Analysis of Variance Sum of Mean Source DF Squares Square F Value Pr>F Model 1 9.18865 9.18865 107.71 <.0001 Error 58 4.94781 0.08531 Corrected Total 59 14.13645 Root MSE 0.29207 Dependent Mean 1.52430 Coeff Var 19.16120 Variable Intercept ude_25 R-Square 0.6500 Adj R-Sq 0.6440 Parameter Estimates Parameter Standard DF Estimate Error t Value Pr>|t| 1 1 1.60065 0.60009 0.03842 0.05782 41.66 <.0001 10.38 <.0001 70 Censurerede, normalt fordelte data (data med detektionsgrænse) Fit uden data under detektionsgrænsen Samhørende mål for NO2 inde og ude Duer ikke på grund af bias. Vi mangler alle de laveste indendørsværdier, så linien ligger for højt for de lave udendørsværdier, og spredningen undervurderes! 71 Censurerede, normalt fordelte data (data med detektionsgrænse) Estimation af sammenhæng Kan vi ikke bare sætte alle observationer under detektionsgrænsen lig med detektionsgrænsen (ligesom i tegningen)? DATA no2; SET no2; IF UPCASE(UnderDetekt)="JA" THEN inde=0.75; RUN; PROC REG DATA=no2; Naiv: MODEL inde = ude_25; RUN; 72 Censurerede, normalt fordelte data (data med detektionsgrænse) 73 The REG Procedure Model: Naiv Dependent Variable: INDE Analysis of Variance Source DF Sum of Squares Mean Square F Value Pr>F Model 1 18.15521 18.15521 229.66 <.0001 Error 83 6.56128 0.07905 Corrected Total 84 24.71649 Root MSE 0.28116 Dependent Mean 1.29656 Coeff Var 21.68511 R-Square 0.7345 Adj R-Sq 0.7313 Parameter Estimates Parameter Standard Variable DF Estimate Error t Value Pr>|t| Intercept 1 1.55732 0.03502 44.48 <.0001 ude_25 1 0.64260 0.04240 15.15 <.0001 Censurerede, normalt fordelte data (data med detektionsgrænse) Fit for naiv model Samhørende mål for NO2 inde og ude Duer heller ikke på grund af bias. Vi overvurderer alle de laveste indendørsværdier, så linien ligger stadig for højt for de lave udendørsværdier, og spredningen undervurderes! 74 Censurerede, normalt fordelte data (data med detektionsgrænse) Estimation af sammenhæng Alternativ (lidt bedre, men stadig tvivlsomt): Observationer under detektionsgrænsen sættes lig et gæt på gennemsnitsværdien for observationer under detektionsgrænsen ( 23 ·detektionsgrænsen svarer til, at et histogram over de sande værdier ville ligne en trekant fra 0 op til detektionsgrænsen): DATA no2; SET no2; IF UPCASE(UnderDetekt)="JA" THEN justeret = (2/3)*0.75; ELSE justeret = inde; RUN; PROC REG DATA=no2; Adhoc: MODEL justeret = ude_25; RUN; (Hvis man tror på, at alle værdier mellem 0 og detektionsgrænsen er lige sandsynlige, så er 12 ·detektionsgrænsen et relevant gæt. Hvis man tror, at histogrammet ville følge en parabel, er 34 ·detektionsgrænsen et relevant gæt.) 75 Censurerede, normalt fordelte data (data med detektionsgrænse) 76 The REG Procedure Model: Adhoc Dependent Variable: justeret Analysis of Variance Source DF Sum of Squares Mean Square F Value Pr>F Model 1 23.92209 23.92209 Error 83 8.72937 0.10517 Corrected Total 84 32.65146 Root MSE 0.32430 Dependent Mean 1.22303 Coeff Var 26.51639 227.45 <.0001 R-Square 0.7326 Adj R-Sq 0.7294 Parameter Estimates Parameter Standard Variable DF Estimate Error t Value Pr>|t| Intercept 1 1.52235 0.04039 37.69 <.0001 ude_25 1 0.73763 0.04891 15.08 <.0001 Censurerede, normalt fordelte data (data med detektionsgrænse) Fit med gæt på gennemsnitsværdi Samhørende mål for NO2 inde og ude Vi ved ikke, om linien ligger for højt (for højt gæt på gennemsnit) eller for lavt (for lavt gæt på gennemsnit) for de lave udendørsværdier, men spredningen undervurderes stadig. 77 Censurerede, normalt fordelte data (data med detektionsgrænse) Korrekt estimation af sammenhæng Optimal udnyttelse af data opnås ved at inkludere præcis den viden, vi har: De censurerede data er mindre end detektionsgrænsen. Princip: • For hver af observationerne under detektionsgrænsen kan det udregnes, hvad sandsynligheden er for, at observationen ligger under detektionsgrænsen for givne værdier af alle modelparametrene, både regressionsparametrene og variansparameteren. Denne sandsynlighed indgår i estimationen. • De “almindelige” observationer indgår på sædvanlig vis. Alle modelparametrene estimeres som de værdier, der alt i alt passer bedst med det observerede, inklusive at observationerne under detektionsgrænsen faktisk lå under denne grænse. 78 Censurerede, normalt fordelte data (data med detektionsgrænse) I SAS skal der være to variable, der viser de faktiske nedre henholdsvis øvre grænser for responsvariablens værdi. • For observerede værdier er nedre og øvre grænse lig observationen. • For observationer under detektionsgrænsen er den nedre grænse ukendt, hvilket angives som et . (missing) i SAS, og den øvre grænse er lig med detektionsgrænsen. DATA no2; SET no2; IF UPCASE(UnderDetekt)="JA" THEN DO; nedre = .; oevre = 0.75; END; ELSE DO; nedre = inde; oevre = inde; END; RUN; PROC LIFEREG DATA=no2; MODEL (nedre, oevre) = ude_25 / DIST=NORMAL NOLOG; RUN; 79 Censurerede, normalt fordelte data (data med detektionsgrænse) The LIFEREG Procedure Model Information Data Set Dependent Variable Dependent Variable Number of Observations Noncensored Values Right Censored Values Left Censored Values Interval Censored Values Name of Distribution Log Likelihood Algorithm converged. WORK.NO2 nedre oevre 85 60 0 25 0 Normal -35.88065877 Effect ude_25 80 Type III Analysis of Effects Wald DF Chi-Square Pr > ChiSq 1 177.8626 <.0001 Analysis of Parameter Estimates Standard 95% Confidence Parameter DF Estimate Error Limits Intercept 1 1.5203 0.0431 1.4359 1.6047 ude_25 1 0.7845 0.0588 0.6692 0.8997 Scale 1 0.3403 0.0320 0.2830 0.4092 Parameter Intercept ude_25 Scale Chi-Square Pr > ChiSq 1245.07 <.0001 177.86 <.0001 113.08 <.0001 Censurerede, normalt fordelte data (data med detektionsgrænse) Optimalt fit Samhørende mål for NO2 inde og ude 81 Censurerede, normalt fordelte data (data med detektionsgrænse) Estimation af standard deviation scale = maximum likelihood estimat for standard deviationen (SD) (=residualspredning=prediktionsspredning). For at få noget, der er sammenligneligt med det sædvanlige estimat (“Root MSE” i SAS output), skal der justeres: √ n SD* = scale · n−k−1 (n = antal observationer, k = antal kovariater). √ Her fås SD*= 0.340 · 85 83 = 0.344. 82 Censurerede, normalt fordelte data (data med detektionsgrænse) 83 Sammenligning af resultater Oversigt over resultaterne af de 4 analyser: Model Udensmaa Naiv Adhoc Optimal Ude_25 Parameter Standard Estimate Error 0.600 0.058 0.643 0.042 0.738 0.049 0.785 0.059 SD ("Root MSE") 0.292 0.281 0.324 0.344 Lineære splines 84 SAS kode til lineære splines – til selvstudium – Lineære splines 85 Konstruktion af en lineær spline Lineære splines 86 Lineær spline, princip: Vi konstruerer nogle variable, der tilsammen summerer til serum bilirubin-variablen eventuelt fratrukket et passende tal. Hver variabel fanger den del af variationen i serum bilirubin-værdierne, der ligger i et præ-defineret interval. Af hensyn til den statistiske styrke kan det anbefales at lægge intervallerne, så der er ca. lige mange hændelser i hvert interval. Her er valgt 4 variable, der summerer til bilirubin minus medianen blandt reblødere. Interval-endepunkterne/knudepunkterne (engelsk “knots”) er placeret ved kvartilerne blandt rebløderne: 26, 47 og 73 • b_u26 fanger variationen i bilirubin for værdier under 26 • b_26_47 fanger variationen i bilirubin for værdier mellem 26 og 47 • b_47_73 fanger variationen i bilirubin for værdier mellem 47 og 73 • b_o73 fanger variationen i bilirubin for værdier over 73 Lineære splines 87 Beregning af observerede percentiler blandt reblødere PROC UNIVARIATE DATA=skl PCTLDEF=3; WHERE bld=1; VAR bilirub; RUN; (PCTLDEF=3 giver observerede percentiler) Quantile 100% Max 99% 95% 90% 75% Q3 50% Median 25% Q1 10% 5% 1% 0% Min Estimate 495 495 177 146 73 47 26 15 12 4 4 Mulig kode for de nødvendige ekstra variable i SAS Lineære splines DATA skl; SET skl; IF NOT MISSING(bilirub) AND bilirub<=26 THEN DO; *- de laveste bilirubinværdier -*; b_u26 = bilirub - 26; *- beregner hvor meget under 26 -*; b_26_47 = 26 - 47; *- starter med bundværdien 26-47 = -21 -*; b_47_73 = 0; b_o73 = 0; END; IF 26<bilirub<=47 THEN DO; *- bilirubin mellem laveste kvartil og median -*; b_u26 = 0; *- stopper på topværdien 0 -*; b_26_47 = bilirub - 47; b_47_73 = 0; b_o73 = 0; END; IF 47<bilirub<=73 THEN DO; *- bilirubin mellem median og højeste kvartil -*; b_u26 = 0; b_26_47 = 0; b_47_73 = bilirub - 47; b_o73 = 0; END; IF 73<bilirub THEN DO; *- de højeste bilirubinværdier -*; b_u26 = 0; b_26_47 = 0; b_47_73 = 73 - 47; *- stopper på topværdien 73-47 = 26 -*; b_o73 = bilirub - 73; END; RUN; 88 Lineære splines 89 Kort “smart” SAS-kode, der gør det samme: DATA skl; SET skl; IF NOT MISSING(bilirub) THEN DO; b_u26 = MIN(bilirub-26, 0); b_26_47 = MIN( MAX(26-47,bilirub-47), 0); b_47_73 = MAX( MIN(73-47,bilirub-47), 0); b_o73 = MAX(bilirub-73, 0); END; RUN; MIN finder den mindste værdi og MAX finder den største værdi af de variable eller tal, der står i parentesen Lineære splines 90 Estimation og test af lineær spline PROC PHREG DATA=skl; MODEL day*bld(0) = b_u26 b_26_47 b_47_73 b_o73 sklero / RL; TestLine: TEST b_u26 = b_26_47 = b_47_73 = b_o73; RUN; Lineære splines 91 Estimation og test af lineær spline fortsat Variable DF b_u26 1 b_26_47 1 b_47_73 1 b_o73 1 Sklero 1 Parameter Estimate -0.01390 0.03250 0.03483 0.00162 -0.13197 Standard Error 0.03276 0.02161 0.01412 0.00161 0.21954 Chi-Sq. Pr>ChiSq 0.1801 0.6712 2.2618 0.1326 6.0838 0.0136 1.0189 0.3128 0.3613 0.5478 Hazard Ratio 0.986 1.033 1.035 1.002 0.876 95% Hazard Ratio Confidence Limits 0.925 1.052 0.990 1.078 1.007 1.065 0.998 1.005 0.570 1.348 Linear Hypotheses Testing Results Label Wald Chi-Square DF Pr > ChiSq TestLine 15.7811 3 0.0013 “Parameter Estimate” er hældningen for ln(rate ratio) inden for hvert af intervallerne. “Hazard Ratio” er derfor et mål for den interval-specifikke dosis-respons relation. Lineære splines Plot af lineær spline: Datasæt, der skal plottes 5 og 95 percentilerne for bilirubin blandt reblødere er 12 og 177 DATA Plot; DO bili=12, 26, 47, 73, 177; * Knækpunkter og endepunkter; * Variabelværdier svarende til knæk- og endepunkter beregnes ; b_u26=MIN(bili-26,0); b_26_47=MIN( MAX(26-47,bili-47), 0); b_47_73=MAX( MIN(73-47,bili-47), 0); b_o73=MAX(bili-73,0); * Parameterestimaterne fra outputtet ganges på de tilsvarende variable ; * for at udregne den prædikterede værdi af det Prognostiske Index ; * (eksponenten i Cox modellen) ; pi = -0.01390*b_u26 +0.03250*b_26_47 +0.03483*b_47_73 +0.00162*b_o73; rr = EXP(pi); * PI omregnes til Rate Ratio ; OUTPUT; * Gem værdierne af variablene på SAS-datasættet Plot ; END; RUN; 92 Lineære splines 93 Plot af lineær spline Eksempel på et kald af PROC GPLOT med SYMBOL og AXIS statements: SYMBOL1 C=BLACK V=CIRCLE I=JOIN L=1 MODE=INCLUDE; AXIS1 LABEL=(F="Andalus" "Bilirubin") ; AXIS2 LABEL=(F="Andalus" A=90 "Rate ratio") LOGBASE=10 INTERVAL=PARTIAL MAJOR=(H=1) MINOR=(H=1); PROC GPLOT DATA=plot; PLOT rr*bili / HAXIS=AXIS1 VAXIS=AXIS2; GOPTIONS DEVICE=; *- SKAL med for SAS Enterprise -*; RUN; Eksempel på program til ventetidsanalyse Samlet SAS program eksempel – til selvstudium – 94 Eksempel på program til ventetidsanalyse 95 *-----------------------------------------------------------------------*; *- AXIS-statements og LEGEND-statement til brug i resten af programmet -*; *-----------------------------------------------------------------------*; GOPTIONS FTEXT="Times New Roman"; /* bestemmer skrifttypen i GPLOT */ *--- Til almindelig, lineært skaleret X-akse ---*; AXIS1 LABEL=(H=2.5) /* bestemmer skriftstørrelsen af aksens tekst */ VALUE=(H=2); /* skriftstørrelsen af aksens talværdier */ *--- Til logaritmisk skaleret X-akse ---*; AXIS11 LABEL=(H=2.5) VALUE=(H=2) LOGBASE=10 /* log-skaleret med hak ved 1,2,..,10,20,..,100,200,.. */ INTERVAL=PARTIAL /* aksen slutter ved den største værdi i data */ MAJOR=(H=1) /* størrelsen på hakkene ved tal */ MINOR=(H=1); /* størrelsen på hakkene mellem tallene */ *--- Til almindelig, lineært skaleret Y-akse ---*; AXIS2 LABEL=(A=90 /* skriver teksten lodret, dvs. langs Y-aksen */ H=2.5) VALUE=(H=2); *--- Til logaritmisk skaleret Y-akse ---*; AXIS22 LABEL=(A=90 H=2.5) VALUE=(H=2) LOGBASE=10 INTERVAL=PARTIAL MAJOR=(H=1) MINOR=(H=1); *--- LEGEND-statement, så legend er nemmere kan læses ---*; LEGEND1 LABEL=(H=1.5) VALUE=(H=1.5 JUSTIFY=LEFT); Eksempel på program til ventetidsanalyse *------------------------------------------------------*; *- Kaplan-Meier kurver i 2 versioner: -*; *- ODS GRAPHICS og en, hvor man selv styrer akser mv. -*; *------------------------------------------------------*; ODS GRAPHICS ON; PROC PHREG DATA=skl PLOTS(OVERLAY=ROW CL)=S; MODEL tNotBld*Bld(0) = / ENTRY=t_entry /* Skal med, hvis forsinket indgang ved tid "t_entry" */ ; STRATA Sklero; BASELINE OUT=km /* Lav datasæt KM til egne plots SURVIVAL=KMcurves /* Kaplan-Meier estimat LOWER=LowerBound UPPER=UpperBound /* Punktvise konfidensgrænser / METHOD=PL /* Estimeres ved Kaplan & Meier’s Product Limit metode CLTYPE=LOGLOG; /* Holder konfidensgrænserne inden for 0-1 RUN; 96 */ */ */ */ */ Eksempel på program til ventetidsanalyse *- Helt simpelt Kaplan-Meier uden konfidensgrænser, -*; *- men hvor man selv kan styre akser mm. til artikel -*; SYMBOL1 C=BLACK V=NONE I=STEPLJ MODE=INCLUDE; SYMBOL2 C=RED V=NONE I=STEPLJ MODE=INCLUDE; *- AXIS og LEGEND definitionerne står i starten af programmet -*; PROC GPLOT DATA=km; PLOT kmcurves*tNotBld=sklero / HAXIS=AXIS1 VAXIS=AXIS2 LEGEND=LEGEND1 ; RUN; QUIT; 97 Eksempel på program til ventetidsanalyse *- Gør data klar til Kaplan-Meier MED konfidensgrænser, -*; *- og hvor man selv kan styre akser mm. til artikel -*; DATA KM_m_CL; SET km; LABEL Curve = "S(t) = Kaplan-Meier"; IF sklero=0 THEN DO; type=1; curve=kmcurves; OUTPUT; type=2; curve=lowerbound; OUTPUT; type=3; curve=upperbound; OUTPUT; END; IF sklero=1 THEN DO; type=4; curve=kmcurves; OUTPUT; type=5; curve=lowerbound; OUTPUT; type=6; curve=upperbound; OUTPUT; END; RUN; 98 Eksempel på program til ventetidsanalyse 99 *- Plot af figuren: -*; SYMBOL1 SYMBOL2 SYMBOL3 SYMBOL4 R=1 R=2 R=1 R=2 C=BLACK C=BLACK C=RED C=RED V=NONE V=NONE V=NONE V=NONE I=STEPLJ I=STEPLJ I=STEPLJ I=STEPLJ L=2 W=5 MODE=INCLUDE; L=4 MODE=INCLUDE; L=1 W=5 MODE=INCLUDE; L=41 MODE=INCLUDE; *- AXIS definitionerne står i starten af programmet -*; PROC GPLOT DATA=KM_m_CL; PLOT curve*tNotBld=type / HAXIS=AXIS1 VAXIS=AXIS2 NOLEGEND; /* Fravælger symbolforklaring */ RUN; QUIT; Eksempel på program til ventetidsanalyse *------------------------------------*; *- Kumuleret rate, igen 2 versioner -*; *------------------------------------*; ODS GRAPHICS ON; PROC PHREG DATA=skl PLOTS(OVERLAY=ROW CL)=CUMHAZ; MODEL tNotBld*Bld(0) = / ENTRY=t_entry /* Skal med, hvis der er forsinket indgang */ ; STRATA Sklero; BASELINE OUT=CumulatedHazard LOGSURV=LogSurvival LOWER=LowerBound UPPER=UpperBound / METHOD=CH /* Beregner den kumulerede rate som sum af dagsraterne */ CLTYPE=LOGLOG; RUN; 100 Eksempel på program til ventetidsanalyse 101 DATA CumulatedHazard; SET CumulatedHazard; KumRate = -LogSurvival; *- jf. noterne s. 10 -*; LowerKumRate = -log(UpperBound); *- Konfidensgrænserne er for survival, -*; UpperKumRate = -log(LowerBound); *- så de skal også transformeres. -*; RUN; DATA CH_m_CL; SET CumulatedHazard; LABEL Curve = "Nelson-Aalen kum. rate"; IF sklero=0 THEN DO; type=1; curve=KumRate; OUTPUT; type=2; curve=LowerKumRate; OUTPUT; type=3; curve=UpperKumRate; OUTPUT; END; IF sklero=1 THEN DO; type=4; curve=KumRate; OUTPUT; type=5; curve=LowerKumRate; OUTPUT; type=6; curve=UpperKumRate; OUTPUT; END; RUN; Eksempel på program til ventetidsanalyse SYMBOL1 SYMBOL2 SYMBOL3 SYMBOL4 R=1 R=2 R=1 R=2 C=BLACK C=BLACK C=RED C=RED V=NONE V=NONE V=NONE V=NONE 102 I=STEPLJ I=STEPLJ I=STEPLJ I=STEPLJ L=2 W=5 MODE=INCLUDE; L=4 MODE=INCLUDE; L=1 W=5 MODE=INCLUDE; L=41 MODE=INCLUDE; *- AXIS definitionerne står i starten af programmet -*; PROC GPLOT DATA=CH_m_CL; PLOT curve*tNotBld=type RUN; QUIT; / HAXIS=AXIS1 VAXIS=AXIS2 NOLEGEND; *-----------------*; *- Log-rank test -*; *-----------------*; PROC PHREG DATA=skl; MODEL tNotBld*bld(0) = sklero / TIES=DISCRETE /* For at beregne log-rank HELT korrekt */ ENTRY=t_entry /* Skal med, hvis der er forsinket indgang */ RL; /* Konfidensgrænser på Hazard Ratio */ RUN; Eksempel på program til ventetidsanalyse 103 *--------------------------*; *- Cox’s regressionsmodel -*; *--------------------------*; DATA skl; SET skl; log2Bilirub=LOG2(bilirub); RUN; PROC PHREG DATA=skl; MODEL tNotBld*bld(0) = log2bilirub sklero / RL ENTRY=t_entry; *- ENTRY= ved forsinket indgang -*; RUN; /* /* /* /* /* /* /* For små datasæt bør man bruge options / RL=PL TIES=EXACT ; (og selfølgelig ENTRY=... hvis relevant). RL=PL giver mere korrekte konfidensgrænser for Hazard Ratio for små datasæt. Det gør næsten ingen forskel her. TIES=EXACT beregner likelihoodfunktionen helt korrekt, når der er flere hændelser på samme tid -- men det kan tage MEGET lang tid, så brug det kun på små datasæt! */ */ */ */ */ */ */ Eksempel på program til ventetidsanalyse *---------------------------------------------------*; *- Er transformation af serum bilirubin nødvendig? -*; *---------------------------------------------------*; *- Find min og max for bilirubin i datasættet -*; PROC MEANS MIN MAX DATA=skl; VAR bilirub; RUN; *- Simpelt tjek: Inklusion af både utransformeret -*; *- og log-transformeret bilirubin på en gang. -*; PROC PHREG DATA=skl; MODEL tNotBld*bld(0) = bilirub log2bilirub sklero / RL ENTRY=t_entry ; *- ENTRY= ved forsinket indgang -*; /*--- Kan man helt udelade bilirubin? ---*/ TestBoth: TEST Bilirub=Log2Bilirub=0; /*--- Er der stor forskel på betydningen af en fordobling ---*/ /*--- i den lave ende og en fordobling i den høje ende? ---*/ ESTIMATE "Mindst dbl" Bilirub 4 Log2Bilirub 1 / EXP ; ESTIMATE "Størst dbl" Bilirub 272.5 Log2Bilirub 1 / EXP ; RUN; 104 Eksempel på program til ventetidsanalyse 105 *---------------------------------------------------------------*; *- Vurdering v.h.a. lineær spline (koden kan bruges til enhver -*; *- anden variabel -- man skal bare estatte ’bilirub’ med det -*; *- andet variabelnavn på denne slide OG den næste slide). -*; *---------------------------------------------------------------*; ******- Find relevante percentiler blandt personer med events, fordi styrken til at estimere hældningen i et interval afhænger af hvor mange events, der er blandt personer med bilirubin i det interval. Percentilerne gemmes direkte på datasættet PCTLDATA som xpctl5, xpctl25, xpctl50, xpctl75, xpctl95, xpctl33_3 og xpctl66_7 (de sidste to skal bruges ved grafisk tjek af proportionalitet senere) -*; -*; -*; -*; -*; -*; PROC UNIVARIATE DATA=skl PCTLDEF=3 /* PCTLDEF=3 giver observerede percentiler */ NOPRINT; *- NOPRINT: uden output, kun nyt datasæt -*; WHERE bld=1; *- skal kun med, fordi det er en ventetidsanalyse med BLD som event -*; VAR bilirub; *- BILIRUB kunne erstattes af en hvilken som helst variabel -*; OUTPUT OUT=pctldata PCTLPRE=Xpctl PCTLPTS=5 25 50 75 95 33.3 66.7; RUN; *- Se det nye datasæt: -*; PROC PRINT DATA=pctldata; RUN; Eksempel på program til ventetidsanalyse 106 *- Beregne BILIRUB spline hjælpevariable, der skal bruges i PHREG. -*; *- Husk: BILIRUB kunne erstattes af en hvilken som helst variabel! -*; DATA skl; SET skl; IF _N_=1 THEN SET pctldata; *- lægger percentilerne ind i SKL datasættet -*; *- Beregning af hjælpevariablene med den "smarte" kode -*; IF NOT MISSING(bilirub) THEN DO; b_u25pctl=MIN(bilirub-Xpctl25,0); b_25_50pctl=MIN(MAX(Xpctl25-Xpctl50,bilirub-Xpctl50),0); b_50_75pctl=MAX(MIN(Xpctl75-Xpctl50,bilirub-Xpctl50),0); b_o75pctl=MAX(bilirub-Xpctl75,0); END; RUN; Eksempel på program til ventetidsanalyse *- Estimation og test -*; PROC PHREG DATA=skl OUTEST=parms /* gemmer parameterestimaterne på datasættet PARMS */ /* i variable med de samme navne som de tilsvarende */ /* variable i analysen (f.eks. b_u25pctl) */ ; MODEL tNotBld*bld(0) = b_u25pctl b_25_50pctl b_50_75pctl b_o75pctl sklero / RL ENTRY=t_entry; *- ENTRY= ved forsinket indgang -*; TestLine: TEST b_u25pctl = b_25_50pctl = b_50_75pctl = b_o75pctl; RUN; 107 Eksempel på program til ventetidsanalyse 108 *- Beregning af punkter til plot af lineær spline -*; DATA Plot; MERGE pctldata parms; *- Begge data indeholder kun 1 obs (=1 linje) -*; LABEL bili = "Bilirubin" /* Hvis man har erstattet BILIRUB med en anden variabel, skal denne label rettes. Resten kunne principelt bruges uden ændringer */ rr = "Rate ratio" ; *- Man behøver kun beregne støttepunkter i enderne og ved knækkene -*; DO bili=xpctl5, xpctl25, xpctl50, xpctl75, xpctl95; *- De nye dummy-variable skal hedde noget lidt anderledes, fordi de -*; *- "gamle" navne jo "er brugt" af PHREG til parameterestimaterne. -*; b_u25=MIN(bili-Xpctl25,0); b_25_50=MIN(MAX(Xpctl25-Xpctl50,bili-Xpctl50),0); b_50_75=MAX(MIN(Xpctl75-Xpctl50,bili-Xpctl50),0); b_o75=MAX(bili-Xpctl75,0); *- Beregning af det prognostiske index PI -*; pi = b_u25pctl*b_u25 + b_25_50pctl*b_25_50 + b_50_75pctl*b_50_75 + b_o75pctl*b_o75; *- Beregning af rate ratio (hazard ratio): -*; rr = EXP(pi); *- Læg observationen ud på Plot datasættet: -*; OUTPUT; END; RUN; Eksempel på program til ventetidsanalyse *- Tegning af lineær spline -*; SYMBOL1 C=BLACK V=CIRCLE I=JOIN L=1 MODE=INCLUDE; *- AXIS definitionerne står i starten af programmet -*; PROC GPLOT DATA=plot; PLOT rr*bili / HAXIS=AXIS1 VAXIS=AXIS22; GOPTIONS DEVICE=; *- SKAL med for SAS Enterprise, -*; *- er ellers helt unødvendig! -*; RUN; QUIT; 109 Eksempel på program til ventetidsanalyse 110 *-------------------------------------------------------------------------*; *- Test af vekselvirkning og estimation af effekterne ved vekselvirkning -*; *-------------------------------------------------------------------------*; PROC PHREG DATA=skl; CLASS Sklero (REF="0") / PARAM=GLM; MODEL tNotBld*bld(0) = sklero sklero*log2bilirub log2bilirub / ENTRY=t_entry ; *- Skal med, hvis der er forsinket indgang -*; HAZARDRATIO Sklero / CL=PL; *- Effekt af Sklero ved mean af log2bilirub -*; HAZARDRATIO log2Bilirub / CL=PL; *- Effekterne af log2(bilirubin) -*; RUN; Eksempel på program til ventetidsanalyse *------------------------------------------------------*; *- Grafisk tjek for proportionalitet for behandlingen -*; *------------------------------------------------------*; PROC PHREG DATA=skl; MODEL tNotBld*bld(0) = log2bilirub / RL ENTRY=t_entry; STRATA sklero; BASELINE OUT=check LOGLOGS=LCumRate / METHOD=CH; RUN; SYMBOL1 C=BLACK V=NONE I=STEPLJ L=1 MODE=INCLUDE; SYMBOL2 C=RED V=NONE I=STEPLJ L=1 MODE=INCLUDE R=1; *- SAS kan huske R=2 fra KM og CH plottene -*; *- AXIS definitionerne står i starten af programmet -*; *- Almindelig lineær tidsakse -*; PROC GPLOT DATA=check; PLOT LCumRate*tNotBld=sklero / HAXIS=AXIS1 VAXIS=AXIS2 NOLEGEND; RUN; QUIT; *- Logaritmisk tidsakse -*; PROC GPLOT DATA=check; WHERE 0<tNotBld; *- Bemærk, at tNotBld=0 skal fjernes pga. logaritmen -*; PLOT LCumRate*tNotBld=Sklero / HAXIS=AXIS11 VAXIS=AXIS2 NOLEGEND; GOPTIONS DEVICE=; *- SKAL med for SAS Enterprise, ellers helt unødvendig! -*; RUN; QUIT; 111 Eksempel på program til ventetidsanalyse 112 *---------------------------------------------------*; *- Grafisk tjek for proportionalitet for bilirubin -*; *---------------------------------------------------*; PROC PHREG DATA=skl; MODEL tNotBld*bld(0) = log2bilirub sklero / RL ENTRY=t_entry; STRATA bilirub (36, 63); *- opdeling v 36 og 63 (33.3 og 66.7 pctl blandt reblødere) -*; BASELINE OUT=check2 LOGLOGS=LCumRate / METHOD=CH; RUN; SYMBOL1 SYMBOL2 SYMBOL3 *- AXIS C=BLACK V=NONE C=RED V=NONE C=BLUE V=NONE definitionerne I=STEPLJ L=1 MODE=INCLUDE; I=STEPLJ L=2 MODE=INCLUDE; I=STEPLJ L=41 MODE=INCLUDE; står i starten af programmet -*; *- Almindelig lineær tidsakse -*; PROC GPLOT DATA=check2; PLOT LCumRate*tNotBld=bilirub / HAXIS=AXIS1 VAXIS=AXIS2 LEGEND=LEGEND1; RUN; QUIT; *- Logaritmisk tidsakse -*; PROC GPLOT DATA=check2; WHERE 0<tNotBld; *- Bemærk, at tNotBld=0 skal fjernes pga. logaritmen -*; PLOT LCumRate*tNotBld=Sklero / HAXIS=AXIS11 VAXIS=AXIS2 LEGEND=LEGEND1; GOPTIONS DEVICE=; *- SKAL med for SAS Enterprise, ellers helt unødvendig! -*; RUN; QUIT; Eksempel på program til ventetidsanalyse *------------------------------------------------------*; *- Numerisk test af proportionalitet for behandlingen -*; *------------------------------------------------------*; *- De kumulerede rater kan approksimeres nogenlunde ved rette linier i *- intervallerne 0-14 dage, 14-105 dage og over 105 dage. Hvis raterne *- er (nogenlunde) konstante i de intervaller, er de automatisk også *- (nogenlunde) proportionale inden for hvert af disse intervaller! PROC PHREG DATA=skl; MODEL tNotBld*bld(0) = log2bilirub Skl_0_14 Skl_14_105 SklFra105 / ENTRY=t_entry /* Skal med, hvis der er forsinket indgang */ RL ; IF tNotBld<=14 THEN Skl_0_14 = sklero; ELSE Skl_0_14 = 0; IF 14<tNotBld<=105 THEN Skl_14_105 = sklero; ELSE Skl_14_105 = 0; IF 105<tNotBld THEN SklFra105 = sklero; ELSE SklFra105 = 0; TestProp: TEST Skl_0_14 = Skl_14_105 = SklFra105; RUN; 113 -*; -*; -*; -*; Eksempel på program til ventetidsanalyse 114 *---------------------------------------------------------*; *- Numerisk test af proportionalitet for serum bilirubin -*; *---------------------------------------------------------*; *- I stedet for at kigge efter stykkevis linearitet kan man vælge at -*; *- opdele i tidsintervaller med cirka lige mange events. Fordelen ved -*; *- denne tilgang er, at man får cirka lige meget statistisk styrke i -*; *- hvert interval (jf. styrkeberegningen for ventetidsanalyser). -*; *- Tertiler for event-tidspunkter -*; PROC UNIVARIATE DATA=skl PCTLDEF=3 NOPRINT; *- NOPRINT: uden output -*; WHERE bld=1; VAR tNotBld; OUTPUT OUT=TidsTertil PCTLPRE=Tid PCTLPTS=33.3 66.7; RUN; *- Kig på WORK.TidsTertil og vælg tider tæt på tertilerne, her 7 og 49 -*; PROC PHREG DATA=skl; MODEL tNotBld*bld(0) = sklero Bili_0_7 Bili_7_49 BiliFra49 / RL ENTRY=t_entry; *- ENTRY= hvis der er forsinket indgang -*; IF tNotBld<=7 THEN Bili_0_7 = log2bilirub; ELSE Bili_0_7 = 0; IF 7<tNotBld<=49 THEN Bili_7_49 = log2bilirub; ELSE Bili_7_49 = 0; IF 49<tNotBld THEN BiliFra49 = log2bilirub; ELSE BiliFra49 = 0; TestProp: TEST Bili_0_7 = Bili_7_49 = BiliFra49; RUN; Eksempel på program til ventetidsanalyse 115 *- Alternativt: Læg tidstertilerne (variablene Tid33_3 og Tid66_7) ind på -*; *- analysedatasættet, og lad SAS tage sig af resten "helt automatisk". -*; DATA skl_m_TidsTertil; SET skl; IF _N_=1 THEN SET TidsTertil; RUN; PROC PHREG DATA=skl_m_TidsTertil; MODEL tNotBld*bld(0) = sklero BiliTidligt BiliMellem BiliSent / RL ENTRY=t_entry; *- ENTRY= hvis der er forsinket indgang -*; IF tNotBld<=Tid33_3 THEN BiliTidligt= log2bilirub; ELSE BiliTidligt= 0; IF Tid33_3<tNotBld<=Tid66_7 THEN BiliMellem= log2bilirub; ELSE BiliMellem= 0; IF Tid66_7<tNotBld THEN BiliSent= log2bilirub; ELSE BiliSent= 0; TestProp: TEST BiliTidligt = BiliMellem = BiliSent; RUN;
© Copyright 2024