Condividi tramite


Il presente articolo è stato tradotto automaticamente.

C#

Utilizzo dell'analisi di sopravvivenza

Zvi Topol

Analisi di sopravvivenza (SA) sono una disciplina di statistiche che si concentra sulla stima tempo agli eventi. Applicare metodi di analisi di sopravvivenza in genere a studi clinici per determinare l'efficacia di alcuni farmaci (tempo di morte paziente), affidabilità dei sistemi software (tempo di fallimento) e analitica del credito (tempo di prestito predefinito).

Gli studi clinici farmaceutici che coinvolge due gruppi di pazienti sono un ottimo esempio di come questo può funzionare. Il gruppo di controllo sono membri somministrato un placebo. I membri del gruppo di prova ricevono il farmaco sperimentale della malattia di targeting. Metodi di analisi di sopravvivenza vengono poi applicati per determinare se c'è una differenza statisticamente significativa nella sopravvivenza paziente tra i due gruppi. L'evento "volta a" in questo caso è il tempo dall'inizio dello studio fino a quando i pazienti muoiono.

Per esporre a usando SA, si parlerà di concetti di base con un'implementazione c# di un metodo di stima comunemente usato chiamato lo stimatore Kaplan-Meier. Io uso un esempio reale di stimare la probabilità di sopravvivenza di applicazioni mobili.

Immaginare una società di sviluppo software produce due applicazioni mobile separate dal titolo X e Y. Ognuno è sviluppato da squadre separate. La ditta è desiderosa di imparare come robusta sono le applicazioni mobili e per determinare se un'applicazione è significativamente meno robusta e richiede uno sforzo maggiore per migliorare l'affidabilità.

In qualsiasi momento, possono esserci molti casi di X e Y vivo e funzionante sui dispositivi mobili del cliente. Così, un crash dell'applicazione mobile è quello che è più interessante. Periodi di tempo più lungo per l'evento, in questo caso, indicherà l'applicazione è più robusto o ha la migliore possibilità di sopravvivenza.

Nel programma demo, prima potrai visualizzare i dati di sopravvivenza per le applicazioni mobili di X e Y (vedere Figura 1). I dati mostrano che entrambe le applicazioni sono state eseguite da 10 diversi utenti con ID che vanno da zero a nove. Nel mio esempio, un'applicazione può uno schianto (descritto da evento = incidente app nella schermata) o ottenere chiuso dall'utente (descritto da evento = app off). È registrato anche il giorno in cui si verifica l'evento.

The Survival Analysis Demo Showing Lifecycle of Mobile Apps
Figura 1 la Demo di analisi di sopravvivenza mostrando il ciclo di vita delle applicazioni mobili

Concetti di base di SA

Il concetto più basilare in SA è quello della funzione di sopravvivenza. Questo è comunemente indicato con S(t). Se X è una variabile casuale (una variabile i cui valori sono risultati basati su probabilità) che rappresenta l'ora dell'evento, quindi S(t) = Pr (X > t). In altre parole, S(t) è la probabilità di sopravvivenza dopo un tempo t. S(0) è definito come 1. La funzione di sopravvivenza è legata la funzione di distribuzione di tutta la vita. Questo è in genere indicato con f (t) ed è definito come f (t) = Pr (X < = t), in altre parole, la probabilità che l'evento è accaduto fino al tempo t. Pertanto, f (t) = 1 – S(t). F (t) funzione densità di evento è quindi definito come dF (t) / dt — la derivata prima di f (t), se f è differenziabile. Pertanto, f (t) può essere pensato come il tasso dell'evento (per unità di tempo).

La funzione di rischio, un altro concetto di base è uguale a f(t)/S(t) ed è il tasso di eventi al tempo t per gli individui che sono vivi al tempo t.

È possibile specificare funzioni di sopravvivenza in modo parametrico, utilizzando una funzione esplicita o una famiglia di funzioni. Si può anche dedurre li non parametricamente da dati esistenti, senza avere una forma parametrizzato chiuso. Una specifica semi-parametrica, che è un mix tra specifiche parametrica e non parametrica, è anche possibile. La distribuzione esponenziale è una famiglia di funzione con parametri semplice e popolare per descrivere le funzioni di sopravvivenza grazie alle sue proprietà matematiche supplichevole.

