29 votos

¿Cómo utilizar los resultados de R prcomp para la predicción?

Tengo un data.frame con 800 obs. de 40 variables, y me gustaría utilizar el Análisis de Componentes Principales para mejorar los resultados de mi predicción (que hasta ahora está funcionando mejor con Support Vector Machine en unas 15 variables elegidas a mano).

Entiendo que un prcomp puede ayudarme a mejorar mis predicciones, pero no sé cómo utilizar los resultados de la función prcomp.

Obtengo el resultado:

> PCAAnalysis <- prcomp(TrainTrainingData, scale.=TRUE)
> summary(PCAAnalysis)
Importance of components:
                          PC1    PC2    PC3    PC4    PC5   PC6    PC7    PC8    PC9   PC10   PC11   PC12   PC13   PC14
Standard deviation     1.7231 1.5802 1.3358 1.2542 1.1899 1.166 1.1249 1.1082 1.0888 1.0863 1.0805 1.0679 1.0568 1.0520
Proportion of Variance 0.0742 0.0624 0.0446 0.0393 0.0354 0.034 0.0316 0.0307 0.0296 0.0295 0.0292 0.0285 0.0279 0.0277
Cumulative Proportion  0.0742 0.1367 0.1813 0.2206 0.2560 0.290 0.3216 0.3523 0.3820 0.4115 0.4407 0.4692 0.4971 0.5248
                         PC15   PC16   PC17   PC18  PC19   PC20   PC21   PC22   PC23   PC24   PC25   PC26   PC27   PC28
Standard deviation     1.0419 1.0283 1.0170 1.0071 1.001 0.9923 0.9819 0.9691 0.9635 0.9451 0.9427 0.9238 0.9111 0.9073
Proportion of Variance 0.0271 0.0264 0.0259 0.0254 0.025 0.0246 0.0241 0.0235 0.0232 0.0223 0.0222 0.0213 0.0208 0.0206
Cumulative Proportion  0.5519 0.5783 0.6042 0.6296 0.655 0.6792 0.7033 0.7268 0.7500 0.7723 0.7945 0.8159 0.8366 0.8572
                         PC29   PC30   PC31   PC32   PC33   PC34   PC35   PC36    PC37                 PC38
Standard deviation     0.8961 0.8825 0.8759 0.8617 0.8325 0.7643 0.7238 0.6704 0.60846 0.000000000000000765
Proportion of Variance 0.0201 0.0195 0.0192 0.0186 0.0173 0.0146 0.0131 0.0112 0.00926 0.000000000000000000
Cumulative Proportion  0.8773 0.8967 0.9159 0.9345 0.9518 0.9664 0.9795 0.9907 1.00000 1.000000000000000000
                                       PC39                 PC40
Standard deviation     0.000000000000000223 0.000000000000000223
Proportion of Variance 0.000000000000000000 0.000000000000000000
Cumulative Proportion  1.000000000000000000 1.000000000000000000

Pensé que obtendría los parámetros más importantes para utilizar, pero no encuentro esta información. Todo lo que veo es la desviación estándar, etc. en los PC. Pero, ¿cómo puedo utilizar esto para la predicción?

40voto

Jake Puntos 3853

Aunque no estoy seguro de la naturaleza de su problema, puedo decirle que he utilizado el ACP como medio para extraer patrones dominantes en un grupo de variables predictoras en la posterior construcción de un modelo. En su ejemplo, éstos se encontrarían en los componentes principales (PC), PCAAnalysis$x y se basarían en la ponderación de las variables que se encuentran en PCAAnalysis$rotation . Una de las ventajas de este proceso es que las PC son ortogonales, por lo que se eliminan los problemas de multicolinealidad entre los predictores del modelo. La segunda, es que puede ser capaz de identificar un subconjunto más pequeño de PCs que capturan la mayoría de la varianza en sus predictores. Esta información puede encontrarse en summary(PCAAnalysis) o en PCAAnalysis$sdev . Por último, si está interesado en utilizar un subconjunto de los PC para la predicción, puede establecer la opción tol parámetro en prcomp a un nivel superior para eliminar los PCs de arrastre.

Ahora, puede "proyectar" los nuevos datos en la base de coordenadas del PCA utilizando el predict.prcomp() función. Dado que está llamando a su conjunto de datos un conjunto de datos de "entrenamiento", esto podría tener sentido para luego proyectar un conjunto de datos de validación en su base PCA para el cálculo de sus respectivas coordenadas PC. A continuación se muestra un ejemplo de ajuste de un PCA a 4 mediciones biométricas de diferentes especies de iris (que están correlacionadas hasta cierto punto). A continuación, proyecto los valores biométricos de un nuevo conjunto de datos de flores que tienen combinaciones similares de estas medidas para cada una de las tres especies de iris. En el gráfico final se observa que sus PC proyectados se encuentran en una zona del gráfico similar a la del conjunto de datos original.

Un ejemplo que utiliza el iris conjunto de datos:

### pca - calculated for the first 4 columns of the data set that correspond to biometric measurements ("Sepal.Length" "Sepal.Width"  "Petal.Length" "Petal.Width")
data(iris)

# split data into 2 parts for pca training (75%) and prediction (25%)
set.seed(1)
samp <- sample(nrow(iris), nrow(iris)*0.75)
iris.train <- iris[samp,]
iris.valid <- iris[-samp,]

# conduct PCA on training dataset
pca <- prcomp(iris.train[,1:4], retx=TRUE, center=TRUE, scale=TRUE)
expl.var <- round(pca$sdev^2/sum(pca$sdev^2)*100) # percent explained variance

# prediction of PCs for validation dataset
pred <- predict(pca, newdata=iris.valid[,1:4])

###Plot result
COLOR <- c(2:4)
PCH <- c(1,16)

pc <- c(1,2) # principal components to plot

png("pca_pred.png", units="in", width=5, height=4, res=200)
op <- par(mar=c(4,4,1,1), ps=10)
plot(pca$x[,pc], col=COLOR[iris.train$Species], cex=PCH[1], 
 xlab=paste0("PC ", pc[1], " (", expl.var[pc[1]], "%)"), 
 ylab=paste0("PC ", pc[2], " (", expl.var[pc[2]], "%)")
)
points(pred[,pc], col=COLOR[iris.valid$Species], pch=PCH[2])
legend("topright", legend=levels(iris$Species), fill = COLOR, border=COLOR)
legend("topleft", legend=c("training data", "validation data"), col=1, pch=PCH)
par(op)
dev.off()

enter image description here

12voto

Abijeet Patro Puntos 108

La información del comando summary() que ha adjuntado a la pregunta permite ver, por ejemplo, la proporción de la varianza que capta cada componente principal (Proporción de la varianza). Además, se calcula la proporción acumulada a la salida. Por ejemplo, necesita tener 23 PC para capturar el 75% de la varianza de su conjunto de datos.

Desde luego, no es la información que se suele utilizar como entrada para los análisis posteriores. Más bien, lo que suele necesitar son los datos rotados, que se guardan como 'x' en el objeto creado por prcomp.

Utilizando el código R como un ejemplo corto.

pr<-prcomp(USArrests, scale = TRUE)
summary(pr) # two PCs for cumulative proportion of >80% 
newdat<-pr$x[,1:2]

A continuación, puede utilizar los datos en el newdat para otros análisis, por ejemplo, como entrada para SVM o algún modelo de regresión. Véase también, por ejemplo https://stackoverflow.com/questions/1805149/how-to-fit-a-linear-regression-model-with-two-principal-components-in-r para más información.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X