Main Content

Esta página es para la versión anterior. La página correspondiente en inglés ha sido eliminada en la versión actual.

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

Este ejemplo muestra cómo aplicar la regresión parcial de mínimos cuadrados (PLSR) y la regresión de componentes principales (PCR), y describe la eficacia 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 tener en cuenta la variable de respuesta en absoluto. Por otro lado, PLSR tiene en cuenta la variable de respuesta y, por lo tanto, a menudo conduce a modelos que son capaces de ajustar la variable de respuesta con menos componentes. Si eso se traduce o no en última instancia en un modelo más parsimonioso, en términos de su uso práctico, depende del contexto.

Carga de los datos

Cargue un conjunto de datos que comprende intensidades espectrales de 60 muestras de gasolina a 401 longitudes de onda y sus clasificaciones de octanaje. Estos datos se describen en Kalivas, John H., "Two Data Sets of Near Infrared Spectra", Chemometrics and Intelligent Laboratory Systems, 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á para ajustar adecuadamente los datos, pero el diagnóstico de este ajuste se puede 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 en 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, probablemente sería aconsejable tener más cuidado a la hora de elegir el 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 .y Calcular los valores de respuesta ajustados 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 es realizar el análisis de componentes principales en , utilizando la función y conservando dos componentes principales.Xpca PcR es entonces sólo 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 que los resultados de la PCR sean más fáciles de interpretar en términos de los datos espectrales originales, transforme en coeficientes de regresión para las variables originales sin centro.

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

Trazado ajustado frente a respuesta observada para el PLSR y PCR ajuste.

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 gráfica anterior no es justa: el número de componentes (dos) fue elegido examinando lo bien que un modelo PLSR de dos componentes predijo la respuesta, y no hay ninguna razón por la que el modelo de ITP deba 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, mirando la dispersión horizontal de los valores ajustados en la gráfica anterior, pcR con dos componentes no es mejor que utilizar un modelo constante. Los valores r cuadrados 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 la potencia predictiva de los dos modelos es trazar la variable de respuesta con 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 interactivamente la figura, pero la gráfica PLSR arriba muestra puntos muy dispersos alrededor de 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 si bien los dos componentes PLS son mucho mejores predictores del observado, la siguiente figura muestra que explican algo menos de varianza en los componentes principales observados que los dos primeros componentes principales utilizados en el ITP.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 más alta sugiere por qué la PCR con dos componentes hace un trabajo tan pobre, en relación con PLSR, en el montaje .y PCR construye componentes para explicar mejor, y como resultado, esos dos primeros componentes ignoran la información de los datos que es importante para ajustar el .Xy

Montaje con más componentes

A medida que se agregan más componentes en PCR, necesariamente hará un mejor trabajo de ajuste de los datos originales, simplemente porque en algún momento la mayor parte de la información predictiva importante en estará presente en los componentes principales.yX Por ejemplo, la figura siguiente muestra que la diferencia de residuos para los dos métodos es mucho menos dramática cuando se utilizan 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 sigue 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 a un sobreajuste. Ajustar demasiado bien los datos actuales da como resultado un modelo que no generaliza bien a otros datos y proporciona una estimación demasiado optimista del error esperado.

La validación cruzada es un método más estadísticomente sólido 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 sesga de forma optimista hacia abajo.

tiene una opción para estimar el error de predicción al cuadrado medio (MSEP) mediante 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 PCR, combinado con una función simple para calcular la suma de errores al cuadrado para PCR, puede estimar el MSEP, de nuevo usando 10 veces la validación cruzada.crossval

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

La curva MSEP para PLSR indica que dos o tres componentes hacen un trabajo lo más bueno posible. Por otro lado, 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 de PCR el error de predicción del modelo, lo que sugiere que la combinación de variables predictoras contenidas en ese componente no está fuertemente correlacionada con .Aumentay Una vez más, eso es porque PCR construye componentes para explicar la variación en , no .Xy

Modelo Parsimony

Por lo tanto, si el PCR requiere cuatro componentes para obtener la misma precisión de predicción que PLSR con tres componentes, ¿es el modelo PLSR más parsimonioso? Eso depende del aspecto del modelo que considere.

Las ponderaciones PLS son las combinaciones lineales de las variables originales que definen los componentes PLS, es decir, describen la fuerza con la que cada componente del 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'); 

Del mismo modo, las cargas de PCA describen la fuerza con la que cada componente del 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 pondera 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 de un componente en particular eligen un pequeño número de esos compuestos. Desde esa perspectiva, menos componentes son más fáciles de interpretar, y debido a que PLSR a menudo requiere menos componentes para predecir la respuesta adecuadamente, conduce a modelos más parsimoniosos.

Por otro lado, PLSR y 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 de los dos 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 para hacer una predicción.

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

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