Ad esempio, S(t) = exp(-0.05t) è una funzione di sopravvivenza da una distribuzione esponenziale paramterized tracciata in Figura 2. Le funzioni di sopravvivenza della forma S(t) = exp(-at) (dove un è un parametro di controllo il tasso di rischio può descrivere tale distribuzione). La durata di funzione di distribuzione è data da f (t) = 1 – S(t) = 1 – exp(-at). Figura 2 ci aiuta a visualizzare come funzioni di sopravvivenza si comportano nel tempo.

How Survival Functions Behave over Time
Figura 2 come funzioni di sopravvivenza si comportano nel tempo

Lavorando con un dato modello parametrico, è possibile utilizzare dati reali per stimare i parametri del modello. Nel caso di una distribuzione esponenziale, è il parametro una. Un modo per farlo è di utilizzare metodi di valutazione di probabilità massima (MLE), ma questo è un altro soggetto interamente.

Mi concentrerò sull'implementazione di un non -­stima parametrica per la funzione di sopravvivenza. Cioè, io non impostare un modello predefinito per la funzione di sopravvivenza e stimare i parametri del modello. Invece, io sarò derivare la funzione di sopravvivenza direttamente dai dati osservati. Prima che descrivono come farlo, devo spiegare un altro concetto importante sa chiamato censurando.

Censura, si verifica quando alcune osservazioni del DataSet sono incompleti. Ad un certo punto hai perso traccia dell'oggetto osservato. Nel mio esempio, questo significherebbe che un'applicazione mobile terminò la sua esecuzione senza schiantarsi (gettando un errore irreversibile). L'applicazione è stata chiusa normalmente dall'utente. Anche se ci possono essere altri motivi che un'applicazione si è conclusa senza schiantarsi, potrai assumere un'applicazione si blocca o viene chiuso dall'utente.

Ci sono due principali sapori per censurare — censurando a destra e sinistra censurando. Destra censurando si verifica quando il tempo di avvio è conosciuto, ma manca l'ora dell'evento. Censura a sinistra, si verifica quando l'ora dell'evento è presente, ma manca il tempo di avvio. Destra censurando sta verificando nel mio esempio.

Utilizzando la stima di Kaplan-Meier per stimare la funzione di sopravvivenza

Lo stimatore Kaplan-Meier (KM) è un algoritmo non parametrica che stima la funzione di sopravvivenza. Derivando l'estimatore KM comporta l'uso di matematica avanzata, inclusa la teoria martingala e contando i processi ed è oltre la portata di questo articolo. Implementando l'estimatore KM, tuttavia, è molto semplice e si basa su conteggi.

Considerare il calcolo stimatore per la sopravvivenza dell'applicazione mobile X KM. Lo stimatore KM deve tenere traccia di tre diversi conti:

  1. Quante istanze di applicazione mobile X sono ancora attivo e funzionante. Questo è rappresentato utilizzando la variabile rischio nella mia implementazione.
  2. Il numero di istanze che hanno schiantato. Questo viene registrato nella variabile si è schiantata.
  3. Il numero di istanze che finito l'esecuzione con garbo. Queste sono contate usando la variabile censurata.

Le seguenti righe di codice (per applicazione mobile X) utilizza la classe CrashMetaData per codificare i dati di sopravvivenza rappresentati Figura 3:

var appX = new CrashMetaData[] {new CrashMetaData{UserID = 0,
  CrashTime = 1, Crashed = false},
           new CrashMetaData{UserID = 1, 
              CrashTime = 5, Crashed = true}, 
           new CrashMetaData{UserID = 2, 
              CrashTime = 5, Crashed = false},
           new CrashMetaData{UserID = 3, 
              CrashTime = 8, Crashed = false},
           new CrashMetaData{UserID = 4, 
              CrashTime = 10, Crashed = false},
           new CrashMetaData{UserID = 5, 
              CrashTime = 12, Crashed = true},
           new CrashMetaData{UserID = 6, 
              CrashTime = 15, Crashed = false},
           new CrashMetaData{UserID = 7, 
              CrashTime = 18, Crashed = true},
           new CrashMetaData{UserID = 8, 
              CrashTime = 21, Crashed = false},
           new CrashMetaData{UserID = 9, 
              CrashTime = 22, Crashed = true}};

