Come ridurre i predittori nel modo giusto per un modello di regressione logistica


9

Quindi ho letto alcuni libri (o parti di essi) sulla modellazione (tra le altre "Strategie di modellizzazione della regressione" di F. Harrell), dato che la mia situazione attuale in questo momento è che devo fare un modello logistico basato su dati binari di risposta. Ho entrambi i dati continui, categorici e binari (predittori) nel mio set di dati. Fondamentalmente ho circa 100 predittori in questo momento, che ovviamente è troppo per un buon modello. Inoltre, molti di questi predittori sono in qualche modo correlati, poiché spesso si basano sulla stessa metrica, anche se un po 'diversi.

Ad ogni modo, quello che ho letto, usando la regressione univariata e le tecniche passo-passo sono alcune delle cose peggiori che puoi fare per ridurre la quantità di predittori. Penso che la tecnica LASSO sia abbastanza buona (se l'ho capito bene), ma ovviamente non puoi usarla su 100 predittori e penso che ne deriverà qualcosa di buono.

Quindi quali sono le mie opzioni qui? Devo solo sedermi, parlare con tutti i miei supervisori e persone intelligenti al lavoro e pensare davvero a quali potrebbero essere / dovrebbero essere i 5 migliori predittori migliori (potremmo sbagliarci) o quale approccio dovrei considerare invece?

E sì, so anche che questo argomento è ampiamente discusso (online e nei libri), ma a volte sembra un po 'schiacciante quando sei un po' nuovo in questo campo della modellazione.

MODIFICARE:

Prima di tutto, la mia dimensione del campione è di +1000 pazienti (che è molto nel mio campo), e tra questi ci sono tra 70-170 risposte positive (cioè 170 risposte sì contro circa 900 nessuna risposta in uno dei casi) . Fondamentalmente l'idea è di prevedere la tossicità dopo il trattamento con radiazioni. Ho alcuni dati di risposta binaria potenziali (cioè la tossicità, o tu ce l'hai (1) o non lo hai (0)), e quindi ho diversi tipi di metriche. Alcune metriche sono specifiche del paziente, ad esempio età, farmaci usati, volume di organi e target, diabete ecc., Quindi ho alcune metriche specifiche per il trattamento basate sul campo di trattamento simulato per il target. Da ciò posso recuperare diversi predittori, che sono spesso molto rilevanti nel mio campo, poiché la maggior parte della tossicità è altamente correlata alla quantità di radiazioni (iose) ricevute. Quindi, ad esempio, se tratto un tumore polmonare, c'è il rischio di colpire il cuore con una certa dose. Posso quindi calcolare la quantità x del volume cardiaco che riceve la quantità x della dose, ad es. " Ne scelgo solo uno per cominciare (anche se questo è ciò che gli esperimenti passati hanno provato ovviamente, e anche quello che desidero fare), perché ho bisogno di sapere "esattamente" a che livello esiste effettivamente una grande correlazione tra tossicità cardiaca e dose in volume (di nuovo, ad esempio, ci sono altre metriche simili, in cui viene applicata la stessa strategia). Quindi sì, è praticamente come appare il mio set di dati. Alcune metriche diverse e alcune metriche che sono in qualche modo simili. Ne scelgo solo uno per cominciare (anche se questo è ciò che gli esperimenti passati hanno provato ovviamente, e anche quello che desidero fare), perché ho bisogno di sapere "esattamente" a che livello esiste effettivamente una grande correlazione tra tossicità cardiaca e dose in volume (di nuovo, ad esempio, ci sono altre metriche simili, in cui viene applicata la stessa strategia). Quindi sì, è praticamente come appare il mio set di dati. Alcune metriche diverse e alcune metriche che sono in qualche modo simili. s praticamente come appare il mio set di dati. Alcune metriche diverse e alcune metriche che sono in qualche modo simili. s praticamente come appare il mio set di dati. Alcune metriche diverse e alcune metriche che sono in qualche modo simili.

