Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Regresión de mínimos cuadrados parciales y regresión de componentes principales

Este ejemplo muestra cómo aplicar la regresión de mínimos cuadrados parciales (PLSR) y la regresión de componentes principales (PCR), y discute la efectividad de los dos métodos. PLSR y PCR son ambos métodos para modelar una variable de respuesta cuando hay un gran número de variables predictoras, y esos predictores están altamente correlacionados o incluso colineales. Ambos métodos construyen nuevas variables predictoras, conocidas como componentes, como combinaciones lineales de las variables predictoras originales, pero construyen esos componentes de diferentes maneras. PCR crea componentes para explicar la variabilidad observada en las variables predictoras, sin considerar la variable de respuesta en absoluto. Por otro lado, PLSR toma en cuenta la variable de respuesta y, por lo tanto, a menudo conduce a modelos que pueden ajustarse a la variable de respuesta con menos componentes. El que se traduzca o no en un modelo más parsimonioso, en términos de uso práctico, depende del contexto.

La carga de datos

Cargue un conjunto de datos que comprenda intensidades espectrales de 60 muestras de gasolina a 401 longitudes de onda y su octanaje nominal. Estos datos se describen en Kalivas, John H., "dos conjuntos de datos de espectros infrarrojo cercano", Quimiometría y sistemas de laboratorio inteligentes, v. 37 (1997) pp. 255-259.

load spectra whos NIR octane 
  Name         Size              Bytes  Class     Attributes    NIR         60x401            192480  double                 octane      60x1                 480  double                