Figura 3 sopravvivenza dati di applicazione Mobile X

UserID Giorni Si è schiantato Censurato
0 1   X
1 5 X  
2 5   X
3 8   X
4 10   X
5 12 X  
6 15   X
7 18 X  
8 21   X
9 22 X  

I dati di sopravvivenza contengano ora evento in giorni (codificate dal CrashTime) e informazioni se l'evento si riferisce a un'applicazione crash o censura. Se il crash è uguale a true, l'applicazione si è schiantato. In caso contrario, l'applicazione chiusa con grazia (in altre parole, è stato censurato). Inoltre, un campo UserID sta rintracciando l'istanza dell'applicazione.

Lo stimatore KM è implementato nel metodo EstimateKaplanMeier. Questo suddivide i dati in diversi intervalli di tempo non sovrapposti basati su periodi di tempo agli eventi (nel mio esempio, questo è un crash dell'applicazione). Tiene traccia di conteggi in ciascun intervallo.

È importante notare il conteggio di quante applicazioni sono ancora in piedi e corsa è fatto appena prima dell'evento (ciò è dovuto la formulazione matematica di processi di conteggio). Così nel primo intervallo nel mio esempio, che copre da 0 a 5 giorni, 9 fuori delle 10 istanze erano up e funzionante solo prima del giorno 5 (un'istanza in esecuzione al momento 1 finito). Nell'intervallo fino a e includendo il giorno 5, ho avuto un incidente (che definisce l'intervallo) e 2 istanze di finiture (nei giorni 1 e 5). Vedere Figura 4.

Day Intervals Created by the KM Estimator
Figura 4 intervalli di giorno creati da stimatore KM

La stima KM per la funzione di sopravvivenza è quindi il prodotto sopra tutti gli intervalli differenti della sopravvivenza derivata da conteggi nelle partizioni:

1 – (si schiantò nell'intervallo) / (quelli a rischio poco prima della fine dell'intervallo)

Il metodo EstimateKapalanMeier restituisce un oggetto di classe SurvivalCurve. Questo rappresenta la funzione di sopravvivenza stimata. L'uscita è una funzione a gradino. Ogni passo è il valore della funzione di sopravvivenza in un intervallo corrispondente (come valutato da stimatore KM). Figura 5 comprende parte dell'analisi di sopravvivenza demo programma uscita corrispondente all'oggetto SurvivalCurve (per entrambe le applicazioni X e Y).

Survival Analysis Demo Output for KM Estimates for Applications X and Y
Figura 5 sopravvivenza analisi uscita Demo per le stime KM per applicazioni X e Y

Figura 6 include una trama della funzione di sopravvivenza passo stimata per applicazione mobile X. Nella trama, brevi linee verticali in ogni passo denotano più occorrenze dell'evento incidente durante l'intervallo corrispondente al passaggio.

KM Estimate of the Survival Function for Mobile Application X
Figura 6 KM stima della funzione di sopravvivenza per applicazione Mobile X

È quindi possibile utilizzare la stima di dedurre il tempo di sopravvivenza mediana, o il tempo di cui la metà dell'istanza sarà viva. Questo dovrebbe accadere ad un certo punto nel tempo tra giorni 12 (dove la stima di probabilità di sopravvivenza è 0.711 > 0.5) e 18 (dove la probabilità di sopravvivenza è 0.474 < 0,5). Ci sono alcuni approcci in letteratura SA che descrivono come calcolare esattamente questa quantità, perché in genere cade tra due passi.

