Ridge regresyon sonuçları lm.ridge ve glmnet kullanımında farklıdır


11

R'de sırt regresyonu kullanarak regresyon modelinin en iyi değişken çözümünü bulmak için bazı veriler uyguladım lm.ridgeve kullandığımda glmnet(ne zaman alpha=0), ancak sonuçlar özellikle ne zaman çok farklı lambda=0. Her iki parametre tahmincisinin de aynı değerlere sahip olduğunu varsayar. Peki, buradaki problem nedir? Saygılarımla

Yanıtlar:


14

glmnet y değişkenini standartlaştırır ve kare hatalarının toplamı yerine ortalama kare hatalarını kullanır. Bu nedenle çıktılarına uygun ayarlamalar yapmanız gerekir.

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

Merhaba. Ridge Regresyon için hangi R paketini kullanmanız önerilir? glmnet, bigRR, Kütle, diğer? Bunlardan herhangi biri tekrarlanan ölçümlerle başa çıkabilir mi (rastgele etkiler)?
skan

Yeniden boyutlandırma sorunları ile açıklanamayan glmnet ve MASS lm.ridge çıktısı arasında bir tutarsızlık var. Ancak, lm.ridge bana el hesaplamasıyla çakışan sonucu verdi. Gelecekte zamanım varsa, tam örneği göndereceğim. Şimdi MASS ile gideceğim. Ayrıca, glmnet'in kendisi sonuçların lambda parametrelerini ayarlama şeklinize bağlı olduğu konusunda uyarır, bu glmnet'e karşı bir grev daha.
PA6OTA
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.