2014-10-14 36 views
6

Mi chiedo se esista un modo per generare un riepilogo per la regressione della cresta in R? È il risultato della funzione lm.ridge{MASS}.Come eseguire il riepilogo lm.ridge?

Per il modello lineare standard basta fare summary(lm_model) ma per quanto riguarda il modello di regressione cresta? Grazie per l'aiuto.

risposta

9

Ho appena aggiunto un metodo che riepiloga (o più precisamente, tidies) "ridgelm" oggetti nel mio pacchetto broom. Questo ha la forma di due generici S3: tidy e glance. Puoi installarlo con devtools::install_github("dgrtwo/broom") (anche se dovrai prima installare devtools).

Come esempio, regoliamo una regressione cresta:

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

La funzione tidy fornisce un frame di dati che mostra ciascuna combinazione di lambda e la durata stimata:

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 

Mentre il glance funzione crea un riepilogo di una riga, in particolare le scelte di lambda con vari metodi:

g <- glance(fit) 
g 
##  kHKB  kLW lambdaGCV 
## 1 0.006837 0.05267  0.006 
.515.053.691,36321 milioni

Questo è utile perché rende facile tracciare ed esplorare i dati da soli, piuttosto che basarsi su plotter di Massa:

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

Per ulteriori informazioni su questi metodi , vedere ?ridgelm_tidiers oppure vedere le vignette del pacchetto per ulteriori informazioni sui metodi tidy e glance in generale.

+0

Invece di colpo d'occhio Puoi usare la funzione integrata 'seleziona' - funziona allo stesso modo. La funzione ggplot funziona allo stesso modo di plot.lmridge normale (ma ovviamente sembra più pritty). –

+2

@MarcinKosinski: 'select' non funziona allo stesso modo perché * stampa * i valori selezionati invece di restituirli (quindi non c'è modo di salvarli, estrarli, combinarli o aggiungerli a un grafico, ad esempio). 'plot.ridgelm' produce un grafico simile, ma vale la pena notare che non ha una legenda o un modo per scegliere i colori. (In realtà poiché 'plot.ridgelm' non passa lungo il suo' ... 'in' matplot', hai una capacità limitata di personalizzarlo del tutto). –

+0

Ok ho capito. Grazie :) –

2

Non esiste un metodo per la classe summaryridgelm:

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

Cosa deve restituire questa sintesi? È possibile estrarre tutte le informazioni necessarie dall'oggetto ridgelm.

Tuttavia, è anche possibile scrivere i propri metodi di riepilogo per i propri scopi (controllare il codice per summary.lm() per un inizio). Se sei soddisfatto, puoi inviarlo ai manutentori di MASS.

+0

Pensi davvero che gli importerebbero e pubblicheranno questa funzione nel loro pacchetto? –

+1

Si potrebbe ottenere una risposta interessante. Generalmente il Prof Ripley metterà delle funzioni di supporto quando lo riterrà opportuno, quindi potrebbero esserci delle ragioni che non lo ha fatto. –

+0

Non ti capisco –

1

è possibile utilizzare il mio pacchetto lmridge da CRAN.

+0

Gradirei estendere la risposta con un caso d'uso breve e probabilmente la letteratura a cui posso riferirmi! Grazie in anticipo. –