J'essaie de voir s'il faut opter pour la régression de crête , LASSO , la régression en composantes principales (PCR) ou les moindres carrés partiels (PLS) dans une situation où il y a un grand nombre de variables / caractéristiques ( ) et un plus petit nombre d'échantillons ( n < p ), et mon objectif est la prédiction.
Voici ma compréhension:
La régression de crête réduit les coefficients de régression, mais utilise tous les coefficients sans les mettre à .
LASSO réduit également les coefficients, mais les met également à , ce qui signifie qu'il peut également sélectionner des variables.
La régression du composant principal tronque les composants de sorte que devienne inférieur à n ; il supprimera les composants p - n .
Le moindre carré partiel construit également un ensemble de combinaisons linéaires des entrées pour la régression, mais contrairement à la PCR, il utilise (en plus de X ) pour la réduction de la dimensionnalité. La principale différence pratique entre la régression PCR et PLS est que la PCR a souvent besoin de plus de composants que PLS pour obtenir la même erreur de prédiction ( voir ici ).
Considérez les données factices suivantes (les données réelles avec lesquelles j'essaie de travailler sont similaires):
#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)
Mise en œuvre de quatre méthodes:
 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")
La meilleure description des données est:
, la plupart du temps p > 10 n ;
Les variables ( et Y ) sont corrélées entre elles à des degrés différents.
Ma question est quelle stratégie peut être la meilleure pour cette situation? Pourquoi?