Definire il tempo di sopravvivenza mediana come il tempo minimo di sopravvivenza, per cui la funzione di sopravvivenza è inferiore a 0.5, che per l'applicazione mobile X si traduce in un tempo di sopravvivenza mediana di 18 giorni. L'interpretazione di questa quantità è che di giorno 18, la metà delle istanze di applicazione X crash e metà soggiorno mobile fino e funzionante. Questa implementazione calcola il tempo di sopravvivenza mediana nel metodo GetMedianSurvivalTime.

Un'altra domanda che si può rispondere usando le stime KM è se c'è una differenza nella capacità di sopravvivenza di due (o più) diverse applicazioni. Un modo per avvicinarsi a questa domanda è per tracciare visivamente le stime KM corrispondente ad ogni domanda. Questo tipo di trama è descritta Figura 7e confronta le funzioni di sopravvivenza stimato di applicazioni X e Y.

KM Estimates for Mobile Applications X and Y
Figura 7 KM stime per applicazioni mobili, X e Y

La curva verde rappresenta la funzione di sopravvivenza dell'applicazione X e la curva blu rappresenta la funzione di sopravvivenza dell'applicazione Y.

Dalla trama, si può vedere che la funzione di sopravvivenza dell'applicazione X cime la funzione di sopravvivenza dell'applicazione Y. Pertanto, si può dedurre applicazione X ha la migliore possibilità di sopravvivenza rispetto applicazione Y e, quindi, è più robusto.

Mentre visualizzazione funzioni di sopravvivenza può aiutare nel determinare le differenze di sopravvivenza, alcuni casi non sono così chiari. Fortunatamente, c'è un approccio statistico per verificare tali differenze in modo rigoroso e formale, chiamato il Log Rank Test. Questo è un algoritmo che verifica se c'è una differenza significativa tra due (o più) distribuzioni di sopravvivenza in un modo non-parametrici. La letteratura SA comprende una discussione dettagliata su questo e la maggior parte delle librerie di statistica SA includono implementazioni di Log Rank test.

Vale la pena notare che c'è un altro popolare algoritmo per stimare la funzione di sopravvivenza in un modo non-parametrici chiamato lo stimatore Nelson-Aalen (NA). Il NA stima la funzione di rischio cumulativo da dati di sopravvivenza. Da questa stima utilizzando una formula matematica che ha legami con la funzione di rischio cumulativo, è possibile derivare quindi la funzione di sopravvivenza. Si possono trovare maggiori dettagli su questo stimatore nella letteratura SA.

Conclusioni

Ho introdotto i concetti base e terminologia dal ramo statistico dell'analisi di sopravvivenza. Ha mostrato come implementare lo stimatore Kaplan-Meier non parametrica e lo ha applicato ad esempio confrontando la robustezza delle applicazioni mobili. Questo stimatore può aiutare a determinare se vi è una differenza nella capacità di sopravvivenza delle due applicazioni. Ho anche citato un rigoroso test statistico per verificare le differenze, chiamate il Log Rank test. Un'altra quantità che derivato usando lo stimatore KM è il tempo di sopravvivenza mediana, che punta anche a differenze di sopravvivenza tra le applicazioni X e Y.

Infine, ho citato lo stimatore Nelson-Aalen come metodo alternativo per stimare la funzione di sopravvivenza non parametrica. Esso non stima direttamente la funzione di sopravvivenza come stimatore KM, ma piuttosto stima la funzione di rischio cumulativo. È quindi possibile derivare la funzione di sopravvivenza dalla funzione di rischio cumulativo.

Questo solo graffi la superficie del campo ricco di SA. Le applicazioni coprono aree dalla medicina all'ingegneria e i cui metodi e algoritmi vengono implementati in molti pacchetti statistici. Con la proliferazione di Software e applicazioni per dispositivi mobili come le distribuzioni di impresa un servizio, prevedo metodi SA possono giocare un ruolo nel monitoraggio e miglioramento della qualità di tali distribuzioni.

Zvi Topol opere come scienziato senior nel marketing analitica a New York. Egli progetta e applica algoritmi di ottimizzazione non lineare di larga scala e metodi statistici per migliorare la pianificazione marketing per grandi aziende Fortune 500.

Grazie all'esperto tecnica seguente per la revisione di questo articolo: Dr. James McCaffrey (Microsoft Research)