R'de “glmnet” bir kesişmeye sığar mı?


10

R kullanarak doğrusal bir model uyduruyorum glmnet. Orijinal (düzenli olmayan) model kullanılarak takıldı lmve sabit bir terimi yoktu (yani formdaydı lm(y~0+x1+x2,data)).

glmnetbir tahminler matrisi ve bir cevaplar vektörü alır. glmnetBelgeleri okuyorum ve sürekli terimden bahsedemiyorum.

Öyleyse, glmnetdoğrusal uyumu başlangıç ​​noktasından zorlamayı istemenin bir yolu var mı?

Yanıtlar:


12

Evet, bir engelleme bir glmnet modeline dahil edilir , ancak düzenli değildir (bkz. Koordinat İnişiyle Genelleştirilmiş Doğrusal Modeller için Düzenleme Yolları , s. 13). Uygulama hakkında daha fazla ayrıntı, koda dikkatle bakarak (gaussian bir aile için, elnet()çağrılan işlevdir glmnet()) elde edilebilir, ancak Fortran'dadır.

Sen deneyebilirsiniz cezalandırılmış geçirerek yakalamayı silinmesini sağlar paketi unpenalized = ~0için penalized().

> x <- matrix(rnorm(100*20),100,20)
> y <- rnorm(100)
> fit1 <- penalized(y, penalized=x, unpenalized=~0, 
                    standardize=TRUE) 
> fit2 <- lm(y ~ 0+x)
> plot((coef(fit1) + coef(fit2))/2, coef(fit2)-coef(fit1))

Kement düzenlemesini almak için,

> fit1b <- penalized(y, penalized=x, unpenalized=~0, 
                     standardize=TRUE, lambda1=1, steps=20)
> show(fit1b)
> plotpath(fit1b)

Bir sonraki şekilde görülebileceği gibi, her iki yöntemle (sol) hesaplanan regresyon parametreleri arasında çok az fark vardır ve Kement yolu çözümünü çok kolay (sağ) çizebilirsiniz.

alternatif metin

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.