Zmniejszenie liczby zmiennych w regresji wielokrotnej

9

Mam duży zestaw danych składający się z wartości kilkuset zmiennych finansowych, które można by zastosować w regresji wielokrotnej do przewidywania zachowania funduszu indeksowego w czasie. Chciałbym zmniejszyć liczbę zmiennych do około dziesięciu, jednocześnie zachowując jak największą moc predykcyjną. Dodano: Zredukowany zestaw zmiennych musi być podzbiorem oryginalnego zestawu zmiennych, aby zachować ekonomiczne znaczenie oryginalnych zmiennych. Tak więc na przykład nie powinienem kończyć liniowymi kombinacjami lub agregacjami oryginalnych zmiennych.

Niektóre (prawdopodobnie naiwne) przemyślenia, jak to zrobić:

  1. Wykonaj prostą regresję liniową dla każdej zmiennej i wybierz dziesięć z największą R2wartości. Oczywiście nie ma gwarancji, że dziesięć najlepszych indywidualnych zmiennych łącznie będzie najlepszą grupą dziesięciu.
  2. Przeprowadź analizę głównych składników i spróbuj znaleźć dziesięć oryginalnych zmiennych o największych powiązaniach z pierwszymi kilkoma głównymi osiami.

Nie sądzę, żebym mógł przeprowadzić regresję hierarchiczną, ponieważ zmienne nie są tak naprawdę zagnieżdżone. Wypróbowanie wszystkich możliwych kombinacji dziesięciu zmiennych jest niewykonalne obliczeniowo, ponieważ istnieje zbyt wiele kombinacji.

Czy istnieje standardowe podejście do rozwiązania tego problemu zmniejszenia liczby zmiennych w regresji wielokrotnej?

Wydaje się, że byłby to wystarczająco powszechny problem, że byłoby standardowe podejście.

Bardzo pomocna odpowiedź byłaby taka, która nie tylko wspomina o standardowej metodzie, ale także daje przegląd tego, jak i dlaczego to działa. Alternatywnie, jeśli nie ma jednego standardowego podejścia, a raczej wielu z różnymi mocnymi i słabymi stronami, bardzo pomocną odpowiedzią byłoby takie, które omawia ich zalety i wady.

komentarz Whubera poniżej wskazuje, że wniosek w ostatnim akapicie jest zbyt szeroki. Zamiast tego przyjąłbym jako dobrą odpowiedź listę głównych podejść, być może z bardzo krótkim opisem każdego z nich. Po uzyskaniu warunków mogę samodzielnie wyodrębnić szczegóły każdego z nich.

Mike Spivey
źródło
1
Mike, możesz przejrzeć rozdział 3 ESL , jeśli go nie znasz. Strona pod podanym linkiem wskazuje na darmowy, legalny plik PDF w tekście.
kardynał
Czy możesz wyjaśnić, czy chcesz zachować, powiedzmy, dziesięć oryginalnych zmiennych, czy też byłbyś zainteresowany metodami, które wykorzystują niewielki podzbiór liniowych kombinacji oryginalnych zmiennych (ta ostatnia jest czymś w rodzaju tradycyjnej regresji głównych składników dałbym ci).
kardynał
3
Ta odpowiedź daje konkretny przykład jednego z (wielu) problemów z metodą 1. Komentarz @cardinal do odpowiedzi Franka Harrella na temat sedna problemu z metodą 2: wszystko, co robisz z samymi zmiennymi niezależnymi, bez uwzględnienia ich relacje ze zmienną zależną, ryzyko nie ma znaczenia lub jest gorsze. Jeśli chodzi o standardowe lub „kanoniczne” odpowiedzi, proszenie o jedną tutaj jest trochę jak prośba o omówienie wszystkich metod znajdowania racjonalnych punktów na krzywych eliptycznych, z ich zaletami i wadami :-).
whuber
2
Jak zauważyli inni tutaj, metoda 1 doprowadzi do problemów. Aby uzyskać intuicyjnie dostępne wyjaśnienie, dlaczego jest to prawda / opis innego problemu z tym podejściem, możesz przeczytać to: stats.stackexchange.com/questions/20836/…
gung - Przywróć Monikę
1
Podziękowania dla whuber i gung za wyjaśnienia problemów z pierwszym pomysłem.
Mike Spivey,

Odpowiedzi:

1

Ten problem jest zwykle nazywany wyborem podzbioru i istnieje kilka różnych podejść. Zobacz Google Scholar, aby uzyskać przegląd powiązanych artykułów .

Florian Brucker
źródło
Dziękuję Ci. Znajomość nazwy problemu jest bardzo pomocna!
Mike Spivey
6

Metoda 1 nie działa. Metoda 2 ma nadzieję w zależności od tego, jak to zrobisz. Lepiej wpisać główne składniki w malejącej kolejności wariancji. Bardziej interpretowalnym podejściem jest robienie zmiennych klastrów, a następnie redukowanie każdego klastra do jednego wyniku (bez użycia Y), a następnie dopasowanie modelu do wyników klastra.

Frank Harrell
źródło
+1. Przez „zmienne grupowanie” masz na myśli analizę czynnikową - to strategia, której mógłbym użyć (także zanim spojrzę na nią). Uważam analizę skupień raczej za obserwacje grupujące niż zmienne, ale mam jedynie powierzchowną wiedzę na temat analiz skupień.
Gung - Przywróć Monikę
1
Nie wydaje się, aby istniał jakiś a priori powód, by sądzić, że kierunki maksymalnej wariancji predyktorów są z konieczności silnie skorelowane z odpowiedzią . Być może się mylę lub źle zrozumiałem twój komentarz. Czy możesz to wyjaśnić?
kardynał
1
Wygląda też na to, że OP nie opisuje (całkiem) regresji głównych składników w swojej metodzie 2.
kardynał
W moim oryginalnym poście nie byłem całkowicie jasny, ale potrzebuję podzbioru oryginalnych zmiennych. Tak więc analiza prostych elementów lub grupowanie nie jest tym, czego szukam.
Mike Spivey,
1
Zmienne grupowanie jest powiązane z analizą czynnikową, ale jest prostsze. Zmienne są pogrupowane pod względem ich korelacji. Zobacz varclusfunkcję w Hmiscpakiecie R lub PROC VARCLUS w SAS. Redukcja danych może pomóc w podzestawie zmiennych, jeśli zachowujesz ostrożność; możesz usunąć cały klaster, jeśli jestP-wartość wynosi 0,3. W przypadku głównych komponentów istnieją techniki, takie jak redukcja baterii, w której zasadniczo przybliżasz komputery PC podzbiorem ich zmiennych składowych.
Frank Harrell,
3

W rozdziale 5 Data Mining with R autor pokazuje kilka sposobów wyboru najbardziej użytecznych predyktorów. (W kontekście bioinformatyki, gdzie każdy wiersz próbki ma ponad 12 000 kolumn!)

Najpierw używa niektórych filtrów opartych na rozkładzie statystycznym. Na przykład, jeśli masz pół tuzina predyktorów, wszystkie o podobnym środku i sd, możesz uniknąć jednego z nich.

Następnie pokazuje, jak używać losowego lasu, aby znaleźć najbardziej przydatne predyktory. Oto samodzielny abstrakcyjny przykład. Widzisz, mam 5 dobrych predyktorów, 5 złych. Kod pokazuje, jak zachować najlepsze 3.

set.seed(99)

d=data.frame(
  y=c(1:20),
  x1=log(c(1:20)),
  x2=sample(1:100,20),
  x3=c(1:20)*c(11:30),
  x4=runif(20),
  x5=-c(1:20),
  x6=rnorm(20),
  x7=c(1:20),
  x8=rnorm(20,mean=100,sd=20),
  x9=jitter(c(1:20)),
  x10=jitter(rep(3.14,20))
  )

library(randomForest)
rf=randomForest(y~.,d,importance=T)
print(importance(rf))
#         %IncMSE IncNodePurity
# x1  12.19922383    130.094641
# x2  -1.90923082      6.455262
# ...

i=importance(rf)
best3=rownames(i)[order(i[,"%IncMSE"],decreasing=T)[1:3]]
print(best3)
#[1] "x1" "x5" "x9"

reduced_dataset=d[,c(best3,'y')]

Ostatnie podejście autora polega na zastosowaniu hierarchicznego algorytmu grupowania do grupowania podobnych predyktorów w, powiedzmy, 30 grup. Jeśli chcesz 30 różnych predyktorów, wybierasz losowo jedną z każdej z tych 30 grup.

Oto trochę kodu, używając tych samych danych przykładowych jak powyżej, aby wybrać 3 z 10 kolumn:

library(Hmisc)
d_without_answer=d[,names(d)!='y']
vc=varclus(as.matrix(d_without_answer))
print(cutree(vc$hclust,3))
# x1  x2  x3  x4  x5  x6  x7  x8  x9 x10 
#  1   2   1   3   1   1   1   2   1   3 

Moje przykładowe dane wcale nie odpowiadają temu podejściu, ponieważ mam 5 dobrych predyktorów i 5, które są po prostu szumem. Jeśli wszystkie 10 predyktorami były nieznacznie skorelowane z y, i miał dobrą szansę być jeszcze lepiej, gdy stosowane razem (co jest całkiem możliwe, w dziedzinie finansowej), to może być dobre podejście.

Darren Cook
źródło
2

Możesz rozważyć zastosowanie metody takiej jak LASSO, która normalizuje najmniejsze kwadraty, wybierając rozwiązanie, które minimalizuje jedną normę wektora parametrów. Okazuje się, że w praktyce skutkuje to minimalizacją liczby niezerowych wpisów w wektorze parametrów. Chociaż LASSO jest popularny w niektórych kręgach statystycznych, w świecie wykrywania kompresyjnego rozważano wiele innych powiązanych metod.

Brian Borchers
źródło
Dzięki. Sprawdzę LASSO. (Wygląda na to, że wspomniano o tym w referencji, którą podaje kardynał.)
Mike Spivey