Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ---
- title: "R Notebook"
- output: html_notebook
- ---
- # Problemas de práctica para PCA con respuestas parciales
- 1. El propósito de este problema es examinar el efecto que tienen diferentes correlaciones en el resultado del `PDA`. Para hacerlo más fácil, suponga que `X` tiene una distribucion normal bivariante con $\mu=(0,0)',\sigma_{11}=1$ y $\sigma_{22}=1$. Para $\sigma_{12}=-0.99,-0.9,-0.5,0,0.5,0.9,0.99$ (recuerde que $\sigma_{12}=\rho_{21}$ porque las varianzas son iguales a 1), complete lo siguiente:
- a. Simule `1000` observaciones de la normal bivariante donde se establece un número de semilla de `8128` justo antes de cada simulación de datos.
- Examine parte de este problema empleando solo $\rho_{12}=0.99$
- ```{r}
- suppressWarnings(library(mvtnorm))
- #Parámetros para una distribución normal bivariante
- mu99=c(0,0)
- rho1299=0.99
- sigma99=matrix(data=c(1,rho1299,rho1299,1),nrow=2,byrow=TRUE) #Matriz de covarianzas
- (P99= cov2cor(V=sigma99))
- N99=1000
- set.seed(8128)
- X99=rmvnorm(N99,mu99,sigma99)
- head(X99)
- ```
- b. Utilice `princomp()` con `cor=TRUE` para encontrar los valores propios y vectores propios estimados a partir de la matriz de correlación.
- ```{r}
- pca.save99=princomp(x=X99,cor=TRUE,scores=FALSE)
- summary(pca.save99,loadings=TRUE,cutoff=0.0)
- ```
- c. Interprete las componentes principales.
- Podemos apreciar que las variables $Z_1$ y $Z_2$ contribuyen por igual a las dos componentes principales. Sin embargo, por lo resultados obtenidos notamos que la primera componente principal tiene mucha más variabilidad que la segunda, y siendo $Y_1$ la que acumule la mayor proporción de variabilidad con un 99.5%.
- Además, las cargas representan que las variables están fuertemente correlacionadas, en el caso de $Y_{1}$, positivamente, y en $Y_{2}$ de forma negativa.
- Se hará lo mismo para los demás valores de $\rho_{1,2}$. Para $\rho_{1,2}=0.9$:
- ```{r,echo=F}
- #Parámetros para una distribución normal bivariante
- mu9=c(0,0)
- rho129=0.9
- sigma9=matrix(data=c(1,rho129,rho129,1),nrow=2,byrow=TRUE) #Matriz de covarianzas
- P9= cov2cor(V=sigma9)
- N9=1000
- set.seed(8128)
- X9=rmvnorm(N9,mu9,sigma9)
- pca.save9=princomp(x=X9,cor=TRUE,scores=FALSE)
- summary(pca.save9,loadings=TRUE,cutoff=0.0)
- ```
- De misma forma que con $\rho_{12}=0.99$, la primera componente acumula una gran cantidad de varianza, sin embargo, es ligeramente menor.
- Salvo ese detalle, las componentes principales son idénticas, por lo que vuelve a haber fuerte correlación positiva entre las variables en la primera y fuerte correlación negativa en la segunda.
- Para $\rho_{12}=0.5$
- ```{r,echo=F}
- #Parámetros para una distribución normal bivariante
- mu5=c(0,0)
- rho125=0.5
- sigma5=matrix(data=c(1,rho125,rho125,1),nrow=2,byrow=TRUE) #Matriz de covarianzas
- P5= cov2cor(V=sigma5)
- N5=1000
- set.seed(8128)
- X5=rmvnorm(N5,mu5,sigma5)
- pca.save5=princomp(x=X5,cor=TRUE,scores=FALSE)
- summary(pca.save5,loadings=TRUE,cutoff=0.0)
- ```
- Vemos que la varianza explicada por la primera componente ha disminuido notoriamente, sin embargo, aún puede considerarse suficiente.
- Por lo demás, las componentes no han cambiado, por lo que su interpretación su mantiene.
- Para $\rho_{12}=0$:
- ```{r,echo=F}
- #Parámetros para una distribución normal bivariante
- mu0=c(0,0)
- rho120=0
- sigma0=matrix(data=c(1,rho120,rho120,1),nrow=2,byrow=TRUE) #Matriz de covarianzas
- P0= cov2cor(V=sigma0)
- N0=1000
- set.seed(8128)
- X0=rmvnorm(N0,mu0,sigma0)
- pca.save0=princomp(x=X0,cor=TRUE,scores=FALSE)
- summary(pca.save0,loadings=TRUE,cutoff=0.0)
- ```
- Ahora cada componente explica una cantidad de varianza similar, y, en un análisis, sería importante considerarlas a ambas. Vemos además que la correlación se ha invertido, guardando la primera una fuerte correlación negativa y la segunda una fuerte correlación positiva.
- Para $\rho_{12}=-0.5$:
- ```{r,echo=F}
- #Parámetros para una distribución normal bivariante
- mun5=c(0,0)
- rho12n5=-0.5
- sigman5=matrix(data=c(1,rho12n5,rho12n5,1),nrow=2,byrow=TRUE) #Matriz de covarianzas
- Pn5= cov2cor(V=sigman5)
- Nn5=1000
- set.seed(8128)
- Xn5=rmvnorm(Nn5,mun5,sigman5)
- pca.saven5=princomp(x=Xn5,cor=TRUE,scores=FALSE)
- summary(pca.saven5,loadings=TRUE,cutoff=0.0)
- ```
- Observamos que, nuevamente, la primera componente principal explica una cantidad de varianza importante, con el único cambio de guardar una fuerte correlación negativa entre las variables. La segunda componente mantiene la interpretación dada con $\rho_{12}=0$, pero con menor varianza explicada.
- Para $\rho_{12}=-0.9$:
- ```{r,echo=F}
- #Parámetros para una distribución normal bivariante
- mun9=c(0,0)
- rho12n9=-0.9
- sigman9=matrix(data=c(1,rho12n9,rho12n9,1),nrow=2,byrow=TRUE) #Matriz de covarianzas
- Pn9= cov2cor(V=sigman9)
- Nn9=1000
- set.seed(8128)
- Xn9=rmvnorm(Nn9,mun9,sigman9)
- pca.saven9=princomp(x=Xn9,cor=TRUE,scores=FALSE)
- summary(pca.saven9,loadings=TRUE,cutoff=0.0)
- ```
- La primera componente vuelve a explicar mucho la varianza, al igual que con $\rho_{12}=0.9$. Solo ha cambiado la correlación entre las variables para ella, siendo, de nuevo, fuertemente negativa. La segunda componente tiene la misma interpretación que con el $\rho_{12}$ anterior.
- Para $\rho_{12}=-0.99$:
- ```{r,echo=F}
- #Parámetros para una distribución normal bivariante
- mun99=c(0,0)
- rho12n99=-0.99
- sigman99=matrix(data=c(1,rho12n99,rho12n99,1),nrow=2,byrow=TRUE) #Matriz de covarianzas
- Pn99= cov2cor(V=sigman9)
- Nn99=1000
- set.seed(8128)
- Xn99=rmvnorm(Nn99,mun99,sigman99)
- pca.saven99=princomp(x=Xn99,cor=TRUE,scores=FALSE)
- summary(pca.saven99,loadings=TRUE,cutoff=0.0)
- ```
- Similar a $\rho_{12}=0.99$, la varianza explicada por la primera componente es la misma. El único cambio es, de nuevo, la correlación, que es idéntica a las de $\rho_{12}=-0.9$.
- d. ¿Cuántas PC son necesarias?
- Solo una: ¡asegúrese de comprender por qué esto tendría sentido en el contexto de PCA!
- Es necesario solo una en los casos en que $\rho_{12}\neq 0$, pues la primera componente explica una buena cantidad de varianza.
- En el caso de $\rho_{12}=0$, ambas componentes son necesarias para explicar una cantidad de varianza.
- e. Cree diagramas de dispresión separados de los datos y las puntuaciones de PC, pero utilice un conjunto de límites generales para los ejes X y Y. Describe la relación entre estos gráficos para cada $\rho_{12}$.
- Para $\rho_{12}=0.99$:
- ```{r}
- pca.save99$scale=apply(X=X99,MARGIN=2,FUN=sd)
- score.save99=predict(pca.save99,newdata=X99)
- head(score.save99)
- #dev.new(width=12)
- par(mfrow=c(1,2)) #una fila dos columnas
- par(pty="s")
- common.limits99=c(min(score.save99,X99),max(score.save99,X99))
- plot(x=X99[,1],y=X99[,2],xlab=expression(x[1]),ylab=expression(x[2]),main="Datos Originales",xlim=common.limits99,ylim=common.limits99,panel.first=grid(col="lightgreen"))
- abline(h=0)
- abline(v=0)
- plot(x=score.save99[,1],y=score.save99[,2],xlab="PC #1",ylab="PC #2",main="Componentes Principales",xlim=common.limits99,ylim=common.limits99,panel.first=grid(col="lightgreen"))
- abline(h=0)
- abline(v=0)
- ```
- ¡Parece que los ejes `X` y `Y` se han rotado para que toda la variabilidad de los datos esté representada en una sola dimensión!
- Para $\rho_{12}=0.9$:
- ```{r,echo=F}
- pca.save9$scale=apply(X=X9,MARGIN=2,FUN=sd)
- score.save9=predict(pca.save9,newdata=X9)
- head(score.save9)
- #dev.new(width=12)
- par(mfrow=c(1,2)) #una fila dos columnas
- par(pty="s")
- common.limits9=c(min(score.save9,X9),max(score.save9,X9))
- plot(x=X9[,1],y=X9[,2],xlab=expression(x[1]),ylab=expression(x[2]),main="Datos Originales",xlim=common.limits9,ylim=common.limits9,panel.first=grid(col="lightgreen"))
- abline(h=0)
- abline(v=0)
- plot(x=score.save9[,1],y=score.save9[,2],xlab="PC #1",ylab="PC #2",main="Componentes Principales",xlim=common.limits9,ylim=common.limits9,panel.first=grid(col="lightgreen"))
- abline(h=0)
- abline(v=0)
- ```
- Para $\rho_{12}=0.5$:
- ```{r,echo=F}
- pca.save5$scale=apply(X=X5,MARGIN=2,FUN=sd)
- score.save5=predict(pca.save5,newdata=X5)
- head(score.save5)
- #dev.new(width=12)
- par(mfrow=c(1,2)) #una fila dos columnas
- par(pty="s")
- common.limits5=c(min(score.save5,X5),max(score.save5,X5))
- plot(x=X5[,1],y=X5[,2],xlab=expression(x[1]),ylab=expression(x[2]),main="Datos Originales",xlim=common.limits5,ylim=common.limits5,panel.first=grid(col="lightgreen"))
- abline(h=0)
- abline(v=0)
- plot(x=score.save5[,1],y=score.save5[,2],xlab="PC #1",ylab="PC #2",main="Componentes Principales",xlim=common.limits5,ylim=common.limits5,panel.first=grid(col="lightgreen"))
- abline(h=0)
- abline(v=0)
- ```
- Para $\rho_{12}=0$:
- ```{r,echo=F}
- pca.save0$scale=apply(X=X0,MARGIN=2,FUN=sd)
- score.save0=predict(pca.save0,newdata=X0)
- head(score.save0)
- #dev.new(width=12)
- par(mfrow=c(1,2)) #una fila dos columnas
- par(pty="s")
- common.limits0=c(min(score.save0,X0),max(score.save0,X0))
- plot(x=X0[,1],y=X0[,2],xlab=expression(x[1]),ylab=expression(x[2]),main="Datos Originales",xlim=common.limits0,ylim=common.limits0,panel.first=grid(col="lightgreen"))
- abline(h=0)
- abline(v=0)
- plot(x=score.save0[,1],y=score.save0[,2],xlab="PC #1",ylab="PC #2",main="Componentes Principales",xlim=common.limits0,ylim=common.limits0,panel.first=grid(col="lightgreen"))
- abline(h=0)
- abline(v=0)
- ```
- Para $\rho_{12}=-0.5$:
- ```{r,echo=F}
- pca.saven5$scale=apply(X=Xn5,MARGIN=2,FUN=sd)
- score.saven5=predict(pca.saven5,newdata=Xn5)
- head(score.saven5)
- #dev.new(width=12)
- par(mfrow=c(1,2)) #una fila dos columnas
- par(pty="s")
- common.limitsn5=c(min(score.saven5,Xn5),max(score.saven5,Xn5))
- plot(x=Xn5[,1],y=Xn5[,2],xlab=expression(x[1]),ylab=expression(x[2]),main="Datos Originales",xlim=common.limitsn5,ylim=common.limitsn5,panel.first=grid(col="lightgreen"))
- abline(h=0)
- abline(v=0)
- plot(x=score.saven5[,1],y=score.saven5[,2],xlab="PC #1",ylab="PC #2",main="Componentes Principales",xlim=common.limitsn5,ylim=common.limitsn5,panel.first=grid(col="lightgreen"))
- abline(h=0)
- abline(v=0)
- ```
- Para $\rho_{12}=-0.9$:
- ```{r,echo=F}
- pca.saven9$scale=apply(X=Xn9,MARGIN=2,FUN=sd)
- score.saven9=predict(pca.saven9,newdata=Xn9)
- head(score.saven9)
- #dev.new(width=12)
- par(mfrow=c(1,2)) #una fila dos columnas
- par(pty="s")
- common.limitsn9=c(min(score.saven9,Xn9),max(score.saven9,Xn9))
- plot(x=Xn9[,1],y=Xn9[,2],xlab=expression(x[1]),ylab=expression(x[2]),main="Datos Originales",xlim=common.limitsn9,ylim=common.limitsn9,panel.first=grid(col="lightgreen"))
- abline(h=0)
- abline(v=0)
- plot(x=score.saven9[,1],y=score.saven9[,2],xlab="PC #1",ylab="PC #2",main="Componentes Principales",xlim=common.limitsn9,ylim=common.limitsn9,panel.first=grid(col="lightgreen"))
- abline(h=0)
- abline(v=0)
- ```
- Para $\rho_{12}=-0.99$:
- ```{r,echo=F}
- pca.saven99$scale=apply(X=Xn99,MARGIN=2,FUN=sd)
- score.saven99=predict(pca.saven99,newdata=Xn99)
- head(score.saven99)
- #dev.new(width=12)
- par(mfrow=c(1,2)) #una fila dos columnas
- par(pty="s")
- common.limitsn99=c(min(score.saven99,Xn99),max(score.saven99,Xn99))
- plot(x=Xn99[,1],y=Xn99[,2],xlab=expression(x[1]),ylab=expression(x[2]),main="Datos Originales",xlim=common.limitsn99,ylim=common.limitsn99,panel.first=grid(col="lightgreen"))
- abline(h=0)
- abline(v=0)
- plot(x=score.saven99[,1],y=score.saven99[,2],xlab="PC #1",ylab="PC #2",main="Componentes Principales",xlim=common.limitsn99,ylim=common.limitsn99,panel.first=grid(col="lightgreen"))
- abline(h=0)
- abline(v=0)
- ```
- f. Relacione sus respuestas en `c-e` con el valor de $\rho_{12}$
- Para $\rho_{12}=0.9$ y $\rho_{12}=0.99$, es más que suficiente solo una componente principal por la varianza explicada. Adicionalmente, se puede ver claramente la correlación positiva en el gráfico.
- En el caso de $\rho_{12}=0.5$, es posible argumentar que se necesita una sola componente principal, porque explica una cantidad de varianza suficiente. Aunque la correlación positiva es visible, no es tan notoria como en el caso anterior, como es de esperarse.
- Para $\rho_{12}=0$, la varianza explicada por una componente no es suficiente. En el gráfico, también es notorio como no hay ninguna relación aparente, e, incluso tras aplicar el cambio de ejes, la diferencia es poco apreciable.
- Con $\rho_{12}=-0.5$, se aplica el mismo análisis que para $\rho_{12}=0.5$, con la obvia diferencia que la correlación es negativa en este caso. Nuevamente, la relación está presente en el gráfico de una forma sutil.
- Finalmente, para $\rho_{12}=-0.9$ y $\rho_{12}=-0.99$, la varianza explicada por una componente es suficiente. En los gráficos, además, es evidente la correlación negativa entre las variables.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement