Wybór funkcji i model z glmnetem na danych metylacji (p >> N)

29

Chciałbym użyć GLM i elastycznej sieci, aby wybrać te istotne cechy + zbudować model regresji liniowej (tj. Zarówno przewidywanie, jak i zrozumienie, więc lepiej byłoby pozostawić stosunkowo niewiele parametrów). Wyjście jest ciągłe. To genów na przypadków. Czytałem o pakiecie, ale nie jestem w 100% pewien kroków, które należy wykonać:2000050glmnet

  1. Wykonaj CV, aby wybrać lambda:
    cv <- cv.glmnet(x,y,alpha=0.5)
    (Q1) biorąc pod uwagę dane wejściowe, czy wybrałbyś inną wartość alfa?
    (Q2) Czy muszę zrobić coś innego przed zbudowaniem modelu?

  2. Dopasuj model:
    model=glmnet(x,y,type.gaussian="covariance",lambda=cv$lambda.min)
    (Q3) coś lepszego niż „kowariancja”?
    (Q4) Jeśli lambda została wybrana przez CV, dlaczego ten krok jest potrzebny nlambda=?
    (Q5) czy lepiej jest użyć lambda.minczy lambda.1se?

  3. Uzyskaj współczynniki, aby zobaczyć, które parametry wypadły („.”):
    predict(model, type="coefficients")

    Na stronie pomocy istnieje wiele predictmetod (na przykład predict.fishnet, predict.glmnet, predict.lognetitp). Ale wszelkie „proste” przewidują, jak widziałem na przykładzie.
    (Q6) należy używać predictlub predict.glmnetlub inny?

Pomimo tego, co przeczytałem o metodach regularyzacji, jestem całkiem nowy w R i w tych pakietach statystycznych, więc trudno jest się upewnić, czy dostosowuję mój problem do kodu. Wszelkie sugestie będą mile widziane.

AKTUALIZACJA
Na podstawie „Jak wcześniej wspomniano, obiekt klasy pociągu zawiera element o nazwie finalModel, który jest dopasowanym modelem z wartościami parametrów strojenia wybranymi przez ponowne próbkowanie. Obiekt ten można wykorzystać w tradycyjny sposób do generowania prognoz dla nowych próbek, używając tego funkcja przewidywania modelu ”.

Używając caretdo dostrojenia zarówno alfa, jak i lambda:

  trc = trainControl(method=cv, number=10)  
  fitM = train(x, y, trControl = trC, method="glmnet")  

Czy fitMzastępuje poprzedni krok 2? Jeśli tak, to jak teraz określić opcje glmnet ( type.gaussian="naive",lambda=cv$lambda.min/1se)?
A następnego predictkroku, mogę wymienić modelsię fitM?

Jeśli zrobię

  trc = trainControl(method=cv, number=10)  
  fitM = train(x, y, trControl = trC, method="glmnet")  
  predict(fitM$finalModel, type="coefficients")

czy to ma w ogóle sens, czy niewłaściwie mieszam oba słownictwo z pakietu?

PGreen
źródło

Odpowiedzi:

42

Część 1

W siatce elastycznej stosowane są dwa rodzaje ograniczeń parametrów

  1. Ograniczenia Lasso (tj. wielkości wartości bezwzględnych )βj
  2. Ograniczenia (tj. Wielkość kwadratowych wartości )βj

α kontroluje względną wagę tych dwóch typów. Wiązania Lasso pozwalają na wybór / usuwanie zmiennych w modelu. Ograniczenia kalenicowe radzą sobie ze zmiennymi współliniowymi. To, na co przykładasz większą wagę, będzie zależeć od właściwości danych; wiele skorelowanych zmiennych może wymagać obu ograniczeń, kilka skorelowanych zmiennych może sugerować większy nacisk na ograniczenia grzbietowe.

Jednym ze sposobów rozwiązania tego problemu jest potraktowanie jako parametru strojenia obok i użycie wartości, które dają najniższy błąd CV, w taki sam sposób, w jaki w tym momencie tunujesz nad .αλλcv.glmnet

Daszek pakietu R może budować modele przy użyciu pakietu glmnet i powinien być skonfigurowany do dostrojenia obu parametrów i .αλ

Część 2

Pytanie 3