Quello che poi voglio fare è creare un modello predittivo in modo da poter prevedere con speranza quali pazienti avranno il rischio di contrarre qualche tipo di tossicità. E poiché i dati di risposta sono binari, la mia idea principale era ovviamente quella di utilizzare un modello di regressione logistica. Almeno questo è quello che altre persone hanno fatto nel mio campo. Tuttavia, quando si esaminano molti di questi documenti, dove è già stato fatto, alcuni di essi sembrano sbagliati (almeno quando si leggono questi tipi specifici di libri di modellistica come quelli di F. Harrel). Molti usano l'analisi della regressione univariata per scegliere i predittori e li usano nell'analisi multivariata (cosa sconsigliata se non sbaglio), e molti usano anche tecniche passo-passo per ridurre la quantità di predittori. Certo non è tutto male. Molti usano LASSO, PCA, convalida incrociata, bootstrap, ecc., Ma quelli che ho visto,

Per quanto riguarda la selezione delle funzionalità, questo è probabilmente il posto in cui mi trovo ora. Come faccio a scegliere / trovare i predittori giusti da utilizzare nel mio modello? Ho provato questi approcci univariati / saggi, ma ogni volta che penso: "Perché anche farlo, se è sbagliato?". Ma forse è un buon modo per mostrare, almeno alla fine, come un "buon modello" fatto nel modo giusto va contro un "cattivo modello" fatto nel modo sbagliato. Quindi potrei probabilmente farlo nel modo un po 'sbagliato ora, quello di cui ho bisogno di aiuto è ottenere una direzione nel farlo nel modo giusto.

Ci scusiamo per la modifica ed è così lungo.

EDIT 2: solo un rapido esempio di come appaiono i miei dati:

