2014-10-14 9 views
6

Ich frage mich, gibt es eine Möglichkeit, Zusammenfassung für Ridge-Regression in R auszugeben? Es ist ein Ergebnis der lm.ridge{MASS} Funktion.Wie führe ich lm.ridge summary aus?

Für Standard-lineares Modell tun Sie einfach summary(lm_model), aber was ist mit Ridge-Regressionsmodell? Danke für Hilfe.

Antwort

9

Ich habe gerade eine Methode hinzugefügt, die (tidies) "ridgelm" Objekte zu meinem broom Paket zusammenfasst. Dies erfolgt in Form von zwei S3-Generika: tidy und glance. Sie können es mit devtools::install_github("dgrtwo/broom") installieren (obwohl Sie zuerst devtools installieren müssen).

Als Beispiel wollen wir einen Ridge-Regression ein:

library(MASS) 
names(longley)[1] <- "y" 
fit <- lm.ridge(y ~ ., longley, lambda = seq(0.001, .05, .001)) 

Die tidy Funktion einen Datenrahmen bereitstellt, die jede Kombination von Lambda zeigt und die geschätzte Laufzeit:

library(broom) 
td <- tidy(fit) 
head(td) 
## lambda GCV term estimate 
## 1 0.001 0.1240 GNP 23.02 
## 2 0.002 0.1217 GNP 21.27 
## 3 0.003 0.1205 GNP 19.88 
## 4 0.004 0.1199 GNP 18.75 
## 5 0.005 0.1196 GNP 17.80 
## 6 0.006 0.1196 GNP 16.99 

Während die glance Funktion erstellt eine einreihige Zusammenfassung, insbesondere die Auswahl von Lambda nach verschiedenen Methoden:

g <- glance(fit) 
g 
##  kHKB  kLW lambdaGCV 
## 1 0.006837 0.05267  0.006 

Dies ist nützlich, weil es macht es einfach, sich die Daten zu zeichnen und zu erforschen, anstatt Plotter auf MASS der Berufung:

library(ggplot2) 
ggplot(td, aes(lambda, estimate, color = term)) + geom_line() 

enter image description here

# plot of GCV versus lambda 
ggplot(td, aes(lambda, GCV)) + geom_line() + 
    geom_vline(xintercept = g$lambdaGCV, col = "red", lty = 2) 

enter image description here

Weitere Informationen zu diesen Methoden Siehe ?ridgelm_tidiers, oder sehen Sie sich die Vignetten des Pakets an, um mehr über die Methoden tidy und glance zu erfahren.

+0

Statt Blick Sie können eingebaute Funktion 'wählen' - es funktioniert das gleiche. Die ggplot-Funktion funktioniert genauso wie die normale plot.lmridge (sieht aber natürlich prachtvoller aus). –

+2

@MarcinKosinski: 'select' funktioniert nicht auf die gleiche Weise, weil * die ausgewählten Werte gedruckt werden, anstatt sie zurückzugeben (also gibt es keine Möglichkeit, sie zu speichern, zu extrahieren, zu kombinieren oder zu einem Diagramm hinzuzufügen, zum Beispiel)). 'plot.rigelm' erzeugt eine ähnliche Grafik, aber es ist erwähnenswert, dass es keine Legende oder eine Möglichkeit zur Auswahl der Farben gibt. (Da die 'plot.rigelm' nicht ihre' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' weitergibt, haben Sie nur begrenzte Möglichkeiten, sie anzupassen. –

+0

Ok, ich verstehe es. Danke :) –

2

Es gibt keine summary Methode zur ridgelm Klasse:

> methods(class = 'ridgelm') 
[1] coef.ridgelm* plot.ridgelm* print.ridgelm* select.ridgelm* 

Was soll diese Zusammenfassung zurückkehren? Sie können alle benötigten Informationen aus dem Ridgelm-Objekt extrahieren.

Sie könnten jedoch auch eigene Zusammenfassungsmethoden für Ihre Zwecke schreiben (prüfen Sie zunächst den Code für summary.lm()). Wenn Sie damit zufrieden sind, können Sie es an die Betreuer von MASS senden.

+0

Sie denken wirklich, dass sie diese Funktion in ihrem Paket interessieren und veröffentlichen würden? –

+1

Sie könnten eine interessante Antwort erhalten. Im Allgemeinen wird Prof Ripley Unterstützungsfunktionen einbauen, wenn er sie für angemessen hält, daher kann es Gründe dafür geben, dass er dies nicht getan hat. –

+0

Ich bekomme Sie nicht –

1

können Sie mein lmridge Paket von CRAN verwenden.

+0

Ich würde mich freuen, die Antwort mit einem kurzen Anwendungsfall und wahrscheinlich der Literatur zu erweitern, auf die ich mich beziehen kann! Danke im Voraus. –