Tak, w tym przypadku, gdy (liczba zmiennych liczba obserwacji), strona pomocy sugeruje użyciemn?glmnet

type.gaussian = "naive"

Zamiast przechowywać wszystkie obliczone po drodze produkty wewnętrzne, które mogą być nieefektywne przy dużej liczbie zmiennych lub gdy , opcja zapętli się nad każdym razem, gdy jest to wymagane do komputera produktów wewnętrznych.mn"naive"n

Jeśli nie podałeś tego argumentu, glmneti "naive"tak wybrałbyś jako , ale lepiej jest podać to jawnie, ponieważ ustawienia domyślne i opcje zmieniają się później w pakiecie, a kod jest uruchamiany w przyszłości.m>500

Pytanie 4

Krótka odpowiedź, na razie nie musisz określać wysokiej wartości, ponieważ nlambdawybrałeś wartość optymalną, zależną od . Jeśli jednak chcesz wykreślić ścieżki współczynników itp., To posiadanie skromnego zestawu wartości w przedziale powoduje znacznie ładniejszy zestaw ścieżek. Obciążenie obliczeniowe związane z wykonaniem całej ścieżki w stosunku do jednego konkretnego nie jest tak duże, co jest wynikiem dużego wysiłku w celu opracowania algorytmów do prawidłowego wykonania tego zadania. Po prostu pozostawiłbym domyślną, chyba że robi to znaczącą różnicę w czasie obliczeń.α=0.5λλnlambda

Pytanie 5

To jest pytanie o pasternactwo. lambda.minOpcja odnosi się do wartości na najniższym błędu CV. Błąd przy tej wartości jest średnią błędów nad fałdami, a zatem ta ocena błędu jest niepewna. Reprezentuje wartość w wyszukiwaniu, która była prostsza niż najlepszy model ( ), ale które ma błędu w 1 błąd standardowy najlepszego modelu. Innymi słowy, użycie wartości jako wybranej wartości dlaλλklambda.1seλlambda.minlambda.1seλskutkuje modelem, który jest nieco prostszy niż najlepszy model, ale którego nie można odróżnić od najlepszego modelu pod względem błędu, biorąc pod uwagę niepewność w krotnym oszacowaniu CV błędu najlepszego modelu.k

Wybór nalezy do ciebie:

  1. Najlepszy model, który może być zbyt złożony lub nieco przebudowany: lambda.min
  2. Najprostszy model, który ma błąd porównywalny do najlepszego, biorąc pod uwagę niepewność: lambda.1se

Część 3

Jest to prosty i często spotyka się go z R. Korzystasz z predict()funkcji przez 99,9% czasu. R zaaranżuje użycie poprawnej funkcji dla obiektu podanego jako pierwszy argument.

Z technicznego punktu widzenia predictjest to funkcja ogólna, która ma metody (wersje funkcji) dla obiektów różnych typów (technicznie zwanych klasami ). Obiekt utworzony przez glmnetma określoną klasę (lub klasy) w zależności od tego, jaki typ modelu jest rzeczywiście dopasowany. glmnet (pakiet) zapewnia metody predictdla tych różnych typów obiektów. R wie o tych metodach i wybierze odpowiednią na podstawie klasy dostarczonego obiektu.

Przywróć Monikę - G. Simpson
źródło
2
WIELKA odpowiedź! Czytałem teraz o karetce. Nie jestem w 100% pewien co do związku między pakietem caret a pakietem glmnet, dlatego zaktualizowałem swoje pytanie, aby wyjaśnić „scalenie” tych pakietów z pakietami lub przejście z glmnet na caret.
PGreen,
1
@PGreen: caretto pakiet otoki R, który otacza interfejsy funkcyjne z ponad 100 pakietów ML, aby był bardziej spójny i dodaje CV, gridsearch, modyfikuje szalone ustawienia domyślne parametrów itp. Nie jest pozbawiony dziwactw, ale jest całkiem dobry i szeroko stosowany.
smci
Chcę tylko dodać, że do strojenia alfa można użyć cva.glmnet(..)zamiast po prostu cv.glmnet(...)dostroić alfa i lambda w tym samym czasie. Następnie możesz uruchomić, minlossplot(cva.fit)aby zobaczyć, która alfa daje najlepszy wynik. Obie są częścią glmnetUtils
Espen Riskedal