'data.frame':   1151 obs. of  100 variables:
 $ Toxicity              : Factor w/ 2 levels "0","1": 2 1 1 1 1 1 1 1 1 1 ...
 $ Age                   : num  71.9 64 52.1 65.1 63.2 ...
 $ Diabetes              : Factor w/ 2 levels "n","y": 1 1 1 1 1 1 1 1 1 1 ...
 $ Risk.Category         : Ord.factor w/ 3 levels "LOW"<"INTERMEDIATE"<..: 1 1 1 1 2 1 1 1 1 3 ...
 $ Organ.Volume.CC       : num  136.1 56.7 66 136.6 72.8 ...
 $ Target.Volume.CC      : num  102.7 44.2 58.8 39.1 56.3 ...
 $ D1perc                : num  7961 7718 7865 7986 7890 ...
 $ D1.5CC                : num  7948 7460 7795 7983 7800 ...
 $ D1CC                  : num  7996 7614 7833 7997 7862 ...
 $ D2perc                : num  7854 7570 7810 7944 7806 ...
 $ D2.5CC                : num  7873 7174 7729 7952 7604 ...
 $ D2CC                  : num  7915 7313 7757 7969 7715 ...
 $ D3perc                : num  7737 7379 7758 7884 7671 ...
 $ D3.5CC                : num  7787 6765 7613 7913 7325 ...
 $ D3CC                  : num  7827 6953 7675 7934 7480 ...
 $ D4perc                : num  7595 7218 7715 7798 7500 ...
 $ D5perc                : num  7428 7030 7638 7676 7257 ...
 $ DMEAN                 : num  1473 1372 1580 1383 1192 ...
 $ V2000CGY              : num  24.8 23.7 25.9 22.3 19.3 ...
 $ V2000CGY_CC           : num  33.7 13.4 17.1 30.4 14 ...
 $ V2500CGY              : num  22.5 21.5 24 20.6 17.5 ...
 $ V2500CGY_CC           : num  30.7 12.2 15.9 28.2 12.7 ...
 $ V3000CGY              : num  20.6 19.6 22.4 19.1 15.9 ...
 $ V3000CGY_CC           : num  28.1 11.1 14.8 26.2 11.6 ...
 $ V3500CGY              : num  18.9 17.8 20.8 17.8 14.6 ...
 $ V3500CGY_CC           : num  25.7 10.1 13.7 24.3 10.6 ...
 $ V3900CGY              : num  17.5 16.5 19.6 16.7 13.6 ...
 $ V3900CGY_CC           : num  23.76 9.36 12.96 22.85 9.91 ...
 $ V4500CGY              : num  15.5 14.4 17.8 15.2 12.2 ...
 $ V4500CGY_CC           : num  21.12 8.18 11.76 20.82 8.88 ...
 $ V5000CGY              : num  13.9 12.8 16.4 14 11 ...
 $ V5000CGY_CC           : num  18.91 7.25 10.79 19.09 8.03 ...
 $ V5500CGY              : num  12.23 11.14 14.84 12.69 9.85 ...
 $ V5500CGY_CC           : num  16.65 6.31 9.79 17.33 7.17 ...
 $ V6000CGY              : num  10.56 9.4 13.19 11.34 8.68 ...
 $ V6000CGY_CC           : num  14.37 5.33 8.7 15.49 6.32 ...
 $ V6500CGY              : num  8.79 7.32 11.35 9.89 7.44 ...
 $ V6500CGY_CC           : num  11.96 4.15 7.49 13.51 5.42 ...
 $ V7000CGY              : num  6.76 5.07 9.25 8.27 5.86 ...
 $ V7000CGY_CC           : num  9.21 2.87 6.1 11.3 4.26 ...
 $ V7500CGY              : num  4.61 2.37 6.22 6.13 4 ...
 $ V7500CGY_CC           : num  6.27 1.34 4.11 8.38 2.91 ...
 $ V8000CGY              : num  0.7114 0.1521 0.0348 0.6731 0.1527 ...
 $ V8000CGY_CC           : num  0.9682 0.0863 0.023 0.9194 0.1112 ...
 $ V8200CGY              : num  0.087 0 0 0 0 ...
 $ V8200CGY_CC           : num  0.118 0 0 0 0 ...
 $ V8500CGY              : num  0 0 0 0 0 0 0 0 0 0 ...
 $ V8500CGY_CC           : num  0 0 0 0 0 0 0 0 0 0 ...
 $ n_0.02                : num  7443 7240 7371 7467 7350 ...
 $ n_0.03                : num  7196 6976 7168 7253 7112 ...
 $ n_0.04                : num  6977 6747 6983 7055 6895 ...
 $ n_0.05                : num  6777 6542 6811 6871 6693 ...
 $ n_0.06                : num  6592 6354 6649 6696 6503 ...
 $ n_0.07                : num  6419 6180 6496 6531 6325 ...
 $ n_0.08                : num  6255 6016 6350 6374 6155 ...
 $ n_0.09                : num  6100 5863 6211 6224 5994 ...
 $ n_0.1                 : num  5953 5717 6078 6080 5840 ...
 $ n_0.11                : num  5813 5579 5950 5942 5692 ...
 $ n_0.12                : num  5679 5447 5828 5809 5551 ...
 $ n_0.13                : num  5551 5321 5709 5681 5416 ...
 $ n_0.14                : num  5428 5201 5595 5558 5285 ...
 $ n_0.15                : num  5310 5086 5485 5439 5160 ...
 $ n_0.16                : num  5197 4975 5378 5324 5039 ...
 $ n_0.17                : num  5088 4868 5275 5213 4923 ...
 $ n_0.18                : num  4982 4765 5176 5106 4811 ...
 $ n_0.19                : num  4881 4666 5079 5002 4702 ...
 $ n_0.2                 : num  4783 4571 4985 4901 4597 ...
 $ n_0.21                : num  4688 4478 4894 4803 4496 ...
 $ n_0.22                : num  4596 4389 4806 4708 4398 ...
 $ n_0.23                : num  4507 4302 4720 4616 4303 ...
 $ n_0.24                : num  4421 4219 4636 4527 4210 ...
 $ n_0.25                : num  4337 4138 4555 4440 4121 ...
 $ n_0.26                : num  4256 4059 4476 4355 4035 ...
 $ n_0.27                : num  4178 3983 4398 4273 3951 ...
 $ n_0.28                : num  4102 3909 4323 4193 3869 ...
 $ n_0.29                : num  4027 3837 4250 4115 3790 ...
 $ n_0.3                 : num  3955 3767 4179 4039 3713 ...
 $ n_0.31                : num  3885 3699 4109 3966 3639 ...
 $ n_0.32                : num  3817 3633 4041 3894 3566 ...
 $ n_0.33                : num  3751 3569 3975 3824 3496 ...
 $ n_0.34                : num  3686 3506 3911 3755 3427 ...
 $ n_0.35                : num  3623 3445 3847 3689 3361 ...
 $ n_0.36                : num  3562 3386 3786 3624 3296 ...
 $ n_0.37                : num  3502 3328 3725 3560 3233 ...
 $ n_0.38                : num  3444 3272 3666 3498 3171 ...
 $ n_0.39                : num  3387 3217 3609 3438 3111 ...
 $ n_0.4                 : num  3332 3163 3553 3379 3053 ...
 $ n_0.41                : num  3278 3111 3498 3321 2996 ...
 $ n_0.42                : num  3225 3060 3444 3265 2941 ...
 $ n_0.43                : num  3173 3010 3391 3210 2887 ...
 $ n_0.44                : num  3123 2961 3339 3156 2834 ...
 $ n_0.45                : num  3074 2914 3289 3103 2783 ...
 $ n_0.46                : num  3026 2867 3239 3052 2733 ...
 $ n_0.47                : num  2979 2822 3191 3002 2684 ...
 $ n_0.48                : num  2933 2778 3144 2953 2637 ...
 $ n_0.49                : num  2889 2734 3097 2905 2590 ...

