ניתוח הישרדות

בסטטיסטיקה, ניתוח הישרדות הוא שם כולל לשיטות ומודלים לניתוח משך הזמן העובר עד להתרחשות אירוע מסוים (או אירועים). אירוע כזה יכול להיות, לדוגמה, מוות של חולה או קלקול במערכת מכנית כגון מכונה כלשהי. בעזרת ניתוח השרדות ניתן לענות על שאלות כגון: איזה אחוז מאוכלוסיית החולים יישארו בחיים לאחר פרק זמן מסוים? איזה גורמים משפיעים על הסיכון למות? האם טיפול תרופתי מסוים מאריך את תוחלת החיים? כמה אנשים מתים מנזקי העישון?
כדי לענות על שאלות כגון אלה, יש להגדיר תחילה מהו "משך החיים", כלומר מהו משך הזמן שעבר עד התרחשות האירוע. במקרה של מוות של אדם התשובה ברורה. אולם לעיתים ההגדרה יותר מעורפלת. למשל, הזמן שעובר מאז שאדם חולה במחלה כלשהי ועד שחלה החמרה קלינית במצבו בדרך כלל אינו מוגדר היטב. לא ברור מתי האדם חלה (ומועד זה שונה בדרך כלל ממועד האבחון), וגם לא ברור כיצד החמרה קלינית מוגדרת וכיצד קובעים מתי היא התרחשה. הגדרת משך החיים היא לכן בדרך כלל סובייקטיבית, ועשויה להשפיע על תוצאת הניתוח הסטטיסטי.
התחום של ניתוח הישרדות עוסק בניתוח משכי הזמן שעוברים עד התרחשות שחל אירוע בודד, כגון מוות או יציאה של מכונה מכלל שימוש ללא אפשרות לתיקון. עם זאת, ייתכנו מצבים שבהם אירוע יכול להתרחש יותר מפעם אחת. מצבו הקליני של החולה יכול להחמיר מספר פעמים במשך חייו, ומכונה יכולה להתקלקל, לחזור לפעילות לאחר תיקון ואז להתקלקל שוב. קיימות הכללות למודלים של ניתוח הישרדות למקרים מעין אלו.

מבחן לוג הדרגות (log rank test)

זהו מבחן סטטיסטי א-פרמטרי לבדיקת ההשערה כי אין הבדל בין פונקציות ההשרדות של שתי אוכלוסיות בלתי תלויות. מבחן זה נקרא לעיתים בשם מבחן מאנטל-קוקס. התפלגותו האסימפטוטית של סטטיסטי המבחן היא התפלגות חי בריבוע כאשר מספר דרגות החופש שווה למספר האוכלוסיות פחות 1.

גישות נוספות

גישות אפשריות נוספות לניתוח נתוני השרדות כוללות את מודל הסיכונים המצטברים, מודלים בייסיאניים ומודלים של למידת מכונה. כמו כן ישנן הרחבות למודלים שהוזכרו כאן למקרים בהם מופרות חלק מההנחות.
ישנם מצבים בהם אירוע יכול להתרחש בצורות שונות (למשל אדם מעשן נמצא בסיכון גבוה לגם לחלות בסרטן וגם למחלת לב. סיבת המוות יכולה להיות הסרטן או מחלת הלב, אך לא שתי המחלות יחד). המודל המתאים לניתוח הנתונים במצבים כאלה הוא מודל הסיכונים המתחרים.

דוגמה

בדוגמה זו נשתמש בקובץ הנתונים lung המצורף לחבילתsurvival של תוכנת R. הניתוחים המוצגים בוצעו על ידי פונקציות מחבילה זו.
יש להדגיש כי הדוגמה ממחישה את האופן בו מתבצעים הניתוחים השונים ומסבירה כיצד לפרט את התוצאות, אך אין זו דוגמה לתהליך ניתוח מסודר של נתוני הישרדות.

הנתונים

בקובץ lung יש נתונים אודות 228 חולי סרטן הריאה. הנתונים כוללים את מין וגיל הנבדקים, וכן נתונים נוספים אודות מצבם התפקודי והתזונתי של החולים. כן נתון משך הזמן בימים שעבר ממועד איסוף הנתונים (תחילת התצפית) ועד התרחשות אירוע מוות או סיום התצפית, ומשתנה המציין האם התצפית היא מלאה או קטומה. לצורך הדוגמה נשתמש בנתוני המין והגיל בלבד. להלן חלק מהנתונים:
   time status age sex
1   306      2  74   1
2   455      2  68   1
3  1010      1  56   1
4   210      2  57   1
5   883      2  60   1
6  1022      1  74   1
7   310      2  68   2
8   361      2  71   2
9   218      2  53   1
10  166      2  61   1
Sex=1 מציין גבר ו-sex=2 מציין אשה. Status=1 מציין תצפית קטומה ו-status=2 מציין התרחשות אירוע מוות.
מתוך 228 חולים, 165 נפטרו במהלך תקופת התצפית.

