Las filas del conjunto de datos contienen los 50 estados, en orden alfabetico.

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

El conjunto de datos contienen las cuatro variables.

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

Se usará la función apply() que permite aplicar una función a cada columna o fila del dataset, en este caso usaremos la función mean().

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 o las columnas. -Vemos que hay en promedio tres veces mas violaciones que asesinatos, y mas de ocho veces mas asaltos que violaciones.

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

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.

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

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 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 quese 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

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.

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

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

biplot (pr.out , scale =0)

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 de esta forma:

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')

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
LS0tDQp0aXRsZTogIkNhcCAjIDEwLCBGSUFCSUxJREFEIC0gT3NjYXIgUGFkaWxsYSINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCkxhcyBmaWxhcyBkZWwgY29uanVudG8gZGUgZGF0b3MgY29udGllbmVuIGxvcyA1MCBlc3RhZG9zLCBlbiBvcmRlbiBhbGZhYmV0aWNvLg0KDQpgYGB7cn0NCnN0YXRlcyA9cm93Lm5hbWVzKFVTQXJyZXN0cyApDQpzdGF0ZXMNCmBgYA0KDQpFbCBjb25qdW50byBkZSBkYXRvcyBjb250aWVuZW4gbGFzIGN1YXRybyB2YXJpYWJsZXMuDQoNCmBgYHtyfQ0KbmFtZXMoVVNBcnJlc3RzICkNCmBgYA0KDQpTZSB1c2Fyw6EgbGEgZnVuY2nDs24gYXBwbHkoKSBxdWUgcGVybWl0ZSBhcGxpY2FyIHVuYSBmdW5jacOzbiBhIGNhZGEgY29sdW1uYSBvIGZpbGEgZGVsIGRhdGFzZXQsIGVuIGVzdGUgY2FzbyB1c2FyZW1vcyBsYSBmdW5jacOzbiBtZWFuKCkuDQoNCmBgYHtyfQ0KYXBwbHkoVVNBcnJlc3RzICwgMiwgbWVhbikNCmBgYA0KDQpUZW5nYSBlbiBjdWVudGEgcXVlIGxhIGZ1bmNpb24gYXBwbHkoKSBwZXJtaXRlIGFwbGljYXIgbGEgZnVuY2lvbiBtZWFuKCksIGEgY2FkYSBmaWxhIG8gY29sdW1uYSBkZWwgY29uanVudG8gZGUgZGF0b3MuIExhIHNlZ3VuZGEgZW50cmFkYSBpbmRpY2Egc2kgc2UgZGVzZWEgY2FsY3VsYXIgbGEgbWVkaWEgZGUgbGFzIGZpbGFzIG8gbGFzIGNvbHVtbmFzLg0KLVZlbW9zIHF1ZSBoYXkgZW4gcHJvbWVkaW8gdHJlcyB2ZWNlcyBtYXMgdmlvbGFjaW9uZXMgcXVlIGFzZXNpbmF0b3MsIHkgbWFzIGRlIG9jaG8gdmVjZXMgbWFzIGFzYWx0b3MgcXVlIHZpb2xhY2lvbmVzLg0KDQpgYGB7cn0NCmFwcGx5KFVTQXJyZXN0cyAsIDIsIHZhcikNCmBgYA0KDQpMYSB2YXJpYWJsZSBVcmJhblBvcCBtaWRlIGVsIHBvcmNlbnRhamUgZGUgbGEgcG9ibGFjaW9uIGVuIGNhZGEgZXN0YWRvIHF1ZSB2aXZlIGVuIHVuIGFyZWEgdXJiYW5hLCBxdWUgbm8gZXMgdW4gbnVtZXJvIGNvbXBhcmFibGUgYWwgbnVtZXJvIGRlIHZpb2xhY2lvbmVzIGVuIGNhZGEgZXN0YWRvIHBvciBjYWRhIDEwMCwwMDAgcGVyc29uYXMuIFNpIG5vIGxvZ3JhbW9zIGVzY2FsYXIgbGFzIHZhcmlhYmxlcyBhbnRlcyBkZSByZWFsaXphciBQQ0EgZW50b25jZXMgbGEgbWF5b3JpYSBkZSBsb3MgY29tcG9uZW50ZXMgcHJpbmNpcGFsZXMgcXVlIG9ic2VydmFtb3MgZXN0YXJpYSBpbXB1bHNhZGEgcG9yIGxhIHZhcmlhYmxlIEFzc2F1bHQsIHlhIHF1ZSB0aWVuZSwgcG9yIG11Y2hvLCBsYSBtZWRpYSB5IGxhIHZhcmlhbnphIG1hcyBncmFuZGUuIFBvciBsbyB0YW50bywgZXMgaW1wb3J0YW50ZSBlc3RhbmRhcml6YXIgbGFzIHZhcmlhYmxlcyBwYXJhIHF1ZSB0ZW5nYW4gdW5hIG1lZGlhIGRlIGNlcm8geSB1bmEgZGVzdmlhY2lvbiBlc3RhbmRhciBhbnRlcyBkZSByZWFsaXphciBsYSBQQ0EuDQoNCg0KYGBge3J9DQpwci5vdXQgPXByY29tcCAoVVNBcnJlc3RzICwgc2NhbGUgPVRSVUUpDQpgYGANCg0KTGEgZnVuY2lvbiBwcmNvbXAoKSBjZW50cmEgbGFzIHZhcmlhYmxlcyBwYXJhIHF1ZSB0ZW5nYW4gbWVkaWEgY2Vyby4gQWwgdXNhciBsYSBvcGNpb24gc2NhbGUgPSBUUlVFLA0KZXNjYWxhbW9zIGxhcyB2YXJpYWJsZXMgcGFyYSB0ZW5lciB1bmEgZGVzdmlhY2lvbiBlc3RhbmRhciBkZSB1bm8uIExhIHNhbGlkYSBkZSBwcmNvbXAoKSBjb250aWVuZSBjYW50aWRhZGVzIHV0aWxlcy4NCg0KYGBge3J9DQpuYW1lcyhwci5vdXQgKQ0KYGBgDQoNCkVsIGNlbnRybyB5IGxvcyBjb21wb25lbnRlcyBkZSBlc2NhbGEgY29ycmVzcG9uZGVuIGEgbGFzIG1lZGlhcyB5IGRlc3ZpYWNpb25lcyBlc3RhbmRhciBkZSBsYXMgdmFyaWFibGVzIHF1ZXNlIHV0aWxpemFyb24gcGFyYSBlc2NhbGFyIGFudGVzIGRlIGltcGxlbWVudGFyIFBDQS4NCg0KYGBge3J9DQpwci5vdXQkY2VudGVyDQpwci5vdXQkc2NhbGUNCmBgYA0KDQpMYSBtYXRyaXogZGUgcm90YWNpb24gcHJvcG9yY2lvbmEgbGFzIGNhcmdhcyBwcmluY2lwYWxlcyBkZSBsb3MgY29tcG9uZW50ZXM7IENhZGEgY29sdW1uYSBkZSByb3RhY2lvbiBwci5vdXQkIGNvbnRpZW5lIGVsIHZlY3RvciBkZSBjYXJnYSBkZWwgY29tcG9uZW50ZSBwcmluY2lwYWwgY29ycmVzcG9uZGllbnRlLg0KDQpgYGB7cn0NCnByLm91dCRyb3RhdGlvbg0KYGBgDQoNCkVuIGdlbmVyYWwgaGF5IG1pbihuIC0gMSwgcCkgY29tcG9uZW50ZXMgcHJpbmNpcGFsZXMgaW5mb3JtYXRpdm9zIGVuIHVuIGNvbmp1bnRvIGRlIGRhdG9zIGNvbiBuIG9ic2VydmFjaW9uZXMgeSBwIHZhcmlhYmxlcy4gVXNhbmRvIGxhIGZ1bmNpb24gcHJjb21wKCksIG5vIG5lY2VzaXRhbW9zIG11bHRpcGxpY2FyIGV4cGxpY2l0YW1lbnRlIGxvcyBkYXRvcyBwb3IgZWwgY29tcG9uZW50ZSBwcmluY2lwYWwgZGUgY2FyZ2EgZGUgdmVjdG9yZXMgY29uIGVsIGZpbiBkZSBvYnRlbmVyIGVsIENvbXBvbmVudGUgcHJpbmNpcGFsIGVuIGxvcyB2ZWN0b3JlcyBkZSBwdW50dWFjaW9uLiBNYXMgYmllbiwgbGEgbWF0cml6IHggZGUgNTDDlzQgdGllbmUgY29tbyBjb2x1bW5hcyBsb3MgdmVjdG9yZXMgZGUgcHVudHVhY2lvbiBkZWwgY29tcG9uZW50ZSBwcmluY2lwYWwuIA0KDQpgYGB7cn0NCmRpbShwci5vdXQkeCApDQpgYGANCg0KUG9kZW1vcyB0cmF6YXIgbG9zIGRvcyBwcmltZXJvcyBjb21wb25lbnRlcyBwcmluY2lwYWxlcyBkZSBsYSBzaWd1aWVudGUgbWFuZXJhOg0KDQpgYGB7cn0NCmJpcGxvdCAocHIub3V0ICwgc2NhbGUgPTApDQpgYGANCg0KT2JzZXJ2ZSBxdWUgZXN0YSBmaWd1cmEgZXMgdW5hIGltYWdlbiByZWZsZWphZGEgZGUgbGEgRmlndXJhIDEwLjEuIFJlY29yZGFyIHF1ZSBsb3MgY29tcG9uZW50ZXMgcHJpbmNpcGFsZXMgc29sbyBzb24gdW5pY29zIGhhc3RhIHVuIGNhbWJpbyBkZSBzaWdubywgcG9yIGxvIHF1ZSBwb2RlbW9zIHJlcHJvZHVjaXIgbGEgRmlndXJhIDEwLjEgcmVhbGl6YW5kbyBhbGd1bm9zIHBlcXVlw7FvcyBjYW1iaW9zOg0KDQpgYGB7cn0NCnByLm91dCRyb3RhdGlvbj0tcHIub3V0JHJvdGF0aW9uDQpwci5vdXQkeD0tcHIub3V0JHgNCmJpcGxvdCAocHIub3V0ICwgc2NhbGUgPTApDQpgYGANCg0KTGEgZnVuY2lvbiBwcmNvbXAoKSB0YW1iaWVuIGdlbmVyYSBsYSBkZXN2aWFjaW9uIGVzdGFuZGFyIGRlIGNhZGEgY29tcG9uZW50ZSBwcmluY2lwYWwuIFBvciBlamVtcGxvLCBlbiBlbCBjb25qdW50byBkZSBkYXRvcyBkZSBVU0FycmVzdHMsIHBvZGVtb3MgYWNjZWRlciBhIGVzdGFzIGRlc3ZpYWNpb25lcyBlc3RhbmRhciBkZSBsYSBzaWd1aWVudGUgbWFuZXJhOg0KDQpgYGB7cn0NCnByLm91dCRzZGV2DQpgYGANCg0KTGEgdmFyaWFuemEgZXhwbGljYWRhIHBvciBjYWRhIGNvbXBvbmVudGUgcHJpbmNpcGFsIHNlIG9idGllbmUgZGUgZXN0YSBmb3JtYToNCg0KYGBge3J9DQpwci52YXIgPXByLm91dCRzZGV2IF4yDQpwci52YXINCmBgYA0KDQpQYXJhIGNhbGN1bGFyIGxhIHByb3BvcmNpb24gZGUgdmFyaWFuemEgZXhwbGljYWRhIHBvciBjYWRhIGNvbXBvbmVudGUgcHJpbmNpcGFsLCBzaW1wbGVtZW50ZSBkaXZpZGltb3MgbGEgdmFyaWFuemEgZXhwbGljYWRhIHBvciBjYWRhIGNvbXBvbmVudGUgcHJpbmNpcGFsIHBvciBsYSB2YXJpYW56YSB0b3RhbCBleHBsaWNhZGEgcG9yIGxvcyBjdWF0cm8gY29tcG9uZW50ZXMgcHJpbmNpcGFsZXMNCg0KYGBge3J9DQpwdmU9cHIudmFyL3N1bShwci52YXIgKQ0KcHZlDQpgYGANCg0KVmVtb3MgcXVlIGVsIHByaW1lciBjb21wb25lbnRlIHByaW5jaXBhbCBleHBsaWNhIGVsIDYyLjAlIGRlIGxhIHZhcmlhbnphIGVuIGxvcyBkYXRvcywgZWwgc2lndWllbnRlIGNvbXBvbmVudGUgcHJpbmNpcGFsIGV4cGxpY2EgZWwgMjQuNyUgZGUgbGEgdmFyaWFuemEsIHkgYXNpIHN1Y2VzaXZhbWVudGUuIFBvZGVtb3MgdHJhemFyIGVsIFBWRSBleHBsaWNhZG8gcG9yIGNhZGEgY29tcG9uZW50ZSwgYXNpIGNvbW8gZWwgUFZFIGFjdW11bGFkbywgZGUgbGEgc2lndWllbnRlIG1hbmVyYToNCg0KYGBge3J9DQpwbG90KHB2ZSwgeGxhYiA9ICJQcmluY2lwYWwgQ29tcG9uZW50IiwgeWxhYiA9ICJQcm9wb3J0aW9uIG9mIFZhcmlhbmNlIEV4cGxhaW5lZCIsIHlsaW0gPSBjKDAsMSksIHR5cGUgPSAnYicpDQoNCmBgYA0KDQpgYGB7cn0NCnBsb3QoY3Vtc3VtKHB2ZSksIHhsYWIgPSAiUHJpbmNpcGFsIGNvbXBvbmVudCIsIHlsYWIgPSAiQ3VtdWxhdGl2ZSBQcm9wb3J0aW9uIG9mIFZhcmlhbmNlIEV4cGxhaW5lZCIsIHlsaW0gPSBjKDAsMSksIHR5cGUgPSAnYicpDQpgYGANCg0KDQpMYSBmdW5jacOzbiBjdW1zdW0oKSBjYWxjdWxhIGxhIHN1bWEgYWN1bXVsYXRpdmEgZGUgbG9zIGVsZW1lbnRvcyBkZSB1biB2ZWN0b3IgbnVtZXJpY28uDQoNClBvciBlamVtcGxvOg0KDQoNCmBgYHtyfQ0KYT1jKDEsMiw4LC0zKQ0KY3Vtc3VtIChhKQ0KYGBgDQoNCg0K