E se eseguo table(data$Toxicity)l'output è:

> table(data$Toxicity)
   0    1 
1088   63 

Ancora una volta, questo è per un tipo di tossicità. Ne ho anche altri 3.


1
Che cosa vuoi fare? Predizione o inferenza o qualcos'altro?
Stephan Kolassa,

Questo si chiama selezione funzionalità . Se è necessario utilizzare la regressione, le funzionalità categoriali sono a una sola opzione, ma per i metodi dell'albero è possibile utilizzarle così come sono. Potresti persino capire i termini di interazione o associazione n-way più predittivi e usarli.
smci,

"Devo solo sedermi, parlare con la gente e pensare davvero / ragionare sui predittori top-n?" Inferno no, l'intuizione è un punto di partenza, ma è per questo che ci sono metodi di selezione delle caratteristiche; deriva da molte sperimentazioni che battono l'intuizione.
smci,

1
@smci scusa per non essere chiaro. Quindi nel mio campo (oncologia da radiazioni) facciamo piani di trattamento, che in pratica è una rappresentazione 3D di come la radiazione / dose è distribuita attorno a un bersaglio. Sfortunatamente, questo non può essere fatto senza colpire almeno una piccola quantità di tessuto sano. Quindi da questa mappa 3D, per così dire, posso ad esempio ottenere informazioni su quanto un volume riceve una quantità x di radiazioni / dose. Ma come puoi immaginare, posso "chiedere" in passaggi come "quanta radiazione riceve l'1% di questo volume di struttura", e quindi il 2%, il 3%. In linea di principio, i valori saranno in qualche modo simili.
Denver Dang,

1
@smci, se la previsione è l'obiettivo dei PO, la correlazione non dovrebbe preoccupare. Un'elevata correlazione tra le variabili sarebbe davvero di grande preoccupazione solo quando si cerca di interpretare le variabili incluse nel modello.
StatStudent

Risposte:


4

Alcune delle risposte che hai ricevuto sulla selezione della funzione push sono fuori base.

Il lazo o meglio la rete elastica farà la selezione delle caratteristiche ma, come sottolineato sopra, rimarrai piuttosto deluso dalla volatilità dell'insieme di caratteristiche "selezionate". Credo che l'unica vera speranza nella tua situazione sia la riduzione dei dati, cioè l'apprendimento senza supervisione, come sottolineo nel mio libro. La riduzione dei dati offre maggiore interpretabilità e soprattutto maggiore stabilità. Consiglio vivamente i componenti principali sparsi o il clustering variabile seguito dai componenti principali regolari sui cluster.

Il contenuto delle informazioni nel set di dati è di gran lunga troppo basso perché qualsiasi algoritmo di selezione delle funzionalità sia affidabile.


Prima di tutto, grazie per aver dedicato del tempo a commentare. In secondo luogo, se non sbaglio, l'apprendimento senza supervisione avviene quando non si utilizza (o non si dispone) della risposta specifica delle variabili di risposta (ovvero 1 o 0) e si fa "indovinare" "come si dovrebbe dividere la distribuzione. Ma la regressione logistica (e lineare) è controllata per quanto ne so? Quindi la tua raccomandazione è di abbandonare quella metodologia? Da un lato mi piace l'idea, ma dall'altro, la regressione logistica e probit è come quasi ogni documento di modellistica nel mio campo (dati simili al mio) ha fatto finora.
Denver Dang,

Quindi non dovrei uscire su un arto qui, o devo solo supporre che tutti gli altri abbiano fatto "male" per sempre?
Denver Dang,

