La regressione della cresta risulta diversa nell'uso di lm.ridge e glmnet


11

Ho applicato alcuni dati per trovare la migliore soluzione di variabili del modello di regressione usando la regressione della cresta in R. Ho usato lm.ridgee glmnet(quando alpha=0), ma i risultati sono molto diversi soprattutto quando lambda=0. Supponiamo che entrambi gli stimatori dei parametri abbiano gli stessi valori. Quindi, qual è il problema qui? i migliori saluti

Risposte:


14

glmnet standardizza la variabile y e utilizza gli errori al quadrato medio invece della somma degli errori al quadrato. Quindi è necessario apportare le modifiche appropriate per abbinare i loro risultati.

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')

Ciao. Quale pacchetto R consigliate di utilizzare per la regressione della cresta? glmnet, bigRR, Mass, altro? Qualcuno di loro è in grado di gestire misure ripetute (effetti casuali)?
skan

Ho qualche discrepanza tra l'output lm.ridge di glmnet e MASS che non può essere spiegato con problemi di riscalamento. Tuttavia, lm.ridge mi ha dato il risultato che coincide con il calcolo della mano. Se avrò tempo in futuro, posterò l'esempio completo. In questo momento, andrò con MASS. Inoltre, glmnet stesso avverte che i risultati dipendono dal modo in cui si impostano i parametri lambda, questo è un altro avvertimento contro glmnet.
PA6OTA,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.