Come eseguire la selezione del sottoinsieme di regressione logistica?


47

Sto adattando una gloria binomiale della famiglia in R, e ho un'intera troupe di variabili esplicative, e ho bisogno di trovare il migliore (R al quadrato come misura va bene). A corto di scrivere una sceneggiatura per scorrere in modo casuale diverse combinazioni delle variabili esplicative e quindi registrare quale esegue meglio, non so davvero cosa fare. E la leapsfunzione da salti di pacchetti non sembra fare la regressione logistica.

Qualsiasi aiuto o suggerimento sarebbe molto apprezzato.


Esistono funzioni che eseguono la ricerca automatica. Dovresti dare un'occhiata alla funzione step . La sezione 5.4 illustra questo punto: data.princeton.edu/R/glms.html
ocram

Mi dispiace ma il mio post è stato modificato in modo da non porre più la mia domanda. Ho 35 (26 significative) variabili esplicative nel mio modello di regressione logistica. Ho bisogno della migliore combinazione possibile di 8, non del miglior sottoinsieme, e in nessun momento mi interessava un approccio di stile graduale o di tutti i sottoinsiemi. Non c'è spazio di manovra in questo 8. Ho solo pensato che qualcuno potesse sapere come avrei potuto adattarsi a tutte le combinazioni di 8 variabili esplicative e potrebbe dirmi che massimizza la probabilità (mi dispiace per la scoreggia cerebrale R-quadrata ma AIC non è rilevante neanche da allora Ho un numero fisso di parametri, 8).
Leendert,

Puoi ripristinare la versione precedente del tuo post o combinare entrambe le modifiche. Sono sicuro che @mpiktas ha avuto buone intenzioni quando ha cercato di migliorarne l'aspetto e non ha notato i parametri No.
chl

@Tutti: grazie mille. Alla fine ho usato molte cose diverse nella speranza che tutti dessero risposte simili. E lo hanno fatto. Ho usato i pacchetti BMA, bestglm e glmnet e la funzione step. Modelli adatti con tutti loro, e non c'era discrepanza in ciò che BMA con maxcol = 9 e step consideravano il modello migliore. Tutti gli esperti nel campo intorno a me sembravano molto contenti delle variabili e ritenevano che fosse abbastanza progressivo. Quindi grazie per tutto l'input. L'ho usato davvero tutto.
Leendert,

glmulti è anche un buon pacchetto per la migliore selezione di sottogruppi, e quello ti permette di specificare il massimo numero di variabili nel tuo modello, e ti permette anche di considerare tutti i possibili effetti di interazione del 1 ° ordine
Tom Wenseleers

Risposte:


28

I metodi stepwise e "all subset" sono generalmente errati. Vedi Arresto graduale: perché i metodi graduali sono sbagliati e cosa dovresti usare di David Cassell e di me stesso (abbiamo usato SAS, ma la lezione si applica) o Frank Harrell Regressione Modeling Strategies. Se hai bisogno di un metodo automatico, ti consiglio LASSO o LAR. Un pacchetto LASSO per la regressione logistica è disponibile qui , un altro articolo interessante è su LASSO iterato per la logistica


6
(+1) A proposito dei pacchetti R, ci sono anche glmnet (implementazione con algo di coordinate coordinate, Friedman e coll.) E penalizzato (permette di mantenere alcune varianti non aperte). Da notare che F. Harrell fornisce una stima ML penalizzata per i GLM (vedi lrm, o il suo libro di testo RMS per ulteriori informazioni).
chl

