2014-10-14 14 views
6

Zastanawiam się, czy istnieje sposób na wydrukowanie podsumowania regresji grzbietu w R? Jest to wynik funkcji lm.ridge{MASS}.Jak wykonać podsumowanie lm.ridge?

Dla standardowego modelu liniowego wystarczy wykonać summary(lm_model), ale co z modelem regresji grzbietowej? Dzięki za pomoc.

Odpowiedz

9

Właśnie dodałem metodę, która podsumowuje (a dokładniej: tidies) "ridgelm" obiekty do mojego pakietu broom. Ma to postać dwóch generałów S3: tidy i glance. Możesz zainstalować go pod numerem devtools::install_github("dgrtwo/broom") (chociaż musisz najpierw zainstalować devtools).

Jako przykład niech utworzenia regresji grzbiet:

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

Funkcja tidy dostarcza ramkę danych, przedstawia każdą kombinację lambda i ten termin:

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 

Chociaż glance Funkcja tworzy jednorzędowe podsumowanie, w szczególności opcje lambda różnymi metodami:

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

Jest to przydatne, ponieważ ułatwia działki i zbadać dane samodzielnie, zamiast polegania na ploterów Msza za:

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

Więcej informacji na temat tych metod , zobacz ?ridgelm_tidiers lub zobacz winiety pakietu, aby dowiedzieć się więcej o metodach tidy i glance.

+0

Zamiast skrótu Możesz użyć wbudowanej funkcji "wybierz" - działa tak samo. Funkcja ggplot działa tak samo jak zwykłe plot.lmridge (ale oczywiście wygląda bardziej pritty). –

+2

@MarcinKosinski: 'select' nie działa w ten sam sposób, ponieważ * wypisze * wybrane wartości zamiast zwracać je (więc nie ma możliwości ich zapisania, wyodrębnienia, połączenia lub dodania do wykresu, na przykład). 'plot.ridgelm' tworzy podobny wykres, ale warto zauważyć, że nie ma legendy ani sposobu wybierania kolorów. (Właściwie od kiedy 'plot.ridgelm' nie przekazuje swojego' ... 'do' matplot', masz ograniczoną możliwość dostosowania go w ogóle). –

+0

OK, rozumiem. Dzięki :) –

2

Nie ma summary metoda dla klasy ridgelm:

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

Co należy zwrócić niniejsze podsumowanie? Możesz wyodrębnić wszystkie potrzebne informacje z obiektu ridgelm.

Możesz jednak napisać własne metody podsumowujące dla swoich celów (najpierw sprawdź kod dla summary.lm()). Jeśli jesteś z niego zadowolony, możesz wysłać go do opiekunów MASS.

+0

Naprawdę myślisz, że będą dbać i publikować tę funkcję w swoim pakiecie? –

+1

Możesz otrzymać interesującą odpowiedź. Zasadniczo Prof. Ripley wprowadzi funkcje wsparcia, gdy uzna je za stosowne, więc mogą istnieć powody, dla których nie zrobił tego. –

+0

Nie dostaję cię –

1

możesz użyć mojego zestawu lmridge z CRAN.

+0

Byłbym wdzięczny, że przedłużam odpowiedź krótkim przypadkiem użycia i prawdopodobnie literaturą, do której mogę się odnieść! Z góry dziękuję. –

Powiązane problemy