2013-04-22 15 views
9

Ho una variabile di esito, ad esempio Y e un elenco di 100 dimensioni che potrebbero influire su Y (ad esempio X1 ... X100).Selezione delle variabili statisticamente significative in un modello R glm

Dopo aver eseguito il mio glm e visualizzato un riepilogo del mio modello, vedo quelle variabili che sono statisticamente significative. Mi piacerebbe essere in grado di selezionare quelle variabili ed eseguire un altro modello e confrontare le prestazioni. C'è un modo per analizzare il riepilogo del modello e selezionare solo quelli significativi?

+1

Provate il pacchetto [glmulti] (http://www.jstatsoft.org/v34/i12/paper). – krlmlr

+4

Inoltre, devi essere avvisato di non selezionare variabili "significative" in questo modo. La significatività statistica può essere modificata con l'aggiunta/rimozione di una singola variabile indipendente.La tua domanda suggerisce la rimozione di * tutte * variabili insignificanti alla prima esecuzione. Facendo ciò, alcune delle variabili inizialmente significative diventeranno insignificanti, mentre alcune delle variabili che hai rimosso potrebbero avere un buon valore predittivo. Quello che vuoi veramente è la rimozione uno per uno, e il confronto stepwise del modello in forma. Vedi questo thread: http://bit.ly/ZLVaD5 –

+0

Vedi anche questo: http://www.statmethods.net/stats/regression.html –

risposta

5

È possibile accedere ai valori del risultato glm tramite la funzione "Riepilogo". L'ultima colonna della matrice dei coefficienti è chiamata "Pr (> | t |)" e contiene i valori dei fattori utilizzati nel modello.

Ecco un esempio:

#x is a 10 x 3 matrix 
x = matrix(rnorm(3*10), ncol=3) 
y = rnorm(10) 
res = glm(y~x) 
#ignore the intercept pval 
summary(res)$coeff[-1,4] < 0.05 
16

Anche se @kith aperto la strada, non v'è più che può essere fatto. In realtà, l'intero processo può essere automatizzato. In primo luogo, creiamo alcuni dati:

x1 <- rnorm(10) 
x2 <- rnorm(10) 
x3 <- rnorm(10) 
y <- rnorm(10) 
x4 <- y + 5 # this will make a nice significant variable to test our code 
(mydata <- as.data.frame(cbind(x1,x2,x3,x4,y))) 

Il nostro modello è quindi:

model <- glm(formula=y~x1+x2+x3+x4,data=mydata) 

E il booleano vettore dei coefficienti può infatti essere estratto da:

toselect.x <- summary(model)$coeff[-1,4] < 0.05 # credit to kith 

Ma questo non è tutti! Inoltre, siamo in grado di fare questo:

# select sig. variables 
relevant.x <- names(toselect.x)[toselect.x == TRUE] 
# formula with only sig variables 
sig.formula <- as.formula(paste("y ~",relevant.x)) 

EDIT: come poster successivi hanno sottolineato, quest'ultima linea dovrebbe essere sig.formula <- as.formula(paste("y ~",paste(relevant.x, collapse= "+"))) per includere tutte le variabili.

E la regressione con variabili solo significative OP origine voleva:

sig.model <- glm(formula=sig.formula,data=mydata) 

In questo caso la stima sarà uguale a 1 abbiamo definito x4 come y + 5, che implica il rapporto perfetto.

+0

Questo è stato fantastico, grazie! Ma ho dovuto cambiare un po 'la sig.formula perché funzionasse per me: sig.formula <- as.formula (incolla ("y ~", incolla (rilevante.x, collapse = "+"))) Senza il comprimi solo il nome della prima variabile da pertinente.x – ElinaJ

+0

Infatti, altri poster hanno notato questo. Ho incluso il miglioramento nella risposta per chiarezza. –

1

in

sig.formula < - as.formula (pasta ("y ~", relevant.x))

si incolla solo la prima variabile di relevant.x gli altri vengono ignorati (provate ad esempio per invertire la condizione a> 0,5)

2

per le persone che hanno problema con il comando Maxim.K sul

sig.formula <- as.formula(paste("y ~",relevant.x)) 

uso questo

sig.formula <- as.formula(paste("y ~",paste(relevant.x, collapse= "+"))) 

codici finali saranno come

toselect.x <- summary(glmText)$coeff[-1,4] < 0.05 # credit to kith 
# select sig. variables 
relevant.x <- names(toselect.x)[toselect.x == TRUE] 
# formula with only sig variables 
sig.formula <- as.formula(paste("y ~",paste(relevant.x, collapse= "+"))) 

questo risolve il bug che stai affrontando con la raccolta del solo prima variabile.

Problemi correlati