Ich beginne mit der Verwendung von dabble glmnet
mit LASSO Regression , wo mein Ergebnis von Interesse dichotomous ist. Ich habe unten einen kleinen nachgebildeten Datenrahmen erstellt:
age <- c(4, 8, 7, 12, 6, 9, 10, 14, 7)
gender <- c(1, 0, 1, 1, 1, 0, 1, 0, 0)
bmi_p <- c(0.86, 0.45, 0.99, 0.84, 0.85, 0.67, 0.91, 0.29, 0.88)
m_edu <- c(0, 1, 1, 2, 2, 3, 2, 0, 1)
p_edu <- c(0, 2, 2, 2, 2, 3, 2, 0, 0)
f_color <- c("blue", "blue", "yellow", "red", "red", "yellow", "yellow",
"red", "yellow")
asthma <- c(1, 1, 0, 1, 0, 0, 0, 1, 1)
# df is a data frame for further use!
df <- data.frame(age, gender, bmi_p, m_edu, p_edu, f_color, asthma)
Die Spalten (Variablen) im obigen Datensatz lauten wie folgt:
age
(Alter des Kindes in Jahren) - kontinuierlichgender
- binär (1 = männlich; 0 = weiblich)bmi_p
(BMI-Perzentil) - kontinuierlichm_edu
(höchste Schulstufe der Mutter) - ordinär (0 = weniger als Gymnasium; 1 = Abitur; 2 = Bachelor-Abschluss; 3 = Abschluss nach dem Abitur)p_edu
(höchster Bildungsabschluss des Vaters) - ordinal (wie m_edu)f_color
(Lieblingsgrundfarbe) - nominal ("blau", "rot" oder "gelb")asthma
(Asthmastatus des Kindes) - binär (1 = Asthma; 0 = kein Asthma)
Das Ziel dieses Beispiels ist die Verwendung von LASSO zu machen , ein Modell der Vorhersage Kind Asthma - Status aus der Liste der sechs potentieller Einflussvariablen zu erstellen ( age
, gender
, bmi_p
, m_edu
, p_edu
, und f_color
). Natürlich ist die Stichprobengröße hier ein Problem, aber ich hoffe, mehr Einsicht in den Umgang mit den verschiedenen Arten von Variablen (dh kontinuierlich, ordinal, nominal und binär) innerhalb des glmnet
Frameworks zu erhalten, wenn das Ergebnis binär ist (1 = Asthma) ; 0 = kein Asthma).
Wäre jemand bereit, ein Beispielskript R
zusammen mit Erklärungen für dieses Beispiel bereitzustellen , in dem LASSO mit den oben genannten Daten zur Vorhersage des Asthmastatus verwendet wird? Obwohl sehr einfach, ich weiß, ich und wahrscheinlich viele andere im Lebenslauf, würde dies sehr schätzen!
quelle
dput
ein tatsächliches R-Objekt buchen. Lassen Sie die Leser nicht Zuckerguss darauf legen und backen Sie auch keinen Kuchen !. Wenn Sie den entsprechenden Datenrahmen in R generierenfoo
, bearbeiten Sie beispielsweise in der Frage die Ausgabe vondput(foo)
.glmnet
in Aktion mit einem binären Ergebnis sehen.Antworten:
Kategoriale Variablen werden normalerweise zuerst in Faktoren transformiert, dann wird eine Dummy-Variablenmatrix von Prädiktoren erstellt und zusammen mit den kontinuierlichen Prädiktoren an das Modell übergeben. Denken Sie daran, dass glmnet sowohl Ridge- als auch Lasso-Strafen verwendet, aber auch für sich alleine festgelegt werden kann.
Einige Ergebnisse:
Koeffizienten können aus dem glmmod extrahiert werden. Hier gezeigt mit 3 ausgewählten Variablen.
Schließlich kann auch eine Kreuzvalidierung verwendet werden, um Lambda auszuwählen.
quelle
f_color
Variablen umgeht? Wird Faktorstufe 1 bis 4 als eine größere Stufe angesehen als 1 bis 2, oder sind alle gleich gewichtet, ungerichtet und kategorisch? (Ich möchte es auf eine Analyse mit allen ungeordneten Prädiktoren anwenden.)xfactors <- model.matrix(asthma ~ gender + m_edu + p_edu + f_color)[,-1]
codiert die kategoriale Variable f_color (wieas.factor
in den vorherigen Zeilen deklariert ). Es sollte die standardmäßige R-Dummy-Variablencodierung verwendet werden, sofern dascontrasts.arg
Argument nicht angegeben wird. Dies bedeutet, dass alle Ebenen von f_color gleich gewichtet und ungerichtet sind, mit Ausnahme der ersten, die als Referenzklasse verwendet und in den Achsenabschnitt aufgenommen wird.model.matrix(asthma ~ gender + m_edu + p_edu + f_color + age + bmi_p)[, -1]
dasselbe Ergebnis liefern wie die beiden obigen Zeilen? Warum einen zusätzlichen Schritt verwenden, um die stetigen Variablen mit zu verkettendata.frame
?Ich werde das Paket enet verwenden, da dies meine bevorzugte Methode ist. Es ist etwas flexibler.
quelle
elasticnet
; Ich weiß jedoch nicht, was ich von der Ausgabe des obigenR
Skripts halten soll. Können Sie bitte klarstellen? Danke im Voraus!Nur um das hervorragende Beispiel von pat zu erweitern. Das ursprüngliche Problem stellte Ordinalvariablen (m_edu, p_edu) mit einer inhärenten Reihenfolge zwischen Ebenen (0 <1 <2 <3). In der ursprünglichen Antwort von pat denke ich, dass diese als nominale kategoriale Variablen ohne Reihenfolge zwischen ihnen behandelt wurden. Ich kann mich irren, aber ich glaube, diese Variablen sollten so codiert werden, dass das Modell ihre inhärente Reihenfolge respektiert. Wenn diese als geordnete Faktoren codiert sind (anstatt als ungeordnete Faktoren wie in Pat's Antwort), dann liefert glmnet leicht unterschiedliche Ergebnisse ... Ich denke, der folgende Code enthält die Ordinalvariablen korrekt als geordnete Faktoren und es liefert leicht unterschiedliche Ergebnisse:
quelle