Próbuję zobaczyć, czy wybrać regresję grzbietu , LASSO , regresję głównego składnika (PCR), czy częściowe najmniejsze kwadraty (PLS) w sytuacji, gdy istnieje duża liczba zmiennych / cech ( ) i mniejsza liczba próbek ( ), a moim celem jest przewidywanie.
To moje zrozumienie:
Regresja grzbietowa zmniejsza współczynniki regresji, ale wykorzystuje wszystkie współczynniki bez powodowania ich .
LASSO również zmniejsza współczynniki, ale także czyni je , co oznacza, że może również dokonywać wyboru zmiennych.
Regresja głównej składowej obcina składniki, tak że staje się mniejsze niż n ; odrzuci komponenty p - n .
Częściowy najmniejszy kwadrat konstruuje również zestaw liniowych kombinacji danych wejściowych do regresji, ale w przeciwieństwie do PCR wykorzystuje (oprócz X ) do zmniejszenia wymiarów. Główną praktyczną różnicą między regresją PCR i PLS jest to, że PCR często potrzebuje więcej składników niż PLS, aby osiągnąć ten sam błąd prognozowania ( patrz tutaj ).
Rozważ następujące dane pozorne (dane, z którymi próbuję pracować, są podobne):
#random population of 200 subjects with 1000 variables
M <- matrix(rep(0,200*100),200,1000)
for (i in 1:200) {
set.seed(i)
M[i,] <- ifelse(runif(1000)<0.5,-1,1)
}
rownames(M) <- 1:200
#random yvars
set.seed(1234)
u <- rnorm(1000)
g <- as.vector(crossprod(t(M),u))
h2 <- 0.5
set.seed(234)
y <- g + rnorm(200,mean=0,sd=sqrt((1-h2)/h2*var(g)))
myd <- data.frame(y=y, M)
Wdrożenie czterech metod:
require(glmnet)
# LASSO
fit1=glmnet(M,y, family="gaussian", alpha=1)
# Ridge
fit1=glmnet(M,y, family="gaussian", alpha=0)
# PLS
require(pls)
fit3 <- plsr(y ~ ., ncomp = 198, data = myd, validation = "LOO")
# taking 198 components and using leave-one-out cross validation
summary(fit3)
plot(RMSEP(fit3), legendpos = "topright")
# PCR
fit4 <- pcr(y ~ ., ncomp = 198, data = myd, validation = "LOO")
Najlepszy opis danych to:
, najczęściej p > 10 n ;
Zmienne ( i Y ) są skorelowane ze sobą w różnym stopniu.
Moje pytanie brzmi, która strategia może być najlepsza w tej sytuacji? Dlaczego?