(+1) Bell'articolo, sembra che debba iniziare ad andare ben oltre gli stati dell'autore nella domanda (non la prima volta che non l'ho fatto). @chl (+1) suggerimenti alternativi perfetti anche.
Dmitrij Celov,

@chl: +1 per glmnet, è un ottimo pacchetto.
Zach,

1
@chl Grazie! Uno dei problemi con R è tenere traccia dei pacchetti (ce ne sono così tanti!) E quali sono i migliori. Le viste delle attività aiutano
Peter Flom - Ripristina Monica

2
Se le tue variabili sono collineari, è meglio usare la rete elastica usando glmnet, diciamo con alfa = 0,5, poiché LASSO tende a eliminare casualmente le variabili altamente collineari dal modello
Tom Wenseleers,

15

R2AICBIC

La regressione logistica è stimata con il metodo della massima verosimiglianza, quindi leapsnon viene utilizzata direttamente qui. Un'estensione di leapsal glm()funzioni è il bestglm pacchetto (come di solito raccomandazione segue, consultare vignette lì).

Potresti essere interessato anche all'articolo di David W. Hosmer, Borko Jovanovic e Stanley Lemeshow Regressione logistica dei migliori sottoinsiemi // Biometria Vol. 45, n. 4 (dicembre 1989), pagg. 1265-1270 (solitamente accessibile attraverso le reti universitarie).


2
R2BIC,AIC8BICAICR2

8

qualsiasi riferimento accademico perR2R2 is not an appropriate goodness-of-fit measure for logistic regression take an information criterion AICAIC or BICBIC
SIslam

una nota su bestglm, che utilizza leapsnel backend per il calcolo! Quindi fallirà se c'è un NA nel set di dati e verrà visualizzato un messaggio come Error in leaps.setup(x, y, wt = weights, nbest = nbest, nvmax = nvmax, : NA/NaN/Inf in foreign function call (arg 3) Ma ciò che è interessante, il mio set di dati non ha NA piuttosto alcuni zeri, tuttavia questa funzione si lamenta e fornisce esattamente il messaggio sopra !!
Sabato

Anche glmnet è buono e può anche fare modelli che considerano tutti i possibili effetti di interazione del 1 ° ordine
Tom Wenseleers

6

Un'idea sarebbe quella di utilizzare una foresta casuale e quindi utilizzare le misure di importanza variabile che emette per scegliere le 8 migliori variabili. Un'altra idea sarebbe quella di utilizzare il pacchetto "boruta" per ripetere questo processo alcune centinaia di volte per trovare le 8 variabili che sono costantemente più importanti per il modello.


@Zach Suggerisci di fare affidamento sulle RF per eseguire la selezione delle funzionalità e quindi applicare un GLM - in questo caso, c'è il rischio di overfitting o over-optimism - o di utilizzare RF (con misure standard di varia importanza, oppure selezione pertinente) come strumento autonomo?
chl

@chl: stavo suggerendo di usare le RF per eseguire la selezione delle funzioni e quindi applicare il GLM. Concordo sul rischio che si verifichi un eccesso di adattamento, ma l'OP ha affermato di aver bisogno esattamente di 8 variabili.
Zach,

1
@Zach "esattamente 8 variabili" ... Quindi, si sta in qualche modo attenuando le potenziali variabili di interesse in base a una misura di importanza variabile (che grazie all'essere basato su permutazione e doppio ricampionamento dovrebbe essere priva di distorsioni) e quindi reintegrarli in un GLM. IMHO, si interrompe il controllo sul sovradimensionamento esercitato tramite l'insacco. Questo è anche descritto in ESLII da Hastie et al .: l'eventuale selezione delle caratteristiche deve essere inclusa nella procedura di convalida incrociata (dove la convalida incrociata include la valutazione delle prestazioni del modello).
chl

@chl: il pacchetto r "boruta" non viene convalidato eseguendo la foresta casuale più volte? In pratica stai dicendo che abbiamo bisogno di "meta-cross-validation", in cui fai la selezione delle variabili e adattiamo il tuo modello a sottoinsiemi casuali di dati?
Zach

3
@Zach Il mio punto era che il bagging, o in particolare le RF, impediscono il sovradimensionamento (fino a un certo punto) purché rimanga nella stessa toolchain. Se usi i risultati delle RF e poi vai a vedere come si comporterebbe un altro modello con gli stessi dati, allora interrompi il loop CV. Ma perché non usare direttamente le RF per la classificazione? Un'altra soluzione sarebbe quella di utilizzare le RF su un campione di addestramento e quindi applicare il GLM su un campione tenuto (che potrebbe anche essere validato in modo incrociato).
chl

0

stats::stepfunzione o il MASS::stepAICsupporto di funzione più generale lm, glm(cioè regressione logistica) e aovmodelli familiari.

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.