3
Non tutti, ma la maggior parte delle persone ha sicuramente sbagliato. Questo è stato uno dei principali motivi per scrivere Regressione Modeling Strategies . L'obiettivo della riduzione dei dati è la riduzione della quantità di apprendimento supervisionato che viene richiesta la regressione logistica. Ad esempio, è possibile ridurre 100 funzionalità candidate a 5 punteggi cluster, quindi è necessario stimare solo 5 parametri + intercetta.
Frank Harrell,

2
Cosa ne pensi dei modelli a coefficiente variabile in questo caso (come ho aggiunto alla mia risposta)?
Ben Bolker,

@FrankHarrell sembra piuttosto interessante. Ma scusami se lo chiedi, perché l'apprendimento supervisionato è negativo o almeno un po 'negativo, come sembra che tu stia insinuando?
Denver Dang,

8

+1 per "a volte sembra un po 'travolgente". Dipende davvero (come afferma chiaramente Harrell; vedi la sezione alla fine del Capitolo 4) se vuoi fare

  • analisi di conferma ( ridurre la complessità del predittore a un livello ragionevole senza esaminare le risposte, per PCA o considerazioni sull'area tematica o ...)
  • analisi predittiva ( utilizzare metodi di penalizzazione appropriati). Lasso potrebbe benissimo funzionare bene con 100 predittori, se hai un campione ragionevolmente grande. La selezione delle funzionalità sarà instabile, ma va bene se tutto ciò che ti interessa è la previsione. Ho una preferenza personale per approcci simili a una cresta che tecnicamente non "selezionano le caratteristiche" (perché non riducono mai alcun parametro a zero esattamente), ma qualunque cosa funzioni ...

    Dovrai usare la validazione incrociata per scegliere il grado di penalizzazione, che distruggerà la tua capacità di fare inferenza (costruisci intervalli di confidenza sulle previsioni) a meno che tu non usi metodi di inferenza di alta dimensione all'avanguardia (ad esempio Dezeure et al 2015 ; I non ho provato questi approcci ma sembrano sensati ...)

  • analisi esplorativa : divertiti, sii trasparente e onesto, non citare alcun valore p.

Per il particolare caso d'uso che hai ora descritto (un gruppo di predittori rappresenta essenzialmente una distribuzione cumulativa della dose ricevuta da diverse frazioni del cuore), potresti voler esaminare modelli a coefficienti variabili (un po 'difficile da cercare) , che fondamentalmente si adattano a una curva uniforme per l'effetto del CDF (questi possono essere implementati nel mgcvpacchetto di R ).


La mia dimensione del campione è +1000 e, a seconda della variabile di risposta (ne ho 4), ho tra 75-170 risposte positive (o negative, a seconda di come la vedi) del +1000. Non so se ciò semplifichi qualcosa, ovvero posso eliminare alcuni passaggi poiché il set di campioni è piuttosto enorme (almeno nel mio campo).
Denver Dang,

La validazione incrociata distruggerebbe la capacità di fare inferenza? Può essere. Sto pensando che si potrebbe avviare il bootstrap prima della cross validation per ottenere intervalli di confidenza per le previsioni. Questo può essere fattibile con 1000 osservazioni.
JTH

l'inferenza post-selezione è davvero difficile; se usi l'intero set di dati per ottimizzare gli iperparametri (come la forza della penalizzazione), allora sei nella stessa situazione. Dovresti delineare il tuo approccio bootstrap + CV prima di poter dire se credo che potrebbe funzionare ...
Ben Bolker,

0

Ci sono molti approcci diversi. Quello che consiglierei è provare alcuni semplici, nel seguente ordine:


1
Credo che tutti e tre questi metodi saranno instabili.
Frank Harrell,

dipende da come si definisce instabile. In pratica, di solito si utilizza una sorta di convalida incrociata come k-fold o leave-one-out e si giudica in base alla prestazione complessiva + varianza (ovvero il metodo 1SE) che presenta le caratteristiche che si scelgono.
resnet

Il bootstrap e la validazione incrociata convalidano solo alcuni indici predittivi per il processo che genera il modello. Ciò si traduce in una buona stima di tale indice per un modello selezionato usando quel processo, ma non fornisce alcun conforto per la struttura di un modello che è stato sviluppato una volta, cioè il modello complessivo. Guarda la struttura selezionata (ovvero le funzionalità selezionate) attraverso i campioni per vedere la volatilità.
Frank Harrell,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.