2013-04-22 10 views
9

Mam zmienną wynikową, powiedzmy Y i listę 100 wymiarów, które mogą wpływać na Y (np. X1 ... X100).Wybieranie statystycznie istotnych zmiennych w modelu RIMM

Po uruchomieniu mojego glm i przejrzeniu podsumowania mojego modelu, widzę te zmienne, które są statystycznie istotne. Chciałbym móc wybrać te zmienne i uruchomić inny model i porównać wydajność. Czy istnieje sposób, w jaki mogę przeanalizować podsumowanie modelu i wybrać tylko te, które są znaczące?

+1

Wypróbuj pakiet [glmulti] (http://www.jstatsoft.org/v34/i12/paper). – krlmlr

+4

Ponadto należy ostrzec przed wyborem "istotnych" zmiennych w ten sposób. Istotność statystyczną można zmienić za pomocą dodania/usunięcia pojedynczej zmiennej niezależnej.Twoje pytanie sugeruje usunięcie * wszystkich * zmiennych nieistotnych przy pierwszym uruchomieniu. W ten sposób niektóre początkowo istotne zmienne staną się nieistotne, podczas gdy niektóre zmienne, które usunąłeś, mogły mieć dobrą wartość predykcyjną. To, czego naprawdę chcesz, to usuwanie jeden po drugim i stopniowe porównywanie dopasowania modelu. Zobacz ten wątek: http://bit.ly/ZLVaD5 –

+0

Zobacz także: http://www.statmethods.net/stats/regression.html –

Odpowiedz

5

Możesz uzyskać dostęp do wartości pseudonimu glm poprzez funkcję "podsumowanie". Ostatnia kolumna macierzy współczynników nosi nazwę "Pr (> | t |)" i przechowuje wartości p czynników używanych w modelu.

Oto przykład:

#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

Chociaż @kith utorował drogę, tam jest więcej, co można zrobić. W rzeczywistości cały proces może być zautomatyzowany. Najpierw stwórzmy jakieś dane:

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))) 

Nasz model jest następnie:

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

A Boolean wektor współczynników może być rzeczywiście ekstrakcji przez:

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

Ale to nie jest wszystko! Ponadto, możemy to zrobić:

# 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: jako kolejne plakaty podkreśliło, druga linia powinna być sig.formula <- as.formula(paste("y ~",paste(relevant.x, collapse= "+"))) obejmować wszystkie zmienne.

i uruchomić regresji ze zmiennymi jak tylko znaczących OP początkowo chciał:

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

W tym przypadku oszacowanie będzie równa 1 jak zdefiniowano x4 jako Y + 5, co oznacza, idealny związek.

+0

To było świetne, dzięki! Ale musiałem trochę zmienić sig.formula, żeby zadziałało dla mnie: sig.formula <- as.formula (wklej ("y ~", wklej (relevant.x, collapse = "+"))). zwinięcie to wzięło tylko pierwszą nazwę zmiennej od relevant.x – ElinaJ

+0

Rzeczywiście, inne plakaty zauważyły ​​to. Dodałem poprawkę w odpowiedzi na jasność. –

1

w

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

wklejeniu tylko pierwszą zmienną relevant.x pozostałe są ignorowane (spróbuj na przykład, aby odwrócić warunek do> 0,5)

2

dla osób mających problem z poleceniem Maxim.K na

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

stosowania tej

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

kody końcowe będzie jak

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= "+"))) 

to rozwiązuje problem masz z widokiem z wybieraniem samej pierwszej zmiennej.

Powiązane problemy