Cesar Tinoco - 13003387

Lab 1

A continuacion realizaremos PCA en el conjunto de datos de USArrests, que forma parte del paquete base r. Las filas del conjunto de datos contienen los 50 estados, en orden alfabetico.

states =row.names(USArrests )
states
 [1] "Alabama"        "Alaska"         "Arizona"        "Arkansas"       "California"     "Colorado"      
 [7] "Connecticut"    "Delaware"       "Florida"        "Georgia"        "Hawaii"         "Idaho"         
[13] "Illinois"       "Indiana"        "Iowa"           "Kansas"         "Kentucky"       "Louisiana"     
[19] "Maine"          "Maryland"       "Massachusetts"  "Michigan"       "Minnesota"      "Mississippi"   
[25] "Missouri"       "Montana"        "Nebraska"       "Nevada"         "New Hampshire"  "New Jersey"    
[31] "New Mexico"     "New York"       "North Carolina" "North Dakota"   "Ohio"           "Oklahoma"      
[37] "Oregon"         "Pennsylvania"   "Rhode Island"   "South Carolina" "South Dakota"   "Tennessee"     
[43] "Texas"          "Utah"           "Vermont"        "Virginia"       "Washington"     "West Virginia" 
[49] "Wisconsin"      "Wyoming"       

Las columnas del conjunto de datos contienen las cuatro variables.

names(USArrests )
[1] "Murder"   "Assault"  "UrbanPop" "Rape"    

Primero examinamos brevemente los datos. Notamos que las variables tienen medios muy diferentes.

apply(USArrests , 2, mean)
  Murder  Assault UrbanPop     Rape 
   7.788  170.760   65.540   21.232 

Tenga en cuenta que la funcion apply() permite aplicar la funcion mean(), a cada fila o columna del conjunto de datos. La segunda entrada indica si se desea calcular la media de las filas, 1, o las columnas, 2. Vemos que hay en promedio tres veces mas violaciones que asesinatos, y mas de ocho veces mas asaltos que violaciones. Tambien podemos examinar las variaciones de las cuatro variables usando la función apply().

apply(USArrests , 2, var)
    Murder    Assault   UrbanPop       Rape 
  18.97047 6945.16571  209.51878   87.72916 

No es sorprendente que las variables tambien tengan variaciones muy diferentes: la variable UrbanPop mide el porcentaje de la poblacion en cada estado que vive en un area urbana, que no es un numero comparable al numero de violaciones en cada estado por cada 100,000 personas. Si no logramos escalar las variables antes de realizar PCA, entonces la mayoria de los componentes principales que observamos estaria impulsada por la variable Assault, ya que tiene, por mucho, la media y la varianza mas grande. Por lo tanto, es importante estandarizar las variables para que tengan una media de cero y una desviacion estandar antes de realizar la PCA.

Ahora realizamos el analisis de componentes principales utilizando la funcion prcomp(), que es una de las varias funciones en R que realizan PCA.

pr.out =prcomp (USArrests , scale =TRUE)

Por defecto, la funcion prcomp() centra las variables para que tengan media cero. Al usar la opcion scale = TRUE, escalamos las variables para tener una desviacion estandar de uno. La salida de prcomp() contiene una cantidad de cantidades utiles.

names(pr.out )
[1] "sdev"     "rotation" "center"   "scale"    "x"       

El centro y los componentes de escala corresponden a las medias y desviaciones estandar de las variables que se utilizaron para escalar antes de implementar PCA.

pr.out$center
  Murder  Assault UrbanPop     Rape 
   7.788  170.760   65.540   21.232 
pr.out$scale
   Murder   Assault  UrbanPop      Rape 
 4.355510 83.337661 14.474763  9.366385 

La matriz de rotacion proporciona las cargas principales de los componentes; Cada columna de rotacion pr.out$ contiene el vector de carga del componente principal correspondiente.

pr.out$rotation
                PC1        PC2        PC3         PC4
Murder   -0.5358995  0.4181809 -0.3412327  0.64922780
Assault  -0.5831836  0.1879856 -0.2681484 -0.74340748
UrbanPop -0.2781909 -0.8728062 -0.3780158  0.13387773
Rape     -0.5434321 -0.1673186  0.8177779  0.08902432

Vemos que hay cuatro componentes principales distintos. Esto es para ser esperado porque en general hay min(n - 1, p) componentes principales informativos en un conjunto de datos con n observaciones y p variables. Usando la funcion prcomp(), no necesitamos multiplicar explicitamente los datos por el componente principal de carga de vectores con el fin de obtener el Componente principal en los vectores de puntuacion. Mas bien, la matriz x de 50×4 tiene como columnas los vectores de puntuacion del componente principal. Es decir, la columna kth es el kth vector de puntuacion del componente principal.

dim(pr.out$x )
[1] 50  4

Podemos trazar los dos primeros componentes principales de la siguiente manera:

biplot (pr.out , scale =0)

El argumento scale = 0 para biplot() asegura que las flechas se escalan para representar las cargas; Otros valores para la escala dan biplots ligeramente diferentes con diferentes interpretaciones. Observe que esta figura es una imagen reflejada de la Figura 10.1. Recordar que los componentes principales solo son unicos hasta un cambio de signo, por lo que podemos reproducir la Figura 10.1 realizando algunos pequeños cambios:

pr.out$rotation=-pr.out$rotation
pr.out$x=-pr.out$x
biplot (pr.out , scale =0)

La funcion prcomp() tambien genera la desviacion estandar de cada componente principal. Por ejemplo, en el conjunto de datos de USArrests, podemos acceder a estas desviaciones estandar de la siguiente manera:

pr.out$sdev
[1] 1.5748783 0.9948694 0.5971291 0.4164494

La varianza explicada por cada componente principal se obtiene al cuadrar estos:

pr.var =pr.out$sdev ^2
pr.var
[1] 2.4802416 0.9897652 0.3565632 0.1734301

Para calcular la proporcion de varianza explicada por cada componente principal, simplemente dividimos la varianza explicada por cada componente principal por la varianza total explicada por los cuatro componentes principales

pve=pr.var/sum(pr.var )
pve
[1] 0.62006039 0.24744129 0.08914080 0.04335752

Vemos que el primer componente principal explica el 62.0% de la varianza en los datos, el siguiente componente principal explica el 24.7% de la varianza, y asi sucesivamente. Podemos trazar el PVE explicado por cada componente, asi como el PVE acumulado, de la siguiente manera:

plot(pve, xlab = "Principal Component", ylab = "Proportion of Variance Explained", ylim = c(0,1), type = 'b')

plot(cumsum(pve), xlab = "Principal component", ylab = "Cumulative Proportion of Variance Explained", ylim = c(0,1), type = 'b')

El resultado se muestra en la Figura 10.4. Tenga en cuenta que la función cumsum() calcula la suma acumulativa de los elementos de un vector numerico. Por ejemplo:

a=c(1,2,8,-3)
cumsum (a)
[1]  1  3 11  8
LS0tDQp0aXRsZTogIkxhYm9yYXRvcmlvIDEwLjQgLSBBbmFsaXNpcyBkZSBjb21wb25lbnRlcyBwcmluY2lwYWxlcyINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCiMjIENlc2FyIFRpbm9jbyAtIDEzMDAzMzg3DQoNCiMjIyBMYWIgMQ0KDQpBIGNvbnRpbnVhY2lvbiByZWFsaXphcmVtb3MgUENBIGVuIGVsIGNvbmp1bnRvIGRlIGRhdG9zIGRlIFVTQXJyZXN0cywgcXVlIGZvcm1hIHBhcnRlIGRlbCBwYXF1ZXRlIGJhc2Ugci4gDQpMYXMgZmlsYXMgZGVsIGNvbmp1bnRvIGRlIGRhdG9zIGNvbnRpZW5lbiBsb3MgNTAgZXN0YWRvcywgZW4gb3JkZW4gYWxmYWJldGljby4NCg0KYGBge3J9DQpzdGF0ZXMgPXJvdy5uYW1lcyhVU0FycmVzdHMgKQ0Kc3RhdGVzDQpgYGANCg0KTGFzIGNvbHVtbmFzIGRlbCBjb25qdW50byBkZSBkYXRvcyBjb250aWVuZW4gbGFzIGN1YXRybyB2YXJpYWJsZXMuDQoNCmBgYHtyfQ0KbmFtZXMoVVNBcnJlc3RzICkNCmBgYA0KDQpQcmltZXJvIGV4YW1pbmFtb3MgYnJldmVtZW50ZSBsb3MgZGF0b3MuIE5vdGFtb3MgcXVlIGxhcyB2YXJpYWJsZXMgdGllbmVuIG1lZGlvcyBtdXkgZGlmZXJlbnRlcy4NCg0KYGBge3J9DQphcHBseShVU0FycmVzdHMgLCAyLCBtZWFuKQ0KYGBgDQoNClRlbmdhIGVuIGN1ZW50YSBxdWUgbGEgZnVuY2lvbiBhcHBseSgpIHBlcm1pdGUgYXBsaWNhciBsYSBmdW5jaW9uIG1lYW4oKSwgYSBjYWRhIGZpbGEgbyBjb2x1bW5hIGRlbCBjb25qdW50byBkZSBkYXRvcy4gTGEgc2VndW5kYSBlbnRyYWRhIGluZGljYSBzaSBzZSBkZXNlYSBjYWxjdWxhciBsYSBtZWRpYSBkZSBsYXMgZmlsYXMsIDEsIG8gbGFzIGNvbHVtbmFzLCAyLiBWZW1vcyBxdWUgaGF5DQplbiBwcm9tZWRpbyB0cmVzIHZlY2VzIG1hcyB2aW9sYWNpb25lcyBxdWUgYXNlc2luYXRvcywgeSBtYXMgZGUgb2NobyB2ZWNlcyBtYXMgYXNhbHRvcyBxdWUgdmlvbGFjaW9uZXMuDQpUYW1iaWVuIHBvZGVtb3MgZXhhbWluYXIgbGFzIHZhcmlhY2lvbmVzIGRlIGxhcyBjdWF0cm8gdmFyaWFibGVzIHVzYW5kbyBsYSBmdW5jacOzbiBhcHBseSgpLg0KDQpgYGB7cn0NCmFwcGx5KFVTQXJyZXN0cyAsIDIsIHZhcikNCmBgYA0KDQpObyBlcyBzb3JwcmVuZGVudGUgcXVlIGxhcyB2YXJpYWJsZXMgdGFtYmllbiB0ZW5nYW4gdmFyaWFjaW9uZXMgbXV5IGRpZmVyZW50ZXM6IGxhIHZhcmlhYmxlIFVyYmFuUG9wIG1pZGUgZWwNCnBvcmNlbnRhamUgZGUgbGEgcG9ibGFjaW9uIGVuIGNhZGEgZXN0YWRvIHF1ZSB2aXZlIGVuIHVuIGFyZWEgdXJiYW5hLCBxdWUgbm8gZXMgdW4gbnVtZXJvIGNvbXBhcmFibGUgYWwgbnVtZXJvIGRlDQp2aW9sYWNpb25lcyBlbiBjYWRhIGVzdGFkbyBwb3IgY2FkYSAxMDAsMDAwIHBlcnNvbmFzLiBTaSBubyBsb2dyYW1vcyBlc2NhbGFyIGxhcyB2YXJpYWJsZXMgYW50ZXMgZGUgcmVhbGl6YXIgUENBLA0KZW50b25jZXMgbGEgbWF5b3JpYSBkZSBsb3MgY29tcG9uZW50ZXMgcHJpbmNpcGFsZXMgcXVlIG9ic2VydmFtb3MgZXN0YXJpYSBpbXB1bHNhZGEgcG9yIGxhIHZhcmlhYmxlIEFzc2F1bHQsIHlhDQpxdWUgdGllbmUsIHBvciBtdWNobywgbGEgbWVkaWEgeSBsYSB2YXJpYW56YSBtYXMgZ3JhbmRlLiBQb3IgbG8gdGFudG8sIGVzIGltcG9ydGFudGUgZXN0YW5kYXJpemFyIGxhcyB2YXJpYWJsZXMgcGFyYSBxdWUgdGVuZ2FuIHVuYSBtZWRpYSBkZSBjZXJvIHkgdW5hIGRlc3ZpYWNpb24gZXN0YW5kYXIgYW50ZXMgZGUgcmVhbGl6YXIgbGEgUENBLg0KDQpBaG9yYSByZWFsaXphbW9zIGVsIGFuYWxpc2lzIGRlIGNvbXBvbmVudGVzIHByaW5jaXBhbGVzIHV0aWxpemFuZG8gbGEgZnVuY2lvbiBwcmNvbXAoKSwgcXVlIGVzIHVuYSBkZSBsYXMgdmFyaWFzDQpmdW5jaW9uZXMgZW4gUiBxdWUgcmVhbGl6YW4gUENBLg0KDQpgYGB7cn0NCnByLm91dCA9cHJjb21wIChVU0FycmVzdHMgLCBzY2FsZSA9VFJVRSkNCmBgYA0KDQpQb3IgZGVmZWN0bywgbGEgZnVuY2lvbiBwcmNvbXAoKSBjZW50cmEgbGFzIHZhcmlhYmxlcyBwYXJhIHF1ZSB0ZW5nYW4gbWVkaWEgY2Vyby4gQWwgdXNhciBsYSBvcGNpb24gc2NhbGUgPSBUUlVFLA0KZXNjYWxhbW9zIGxhcyB2YXJpYWJsZXMgcGFyYSB0ZW5lciB1bmEgZGVzdmlhY2lvbiBlc3RhbmRhciBkZSB1bm8uIExhIHNhbGlkYSBkZSBwcmNvbXAoKSBjb250aWVuZSB1bmEgY2FudGlkYWQNCmRlIGNhbnRpZGFkZXMgdXRpbGVzLg0KDQpgYGB7cn0NCm5hbWVzKHByLm91dCApDQpgYGANCg0KRWwgY2VudHJvIHkgbG9zIGNvbXBvbmVudGVzIGRlIGVzY2FsYSBjb3JyZXNwb25kZW4gYSBsYXMgbWVkaWFzIHkgZGVzdmlhY2lvbmVzIGVzdGFuZGFyIGRlIGxhcyB2YXJpYWJsZXMgcXVlIA0Kc2UgdXRpbGl6YXJvbiBwYXJhIGVzY2FsYXIgYW50ZXMgZGUgaW1wbGVtZW50YXIgUENBLg0KDQpgYGB7cn0NCnByLm91dCRjZW50ZXINCnByLm91dCRzY2FsZQ0KYGBgDQoNCkxhIG1hdHJpeiBkZSByb3RhY2lvbiBwcm9wb3JjaW9uYSBsYXMgY2FyZ2FzIHByaW5jaXBhbGVzIGRlIGxvcyBjb21wb25lbnRlczsgQ2FkYSBjb2x1bW5hIGRlIHJvdGFjaW9uIHByLm91dCQNCmNvbnRpZW5lIGVsIHZlY3RvciBkZSBjYXJnYSBkZWwgY29tcG9uZW50ZSBwcmluY2lwYWwgY29ycmVzcG9uZGllbnRlLg0KDQpgYGB7cn0NCnByLm91dCRyb3RhdGlvbg0KYGBgDQoNClZlbW9zIHF1ZSBoYXkgY3VhdHJvIGNvbXBvbmVudGVzIHByaW5jaXBhbGVzIGRpc3RpbnRvcy4gRXN0byBlcyBwYXJhIHNlciBlc3BlcmFkbyBwb3JxdWUgZW4gZ2VuZXJhbCBoYXkgDQptaW4obiAtIDEsIHApIGNvbXBvbmVudGVzIHByaW5jaXBhbGVzIGluZm9ybWF0aXZvcyBlbiB1biBjb25qdW50byBkZSBkYXRvcyBjb24gbiBvYnNlcnZhY2lvbmVzIHkgcCB2YXJpYWJsZXMuDQpVc2FuZG8gbGEgZnVuY2lvbiBwcmNvbXAoKSwgbm8gbmVjZXNpdGFtb3MgbXVsdGlwbGljYXIgZXhwbGljaXRhbWVudGUgbG9zIGRhdG9zIHBvciBlbCBjb21wb25lbnRlIHByaW5jaXBhbCBkZQ0KY2FyZ2EgZGUgdmVjdG9yZXMgY29uIGVsIGZpbiBkZSBvYnRlbmVyIGVsIENvbXBvbmVudGUgcHJpbmNpcGFsIGVuIGxvcyB2ZWN0b3JlcyBkZSBwdW50dWFjaW9uLiBNYXMgYmllbiwgbGENCm1hdHJpeiB4IGRlIDUww5c0IHRpZW5lIGNvbW8gY29sdW1uYXMgbG9zIHZlY3RvcmVzIGRlIHB1bnR1YWNpb24gZGVsIGNvbXBvbmVudGUgcHJpbmNpcGFsLiBFcyBkZWNpciwgbGEgY29sdW1uYQ0Ka3RoIGVzIGVsIGt0aCB2ZWN0b3IgZGUgcHVudHVhY2lvbiBkZWwgY29tcG9uZW50ZSBwcmluY2lwYWwuDQoNCmBgYHtyfQ0KZGltKHByLm91dCR4ICkNCmBgYA0KDQpQb2RlbW9zIHRyYXphciBsb3MgZG9zIHByaW1lcm9zIGNvbXBvbmVudGVzIHByaW5jaXBhbGVzIGRlIGxhIHNpZ3VpZW50ZSBtYW5lcmE6DQoNCmBgYHtyfQ0KYmlwbG90IChwci5vdXQgLCBzY2FsZSA9MCkNCmBgYA0KDQpFbCBhcmd1bWVudG8gc2NhbGUgPSAwIHBhcmEgYmlwbG90KCkgYXNlZ3VyYSBxdWUgbGFzIGZsZWNoYXMgc2UgZXNjYWxhbiBwYXJhIHJlcHJlc2VudGFyIGxhcyBjYXJnYXM7IE90cm9zDQp2YWxvcmVzIHBhcmEgbGEgZXNjYWxhIGRhbiBiaXBsb3RzIGxpZ2VyYW1lbnRlIGRpZmVyZW50ZXMgY29uIGRpZmVyZW50ZXMgaW50ZXJwcmV0YWNpb25lcy4NCk9ic2VydmUgcXVlIGVzdGEgZmlndXJhIGVzIHVuYSBpbWFnZW4gcmVmbGVqYWRhIGRlIGxhIEZpZ3VyYSAxMC4xLiBSZWNvcmRhciBxdWUgbG9zIGNvbXBvbmVudGVzIHByaW5jaXBhbGVzIHNvbG8NCnNvbiB1bmljb3MgaGFzdGEgdW4gY2FtYmlvIGRlIHNpZ25vLCBwb3IgbG8gcXVlIHBvZGVtb3MgcmVwcm9kdWNpciBsYSBGaWd1cmEgMTAuMSByZWFsaXphbmRvIGFsZ3Vub3MgcGVxdWXDsW9zIGNhbWJpb3M6DQoNCmBgYHtyfQ0KcHIub3V0JHJvdGF0aW9uPS1wci5vdXQkcm90YXRpb24NCnByLm91dCR4PS1wci5vdXQkeA0KYmlwbG90IChwci5vdXQgLCBzY2FsZSA9MCkNCmBgYA0KDQpMYSBmdW5jaW9uIHByY29tcCgpIHRhbWJpZW4gZ2VuZXJhIGxhIGRlc3ZpYWNpb24gZXN0YW5kYXIgZGUgY2FkYSBjb21wb25lbnRlIHByaW5jaXBhbC4gUG9yIGVqZW1wbG8sIGVuIGVsIGNvbmp1bnRvIGRlIGRhdG9zIGRlIFVTQXJyZXN0cywgcG9kZW1vcyBhY2NlZGVyIGEgZXN0YXMgZGVzdmlhY2lvbmVzIGVzdGFuZGFyIGRlIGxhIHNpZ3VpZW50ZSBtYW5lcmE6DQoNCmBgYHtyfQ0KcHIub3V0JHNkZXYNCmBgYA0KDQpMYSB2YXJpYW56YSBleHBsaWNhZGEgcG9yIGNhZGEgY29tcG9uZW50ZSBwcmluY2lwYWwgc2Ugb2J0aWVuZSBhbCBjdWFkcmFyIGVzdG9zOg0KDQpgYGB7cn0NCnByLnZhciA9cHIub3V0JHNkZXYgXjINCnByLnZhcg0KYGBgDQoNClBhcmEgY2FsY3VsYXIgbGEgcHJvcG9yY2lvbiBkZSB2YXJpYW56YSBleHBsaWNhZGEgcG9yIGNhZGEgY29tcG9uZW50ZSBwcmluY2lwYWwsIHNpbXBsZW1lbnRlIGRpdmlkaW1vcyBsYQ0KdmFyaWFuemEgZXhwbGljYWRhIHBvciBjYWRhIGNvbXBvbmVudGUgcHJpbmNpcGFsIHBvciBsYSB2YXJpYW56YSB0b3RhbCBleHBsaWNhZGEgcG9yIGxvcyBjdWF0cm8gY29tcG9uZW50ZXMgcHJpbmNpcGFsZXMNCg0KYGBge3J9DQpwdmU9cHIudmFyL3N1bShwci52YXIgKQ0KcHZlDQpgYGANCg0KVmVtb3MgcXVlIGVsIHByaW1lciBjb21wb25lbnRlIHByaW5jaXBhbCBleHBsaWNhIGVsIDYyLjAlIGRlIGxhIHZhcmlhbnphIGVuIGxvcyBkYXRvcywgZWwgc2lndWllbnRlIGNvbXBvbmVudGUNCnByaW5jaXBhbCBleHBsaWNhIGVsIDI0LjclIGRlIGxhIHZhcmlhbnphLCB5IGFzaSBzdWNlc2l2YW1lbnRlLiBQb2RlbW9zIHRyYXphciBlbCBQVkUgZXhwbGljYWRvIHBvciBjYWRhDQpjb21wb25lbnRlLCBhc2kgY29tbyBlbCBQVkUgYWN1bXVsYWRvLCBkZSBsYSBzaWd1aWVudGUgbWFuZXJhOg0KDQpgYGB7cn0NCnBsb3QocHZlLCB4bGFiID0gIlByaW5jaXBhbCBDb21wb25lbnQiLCB5bGFiID0gIlByb3BvcnRpb24gb2YgVmFyaWFuY2UgRXhwbGFpbmVkIiwgeWxpbSA9IGMoMCwxKSwgdHlwZSA9ICdiJykNCnBsb3QoY3Vtc3VtKHB2ZSksIHhsYWIgPSAiUHJpbmNpcGFsIGNvbXBvbmVudCIsIHlsYWIgPSAiQ3VtdWxhdGl2ZSBQcm9wb3J0aW9uIG9mIFZhcmlhbmNlIEV4cGxhaW5lZCIsIHlsaW0gPSBjKDAsMSksIHR5cGUgPSAnYicpDQoNCmBgYA0KDQpFbCByZXN1bHRhZG8gc2UgbXVlc3RyYSBlbiBsYSBGaWd1cmEgMTAuNC4gVGVuZ2EgZW4gY3VlbnRhIHF1ZSBsYSBmdW5jacOzbiBjdW1zdW0oKSBjYWxjdWxhIGxhIHN1bWEgYWN1bXVsYXRpdmENCmRlIGxvcyBlbGVtZW50b3MgZGUgdW4gdmVjdG9yIG51bWVyaWNvLiBQb3IgZWplbXBsbzoNCg0KDQpgYGB7cn0NCmE9YygxLDIsOCwtMykNCmN1bXN1bSAoYSkNCmBgYA0KDQoNCg0KDQoNCg==