[dummy,h] = sort(octane); oldorder = get(gcf,'DefaultAxesColorOrder'); set(gcf,'DefaultAxesColorOrder',jet(60)); plot3(repmat(1:401,60,1)',repmat(octane(h),1,401)',NIR(h,:)'); set(gcf,'DefaultAxesColorOrder',oldorder); xlabel('Wavelength Index'); ylabel('Octane'); axis('tight'); grid on 

Ajuste de los datos con dos componentes

Utilice la función para ajustar un modelo PLSR con diez componentes PLS y una respuesta.plsregress

X = NIR; y = octane; [n,p] = size(X); [Xloadings,Yloadings,Xscores,Yscores,betaPLS10,PLSPctVar] = plsregress(...  X,y,10); 

Diez componentes pueden ser más de lo que se necesitarán para ajustar adecuadamente los datos, pero los diagnósticos de este ajuste se pueden utilizar para hacer una elección de un modelo más simple con menos componentes. Por ejemplo, una forma rápida de elegir el número de componentes es trazar el porcentaje de varianza explicado en la variable de respuesta como una función del número de componentes.

plot(1:10,cumsum(100*PLSPctVar(2,:)),'-bo'); xlabel('Number of PLS components'); ylabel('Percent Variance Explained in Y'); 

En la práctica, más cuidado probablemente sería aconsejable en la elección del número de componentes. La validación cruzada, por ejemplo, es un método ampliamente utilizado que se ilustrará más adelante en este ejemplo. Por ahora, la gráfica anterior sugiere que PLSR con dos componentes explica la mayor parte de la varianza en el observado.y Calcule los valores de respuesta ajustada para el modelo de dos componentes.

[Xloadings,Yloadings,Xscores,Yscores,betaPLS] = plsregress(X,y,2); yfitPLS = [ones(n,1) X]*betaPLS; 

A continuación, ajuste un modelo de PCR con dos componentes principales. El primer paso consiste en realizar el análisis de componentes principales, utilizando la función y conservando dos componentes principales.Xpca El PCR es entonces apenas una regresión lineal de la variable de respuesta en esos dos componentes. A menudo tiene sentido normalizar cada variable primero por su desviación estándar cuando las variables tienen cantidades muy diferentes de variabilidad, sin embargo, eso no se hace aquí.

[PCALoadings,PCAScores,PCAVar] = pca(X,'Economy',false); betaPCR = regress(y-mean(y), PCAScores(:,1:2)); 

Para facilitar la interpretación de los resultados de PCR en términos de los datos espectrales originales, transforme los coeficientes de regresión para las variables originales no centradas.

betaPCR = PCALoadings(:,1:2)*betaPCR; betaPCR = [mean(y) - mean(X)*betaPCR; betaPCR]; yfitPCR = [ones(n,1) X]*betaPCR; 

Parcela ajustada frente a respuesta observada para los ajustes PLSR y PCR.

plot(y,yfitPLS,'bo',y,yfitPCR,'r^'); xlabel('Observed Response'); ylabel('Fitted Response'); legend({'PLSR with 2 Components' 'PCR with 2 Components'},  ...  'location','NW'); 

En cierto sentido, la comparación en la trama anterior no es una justa--el número de componentes (dos) fue elegido al mirar qué tan bien un modelo PLSR de dos componentes predijo la respuesta, y no hay ninguna razón por la cual el modelo de PCR debe limitarse a ese mismo número de componentes s. Con el mismo número de componentes, sin embargo, PLSR hace un trabajo mucho mejor en el ajuste.y De hecho, al mirar la dispersión horizontal de los valores ajustados en la trama anterior, la PCR con dos componentes es apenas mejor que usar un modelo constante. Los valores r cuadrado de las dos regresiones lo confirman.

TSS = sum((y-mean(y)).^2); RSS_PLS = sum((y-yfitPLS).^2); rsquaredPLS = 1 - RSS_PLS/TSS 
 rsquaredPLS =      0.9466  
RSS_PCR = sum((y-yfitPCR).^2); rsquaredPCR = 1 - RSS_PCR/TSS 
 rsquaredPCR =      0.1962  

Otra forma de comparar el poder predictivo de los dos modelos es trazar la variable de respuesta contra los dos predictores en ambos casos.

plot3(Xscores(:,1),Xscores(:,2),y-mean(y),'bo'); legend('PLSR'); grid on; view(-30,30); 

Es un poco difícil de ver sin poder rotar la figura de forma interactiva, pero la gráfica PLSR de arriba muestra puntos muy dispersos sobre un plano. Por otro lado, la gráfica de PCR a continuación muestra una nube de puntos con poca indicación de una relación lineal.

plot3(PCAScores(:,1),PCAScores(:,2),y-mean(y),'r^'); legend('PCR'); grid on; view(-30,30); 

Observe que mientras que los dos componentes PLS son mucho mejores predictores de los observados, la siguiente figura muestra que explican algo menos varianza en los observados que los dos primeros componentes principales utilizados en el PCR.yX

plot(1:10,100*cumsum(PLSPctVar(1,:)),'b-o',1:10,  ...  100*cumsum(PCAVar(1:10))/sum(PCAVar(1:10)),'r-^'); xlabel('Number of Principal Components'); ylabel('Percent Variance Explained in X'); legend({'PLSR' 'PCR'},'location','SE'); 

El hecho de que la curva PCR sea uniformemente superior sugiere por qué la PCR con dos componentes hace un trabajo tan pobre, en relación con el PLSR, en el ajuste.y El PCR construye los componentes para explicar mejor, y como consecuencia, esos primeros dos componentes ignoran la información en los datos que es importante en ajustar el observado.Xy

Ajuste con más componentes

A medida que se añaden más componentes en el PCR, hará necesariamente un mejor trabajo de adaptación de los datos originales, simplemente porque en algún momento la mayor parte de la información predictiva importante estará presente en los componentes principales.yX Por ejemplo, la siguiente ilustración muestra que la diferencia en los residuales de los dos métodos es mucho menos dramática cuando se usan diez componentes que para dos componentes.

yfitPLS10 = [ones(n,1) X]*betaPLS10; betaPCR10 = regress(y-mean(y), PCAScores(:,1:10)); betaPCR10 = PCALoadings(:,1:10)*betaPCR10; betaPCR10 = [mean(y) - mean(X)*betaPCR10; betaPCR10]; yfitPCR10 = [ones(n,1) X]*betaPCR10; plot(y,yfitPLS10,'bo',y,yfitPCR10,'r^'); xlabel('Observed Response'); ylabel('Fitted Response'); legend({'PLSR with 10 components' 'PCR with 10 Components'},  ...  'location','NW'); 

Ambos modelos encajan con bastante precisión, aunque PLSR todavía hace un ajuste ligeramente más preciso.y Sin embargo, diez componentes siguen siendo un número elegido arbitrariamente para cualquiera de los modelos.

Elegir el número de componentes con validación cruzada

A menudo es útil elegir el número de componentes para minimizar el error esperado al predecir la respuesta de futuras observaciones sobre las variables predictoras. El simple uso de un gran número de componentes hará un buen trabajo en el ajuste de los datos observados actuales, pero es una estrategia que conduce al sobreajuste. Ajustar los datos actuales demasiado bien resulta en un modelo que no se generaliza bien a otros datos y proporciona una estimación excesivamente optimista del error esperado.

La validación cruzada es un método más sólido estadísticamente para elegir el número de componentes en PLSR o PCR. Evita el sobreajuste de datos al no reutilizar los mismos datos para ajustarse a un modelo y estimar el error de predicción. Por lo tanto, la estimación del error de predicción no se inclina de forma optimista hacia abajo.

tiene una opción para estimar el error de predicción cuadrada media (MSEP) mediante la validación cruzada, en este caso utilizando 10 veces C-V.plsregress

[Xl,Yl,Xs,Ys,beta,pctVar,PLSmsep] = plsregress(X,y,10,'CV',10); 

Para el PCR, combinado con una función simple para computar la suma de los errores cuadrados para el PCR, puede estimar el MSEP, otra vez usando la validación cruzada 10-Fold.crossval

PCRmsep = sum(crossval(@pcrsse,X,y,'KFold',10),1) / n; 

La curva MSEP para PLSR indica que dos o tres componentes hace el mejor trabajo posible. Por otro lado, la PCR necesita cuatro componentes para obtener la misma precisión de predicción.

plot(0:10,PLSmsep(2,:),'b-o',0:10,PCRmsep,'r-^'); xlabel('Number of components'); ylabel('Estimated Mean Squared Prediction Error'); legend({'PLSR' 'PCR'},'location','NE'); 

De hecho, el segundo componente en PCR el error de predicción del modelo, sugiriendo que la combinación de variables predictoras contenidas en ese componente no está fuertemente correlacionada con.increasesy Una vez más, eso es porque el PCR construye los componentes para explicar la variación adentro, no.Xy

Modelo parsimony

Así que si PCR requiere cuatro componentes para obtener la misma precisión de predicción que PLSR con tres componentes, ¿es el modelo PLSR más parsimonious? Eso depende de qué aspecto del modelo considere.

Las ponderaciones PLS son las combinaciones lineales de las variables originales que definen los componentes PLS, es decir, describen cómo fuertemente cada componente en el PLSR depende de las variables originales, y en qué dirección.

[Xl,Yl,Xs,Ys,beta,pctVar,mse,stats] = plsregress(X,y,3); plot(1:401,stats.W,'-'); xlabel('Variable'); ylabel('PLS Weight'); legend({'1st Component' '2nd Component' '3rd Component'},  ...  'location','NW'); 

Semejantemente, las cargas PCA describen cuán fuertemente cada componente en el PCR depende de las variables originales.

plot(1:401,PCALoadings(:,1:4),'-'); xlabel('Variable'); ylabel('PCA Loading'); legend({'1st Component' '2nd Component' '3rd Component'  ...  '4th Component'},'location','NW'); 

Para PLSR o PCR, puede ser que a cada componente se le pueda dar una interpretación físicamente significativa inspeccionando qué variables pesa más fuertemente. Por ejemplo, con estos datos espectrales puede ser posible interpretar picos de intensidad en términos de compuestos presentes en la gasolina, y luego observar que los pesos para un componente particular recogen un pequeño número de esos compuestos. Desde esa perspectiva, menos componentes son más fáciles de interpretar, y dado que PLSR a menudo requiere menos componentes para predecir la respuesta adecuadamente, conduce a más modelos parsimoniosos.

Por otro lado, tanto PLSR como PCR dan como resultado un coeficiente de regresión para cada una de las variables predictoras originales, más una intercepción. En ese sentido, ninguno es más parsimonioso, porque independientemente de cuántos componentes se utilizan, ambos modelos dependen de todos los predictores. Más concretamente, para estos datos, ambos modelos necesitan 401 valores de intensidad espectral con el fin de hacer una predicción.

Sin embargo, el objetivo final puede reducir el conjunto original de variables a un subconjunto más pequeño que aún pueda predecir la respuesta con precisión. Por ejemplo, puede ser posible utilizar las ponderaciones PLS o las cargas PCA para seleccionar sólo aquellas variables que contribuyen más a cada componente. Como se mostró anteriormente, algunos componentes de un modelo de PCR Fit pueden servir principalmente para describir la variación en las variables predictoras, y pueden incluir grandes pesos para las variables que no están fuertemente correlacionadas con la respuesta. Por lo tanto, el PCR puede llevar a retener las variables que son innecesarias para la predicción.

Para los datos usados en este ejemplo, la diferencia en el número de componentes necesarios por el PLSR y el PCR para la predicción exacta no es grande, y los pesos PLS y las cargas PCA parecen elegir las mismas variables. Esto puede no ser cierto para otros datos.