Merkmalsauswahl & Modell mit GLMnet auf Methylierungsdaten (p >> N)

29

Ich möchte GLM und Elastic Net verwenden, um die relevanten Features auszuwählen und ein lineares Regressionsmodell zu erstellen (dh sowohl Vorhersage als auch Verständnis, daher ist es besser, relativ wenige Parameter zu haben). Die Ausgabe erfolgt kontinuierlich. Es sind Gene pro Fälle. Ich habe über das Paket gelesen , bin mir jedoch nicht zu 100% sicher, welche Schritte zu befolgen sind:2000050glmnet

  1. Führen Sie einen Lebenslauf durch, um Lambda zu wählen:
    cv <- cv.glmnet(x,y,alpha=0.5)
    (Q1) Würden Sie angesichts der eingegebenen Daten einen anderen Alpha-Wert wählen?
    (F2) Muss ich vor dem Erstellen des Modells noch etwas anderes tun?

  2. Passen Sie das Modell:
    model=glmnet(x,y,type.gaussian="covariance",lambda=cv$lambda.min)
    (Q3) etwas besser als "Kovarianz"?
    (F4) Wenn Lambda vom Lebenslauf ausgewählt wurde, warum muss dieser Schritt durchgeführt werden nlambda=?
    (Q5) ist es besser zu benutzen lambda.minoder lambda.1se?

  3. Erhalten Sie die Koeffizienten, um zu sehen, welche Parameter herausgefallen sind ("."):
    predict(model, type="coefficients")

    In der Hilfeseite gibt es viele predictMethoden (zB predict.fishnet, predict.glmnet, predict.lognetusw.). Aber jede "Ebene" vorherzusagen, wie ich an einem Beispiel sah.
    (Q6) soll ich verwenden predictoder predict.glmnetoder andere?

Ungeachtet dessen, was ich über Regularisierungsmethoden gelesen habe, bin ich in R und in diesen statistischen Paketen ziemlich neu, daher ist es schwierig, sicher zu sein, ob ich mein Problem an den Code anpasse. Anregungen werden gerne entgegengenommen.

UPDATE
Basierend auf "Wie bereits erwähnt, enthält ein Objekt der Klasse Train ein Element mit dem Namen" finalModel, bei dem es sich um das angepasste Modell mit den durch Resampling ausgewählten Tuning-Parameterwerten handelt. Dieses Objekt kann auf herkömmliche Weise verwendet werden, um Vorhersagen für neue Stichproben zu generieren Modell Vorhersagefunktion. "

Verwenden Sie caret, um sowohl Alpha als auch Lambda abzustimmen:

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

Ersetzt der fitMvorherige Schritt 2? Wenn ja, wie werden die glmnet-Optionen ( type.gaussian="naive",lambda=cv$lambda.min/1se) jetzt angegeben?
Und der folgende predictSchritt kann ich ersetzen modelzu fitM?

Wenn ich mache

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

macht es überhaupt Sinn oder mische ich beide Paketvokabeln falsch?

PGreen
quelle

Antworten:

42

Teil 1

In dem elastischen Netz werden zwei Arten von Randbedingungen für die Parameter angewendet

  1. Lasso-Bedingungen (dh die Größe der absoluten Werte von )βj
  2. Randbedingungen (dh auf die Größe der quadratischen Werte von )βj

α

αλλcv.glmnet

αλ

Teil 2

Q3

mn?glmnet

type.gaussian = "naive"

mn"naive"n

glmnet"naive"m>500

Q4

nlambdaα=0.5λλnlambda

Q5

lambda.minλλklambda.1seλlambda.minlambda.1seλk-fache CV-Schätzung des Fehlers des besten Modells.

Es ist deine Entscheidung:

  1. Das beste Modell, das zu komplex oder leicht überzogen sein könnte: lambda.min
  2. Das einfachste Modell, das angesichts der Unsicherheit einen mit dem besten Modell vergleichbaren Fehler aufweist: lambda.1se

Teil 3

Dies ist eine einfache Sache, auf die Sie mit R häufig stoßen predict()werden. In 99,9% der Fälle verwenden Sie die Funktion. R veranlasst die Verwendung der korrekten Funktion für das als erstes Argument angegebene Objekt.

Technisch gesehen predicthandelt es sich um eine generische Funktion, die Methoden (Versionen der Funktion) für Objekte unterschiedlichen Typs (technisch als Klassen bezeichnet ) enthält. Das von erstellte Objekt glmnetverfügt über eine bestimmte Klasse (oder Klassen), je nachdem, welcher Modelltyp tatsächlich angepasst ist. glmnet (das Paket) stellt Methoden für die predictFunktion für diese verschiedenen Objekttypen bereit . R kennt diese Methoden und wird die geeignete anhand der Klasse des gelieferten Objekts auswählen.

Setzen Sie Monica - G. Simpson wieder ein
quelle
2
TOLLE Antwort! Ich habe jetzt über Caret gelesen. Da die Beziehung zwischen caret und glmnet-Paket nicht 100% sicher ist, habe ich meine Frage überarbeitet, um die Zusammenführung dieser mit Paketen oder den Wechsel von glmnet zu caret zu klären.
PGreen
1
@PGreen: caretist ein R-Wrapper-Paket, das Funktionsschnittstellen von mehr als 100 ML-Paketen umschließt, um konsistenter zu sein, CVs, Gittersuche hinzufügt, verrückte Parameter-Standardeinstellungen usw. ändert.
smci
Ich möchte nur hinzufügen, dass Sie für das Alpha-Tuning cva.glmnet(..)anstelle von just auch cv.glmnet(...)alpha und lambda gleichzeitig tunen können. Dann können Sie laufen, um minlossplot(cva.fit)zu sehen, welches Alpha das beste Ergebnis liefert. Dies ist beides Teil von glmnetUtils
Espen Riskedal