lunes, 14 de septiembre de 2009

Análisis de componentes Principales (ACP) en R

ACP1

ACP2


 datos<-read.table("comprincipales.txt",header=T,row.names=1)
attach(datos)
datos
#Evidentemente, antes de realizar cualquier an´alisis de componentes principales, podemos realizar un resumen estad´ýstico o gr´aficos descriptivos bidimensionales,
plot(datos) #boxplt(datos,cex.axis=0.75) para gráfico de cajas
summary(datos) #print(summary(datos)) para estadísticos básicos y print(apply(datos,2,sd)) para desviaciones estándar
#Boxplot: la diferencia esos dos grupos de variables y justifica la normalizaci¶on de los datos antes de realizar el ACP (ACP normado).
#Del mismo modo, es interesante, estudiar la matriz de correlaciones, y ver, que estas sean en general altas, ya que esta es una de las hip´otesis para el an´alisis de componentes principales.
#El espacio de las variables del ACP normado es una imagen de la matriz de correlaciones, que se obtiene en R con la funci¶on cor, cuando se aplica sobre un objeto de tipo data.frame o matrix de datos num¶ericos. La funci¶on plot sobre el mismo data.frame, cafe produce la ¯gura 2.
cor(datos)
#matriz de correlaciones y matriz de gr¶aficas de dispersi¶on: print(cor(datos),2) y plot(datos)

#Se realiza el ACP normado del ejemplo caf¶e con todas las variables como activas. Las funciones utilizados de ade4 son dudi.pca, que realiza el ACP; inertia.dudi, que calcula las contribuciones absolutas y relativas a la inercia.
library(ade4)
acp<-dudi.pca(df=datos,scannf=T,nf=2) #no es scannf=F??? ver "analmultir.pdf"
#Select the number of axes: 2
#De esta manera generaremos el an´alisis de componentes principales y a su vez obtenemos la representaci´on de las gr´afica de los autovalores.
#Para ver la importancia (contribuciones) absolutas y relativas, vamos a usar la funci´on
acpi<-inertia.dudi(acp, row.inertia=T, col.inertia=T) #contiene las ayudas a la interpretación del ACP

#A continuaci´on vamos a ir analizando las salidas que nos proporciona R.
# En primer lugar vemos los resultados para las filas. En este caso, obtendremos la representaci´on de cada fila en el espacio bidimensional (normalizado y sin normalizar).
acp$l1
acp$li
#Estos puntos los podemos representar con la orden s.label de la forma:
s.label(acp$li)
#Del mismo modo la representaci´on de las columnas ser´a:
acp$co
acp$c1
s.label(acp$co)
#Tambi´en podemos analizar las contribuciones a la inercia de la filas (o columnas) de modo que:
acpi
#Tambi´en podemos obtener la representaci´on conjunta de filas y columnas sin m´as que:
biplot(acp$co,acp$li)
#Podemos obtener, finalmente, una representaci´on de las correlaciones de las variables, con la orden:
s.corcircle(acp$li); s.corcircle(acp$co)

#NOTAS: para imprimir todas las salidas
cat("\n Estadísticas básicas \n")
print(summary(datos))
cat("\n Desviaciones estándar \n")
print(apply(datos,2,sd))
par(ask=TRUE) # para pausa antes de la gr¶afica
boxplot(datos,cex.axis=0.75)
acp <- dudi.pca(cafe,scannf=F,nf=2) # realiza el ACP
acpI <- inertia.dudi(acp,row.inertia=T,col.inertia=T) # acpI contiene las ayudas a la interpretaci¶on del ACP
impresión de los objetos de acp y acpi con títulos:
cat("\n Valores propios \n")
print(acpI$TOT,2)
plot(acp$eig) #produce la grafica de los valores propios, que sirve como com-plemento a la tabla de correlaciones.
cat("\n Vectores propios \n")
print(acp$c1)
cat("\n Coordenadas de las columnas \n")
print(acp$co)
cat("\n Contribuciones de las columnas a los ejes \n")
print(acpI$col.abs/100)
cat("\n Calidad de representaci¶on de las columnas \n")
print(acpI$col.rel/100)
cat("\n Calidad de representaci¶on de las columnas en el plano \n")
print(acpI$col.cum/100)
cat("\n Coordenadas de las filas \n")
print(acp$li)
cat("\n Contribuciones de las filas a los ejes \n")
print(acpI$row.abs/100)
cat("\n Calidad de representaci¶on de las filas en los ejes \n")
print(acpI$row.rel/100)
cat("\n Calidad de representaci¶on de las filas en el plano \n")
print(acpI$row.cum/100)
# gr¶aficas del acp
par(mfrow=c(1,2)) # para 2 gr¶aficas simult¶aneas
s.corcircle(acp$co,sub="Cafe - C¶³rculo de correlaciones",possub= "bottomright") #presenta el círculo de correlaciones; muestra el efecto "tamaño" del primer factor; es la clave para la lectura del primer plano factorial de los cafés
iden <- c("EC","C4M","C4C","C2M","C2C","EO","O4M","O4C","O2M","O2C") # se define iden para tener etiquetas m¶as cortas en las gr¶aficas
s.label(acp$li,label=iden,sub="Preparaciones de caf¶e",possub= "bottomright") # s.label es de ade4 y coloca puntos con etiquetas en planos factoriales #primer plano factorial de lso cafés