חציון זמן ההישרדות

מכיוון שאנו איננו יודעים את משך הזמן עד המוות של החולים שלא נפטרו אי אפשר לאמוד את הזמן הממוצע עד המוות, אבל אפשר לאמוד את משך הזמן החציוני בעזרת אמדן קפלן-מאייר לפונקציית ההישרדות. בעזרת הפונקציה suvrfit של R עולה כי משך הזמן החציוני עד למוות באוכלוסייה שווה ל-310 ימים. חישוב נפרד לגברים ונשים מעלה כי משך הזמן החציוני עד למוות עבור גברים הוא 270 יום, ועבור נשים הוא 426 ימים.
 > # median estimation
 > fit=survfit(Surv(lung$time, lung$status) ~ 0, conf.type="plain")
 > fit_sex=survfit(Surv(time, status) ~ sex, data = lung)
 > fit
 Call: survfit(formula = Surv(lung$time, lung$status) ~ 0, conf.type = "plain")

       n  events  median 0.95LCL 0.95UCL
     228     165     310     284     361
 > fit_sex
 Call: survfit(formula = Surv(time, status) ~ sex, data = lung)

         n events median 0.95LCL 0.95UCL
 sex=1 138    112    270     212     310
 sex=2  90     53    426     348     550
 >

לוח חיים (או לוח תמותה)

מוצגות פקודות R ו-6 השורות הראשונות של לוח התמותה (נתוני התמותה חושבו לכל החולים יחד):
> # life table lung
> fit= survfit(Surv(lung$time, lung$status) ~ 0, conf.type="plain")
> lt_lung=data.frame(summary(fit)[c(2:4,6, 8,10,9)])
> names(lt_lung)=c("time", "n_at_risk", "n_events",
+                  "survival", "StdErr", "ci_lower", "ci_upper")
> lt_lung[, 4:7]=round(lt_lung[, 4:7],4)
> head(lt_lung)
  time n_at_risk n_events survival StdErr ci_lower ci_upper
1    5       228        1   0.9956 0.0044   0.9870   1.0000
2   11       227        3   0.9825 0.0087   0.9654   0.9995
3   12       224        1   0.9781 0.0097   0.9591   0.9971
4   13       223        2   0.9693 0.0114   0.9469   0.9917
5   15       221        1   0.9649 0.0122   0.9410   0.9888
6   26       220        1   0.9605 0.0129   0.9353   0.9858
>
מהשורה הראשונה של הלוח ניתן ללמוד כי:
•ביום החמישי של תקופת המעקב היו 228 חולים בסיכון
•חולה אחד מת ביום החמישי
•ערך פונקציית ההשרדות עבור t=5 שווה ל-0.996. הערך חושב על ידי חלוקת 227 (מספר השורדים מעבר ליום ה-5) ב-228 (מספר החולים הכולל)

עקומת קפלן-מאייר

ניתן להפיק את העקומה ב-R בעזרת הפקודות הבאות:
> plot(fit_sex, col=c("red", "blue"), axes=FALSE, lwd=2,
+      main="Lung Cancer Data",
+      xlab="Time (days)", ylab="S(t)")
> mtext("Kaplan-Meyer Curve")
> axis(1, at=200*(0:5))
> axis(2, at=0.2*(0:5))
> legend("topright",
+        col=c('red', 'blue'),
+        legend=c("Male", "Female"), lwd=2, box.col="white")
>
העקומה המתקבלת היא:
ניתן לראות כי ערך פונקציית ההשרדות של הנשים גבוה מזה של הגברים ברוב הזמן. לדוגמה, ההסתברות כי אשה תשרוד יותר מ-400 ימים קרובה ל-0.6, בעוד עבור הגברים הסתברות זו היא בערך 0.3.

מבחן לוג הדרגות (log rank test)

ביצוע המבחן ב-R:
> # log rank test
> survdiff(Surv(time, status) ~ sex, data = lung)
Call:
survdiff(formula = Surv(time, status) ~ sex, data = lung)

        N Observed Expected (O-E)^2/E (O-E)^2/V
sex=1 138      112     91.6      4.55      10.3
sex=2  90       53     73.4      5.68      10.3

 Chisq= 10.3  on 1 degrees of freedom, p= 0.00131
ערך  שהתקבל הוא 10.3 וערך ה-p הוא 0.00131. בהנחה כי רמת המובהקות שנקבעה מראש היא , ניתן לומר כי יש הבדל מובהק בין פונקציות ההישרדות של הגברים ושל הנשים.

רגרסיית השרדות פרמטרית

נבצע רגרסיית הסתברות פרמטרית כאשר המשתנה המוסבר הוא הלוג של משך הזמן והמשתנים המסבירים הם מין וגיל. אנו מניחים כי לטעות  יש התפלגות וויבול עם פרמטר scale השווה ל-1.
> fit_reg=survreg(Surv(log(time), status) ~ sex + age, data = lung, dist='weibull',scale=1)
> summary(fit_reg)
Call:
survreg(formula = Surv(log(time), status) ~ sex + age, data = lung,
    dist = "weibull", scale = 1)
              Value Std. Error     z        p
(Intercept)  2.2771    0.62944  3.62 0.000297
sex          0.3546    0.16759  2.12 0.034380
age         -0.0119    0.00888 -1.34 0.180112

Scale fixed at 1

Weibull distribution
Loglik(model)= -493.7   Loglik(intercept only)= -497.3
Chisq= 7.15 on 2 degrees of freedom, p= 0.028
Number of Newton-Raphson Iterations: 3
n= 228
טיב ההתאמה של המודל לנתונים נבדק על ידי סטטיסטי  של מבחן יחס הנראות (על פי משפט וילקס). ערכו הוא 7.15 עם שתי דרגות חופש, וערך ה-p הוא 0.028. בהנחה כי רמת המובהקות שנקבעה מראש היא , ניתן לומר כי יש הבדל מובהק בין המודל הכולל את המשתנים המסבירים והמודל הבסיסי שאינו כולל משתנים מסבירים. עם זאת, אנו רואים כי המקדם של משתנה המין שונה מ-0 באופן מובהק סטטיסטית, אך המקדם של משתנה הגיל אינו שונה מאפס באופן מובהק.

מודל הסיכונים הפרופורציונליים (מודל קוקס)

נבצע הרצה של המודל עם משתנה מסביר אחד - משתנה המין:
> # cox ph model
> fit_cox=coxph(Surv(time, status) ~ sex, lung)
> summary(fit_cox)
Call:
coxph(formula = Surv(time, status) ~ sex, data = lung)

  n= 228, number of events= 165

       coef exp(coef) se(coef)      z Pr(>|z|)
sex -0.5310    0.5880   0.1672 -3.176  0.00149 **
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

    exp(coef) exp(-coef) lower .95 upper .95
sex     0.588      1.701    0.4237     0.816

Concordance= 0.579  (se = 0.022 )
Rsquare= 0.046   (max possible= 0.999 )
Likelihood ratio test= 10.63  on 1 df,   p=0.001111
Wald test            = 10.09  on 1 df,   p=0.001491
Score (logrank) test = 10.33  on 1 df,   p=0.001312
בתחתית הפלט יש מספר מבחנים לבדיקת טיב ההתאמה של המודל לנתונים בהשוואה למודל ללא משתנים מסבירים: מבחן התאימות (Concordance), מבחן יחס הנראות, מבחן ואלד ומבחן לוג הדרגות. בכל המבחנים התקבלו תוצאות מובהקות (ברמת מובהקות של ). כן נתון ערך המתאם  והוא שווה ל-0.046. ערך זה נמוך למדי, ורומז על כך שייתכן כי ישנם עוד משתנים מסבירים היכולים להסביר את השונות בין זמני ההישרדות.
ערכו של מקדם משנה המין הוא 0.531-, וערך זה מובהק סטטיסטית ברמת מובהקות של . מאחר שגברים מקודדים בקובץ הנתונים על ידי המספר 1 ונשים על ידי המספר 2, נובע כי כשאר ערך המין משתנה מ-1 ל-2, כלומר כאשר הסיכון מחושב עבור אישה ולא עבור גבר, הסיכון הכללי קטן. כאשר מפעילים את הפונקציה המעריכית על מקדם זה, אנו מקבלים כי יחס הסיכונים הוא 0.588. פירוש הדבר הוא כי הסיכון למוות של נשים נמוך בג-40% מזה של הגברים בכל נקודת זמן. רווח סמך ברמת סמך של 95% ליחס הסיכונים הוא (0.4237-0.0816) ואינו מכיל בתוכו את 1, וזה מתיישב עם הערך המובהק של מקדם הגיל ברגרסיה.
ניתן להפיק גרף של פונקציות ההישרדות שנאמדו על ידי המודל בעזרת הפקודות הבאות ב-R:
> plot(survfit(fit_cox, newdata=data.frame(sex=c(1,2))),
+      col=c("red", "blue"), axes=FALSE, lwd=2,
+      main="Lung Cancer Data - Cox Model",
+      xlab = "Days", ylab="Survival")
> mtext("Survival Curves by Sex")
> axis(1, at=200*(0:5))
> axis(2, at=0.2*(0:5))
> legend("topright",
+        col=c('red', 'blue'),
+        legend=c("Male", "Female"), lwd=2, box.col="white")
>
העקומה המתקבלת היא:
שוב ניתן לראות כי ערכי פונקציית ההשרדות של הגברים גבוהים מאלה של הגברים. החל מנקודה מסוימת שתי העקומות מקבילות זו לזו, וזאת כתוצאה של הנחת הסיכונים הפרופורציונליים.