Regresja grzbietu powoduje różne użycie lm.ridge i glmnet

11

Zastosowałem trochę danych, aby znaleźć najlepsze rozwiązanie zmiennych modelu modelu regresji za pomocą regresji grzbietu w R. Użyłem lm.ridgei glmnet(kiedy alpha=0), ale wyniki są bardzo różne, szczególnie kiedy lambda=0. Załóżmy, że oba estymatory parametrów mają takie same wartości. Więc w czym jest problem? Z poważaniem

Zakaria Al-Jammal
źródło

Odpowiedzi:

14

glmnet standaryzuje zmienną y i używa średnich błędów kwadratu zamiast sumy błędów kwadratu. Musisz więc dokonać odpowiednich korekt w celu dopasowania ich wyników.

library(ElemStatLearn)
library(glmnet)
library(MASS)

dof2lambda <- function(d, dof) {
    obj <- function(lam, dof) (dof - sum(d ^ 2 / (d ^ 2 + lam))) ^ 2
    sapply(dof, function(x) optimize(obj, c(0, 1e4), x)$minimum)
}

lambda2dof <- function(d, lam) {
    obj <- function(dof, lam) (dof - sum(d ^ 2 / (d ^ 2 + lam))) ^ 2
    sapply(lam, function(x) optimize(obj, c(0, length(d)), x)$minimum)
}

dat   <- prostate
train <- subset(dat,  train, select = -train)
test  <- subset(dat, !train, select = -train)

train.x <- as.matrix(scale(subset(train, select = -lpsa)))
train.y <- as.matrix(scale(train$lpsa))

d   <- svd(train.x)$d
dof <- seq(1, 8, 0.1)
lam <- dof2lambda(d, dof)

ridge1 <- lm.ridge(train.y ~ train.x, lambda = lam)
ridge2 <- glmnet(train.x, train.y, alpha = 0, lambda = lam / nrow(train.x))

matplot(dof, t(ridge1$coef), type = 'l')
matplot(lambda2dof(d, ridge2$lambda * nrow(train.x)), t(ridge2$beta), type = 'l')

źródło
Dzień dobry. Jakiego pakietu R zaleca się używać do regresji Ridge? glmnet, bigRR, Mass, inne? Czy któryś z nich jest w stanie poradzić sobie z powtarzanymi pomiarami (efektami losowymi)?
skan
Mam pewną rozbieżność między danymi wyjściowymi glmnet i MASS lm.ridge, których nie można wyjaśnić problemami ze skalowaniem. Jednak lm.ridge dał mi wynik, który pokrywa się z obliczeniami ręcznymi. Jeśli będę miał czas w przyszłości, opublikuję pełny przykład. W tej chwili pójdę z MASĄ. Ponadto sam glmnet ostrzega, że ​​wyniki zależą od sposobu ustawienia parametrów lambda, to kolejne uderzenie w glmnet.
PA6OTA