polucion <- read.table("R/visualizacion/practica 1/datos_practica_1/data-usair.txt", header=TRUE)
rownames(polucion) <- polucion$City
polucion <- polucion %>% select(-c("SO2", "City"))

polucion 

Dias son precipitaciones al año Precip: precipitacon media anual en pulgadas

Wind: velocidad

Manuf: canitdad de empresas Pop: Population


resultado <- prcomp(polucion, center = TRUE, scale. = TRUE)
resultado 
Standard deviations (1, .., p=6):
[1] 1.4819456 1.2247218 1.1809526 0.8719099 0.3384829 0.1855998

Rotation (n x k) = (6 x 6):
               PC1        PC2         PC3         PC4         PC5         PC6
Temp   -0.32964613 -0.1275974 -0.67168611  0.30645728  0.55805638 -0.13618780
Manuf   0.61154243 -0.1680577 -0.27288633 -0.13684076 -0.10204211 -0.70297051
Pop     0.57782195 -0.2224533 -0.35037413 -0.07248126  0.07806551  0.69464131
Wind    0.35383877  0.1307915  0.29725334  0.86942583  0.11326688 -0.02452501
Precip -0.04080701  0.6228578 -0.50456294  0.17114826 -0.56818342  0.06062222
Days    0.23791593  0.7077653  0.09308852 -0.31130693  0.58000387 -0.02196062

Pareciera que en este caso necesito la tercer componente,

cumsum(resultado$sdev) / sum (resultado$sdev)
[1] 0.2804796 0.5122759 0.7357882 0.9008098 0.9648726 1.0000000

Osea necesito 3 components para el 70% y 40 para el 90%.

El ejercicio pretende que pensemos si hacer PCA sobre la matriz de covarianza o la de correlacion, en realidad al standarizar es lo mismo. El unico caso donde podemos no estandarizar es si las variables estan en la misma escala y nos importan las varianzas. Es decir, que mas varianza pueda afectar mas el resultado.

Componentes principales: miro su covarianza con las variables originales (recordemos componente distinto de direccion principal). Componente es una vez proyectado

La primer componente contrapone Temperatura con Manuf, Pop y Wind La segunda tiene una influencia positiva de las variables de precipitacion y negativa de todo lo otro. La tercera se ve influenciada negativamente por precipitacion y temperatura y positivamente por el viento.

Siempre recordemos esta intepretacion es siempre relativa al promedio de las variables.

library(factoextra)
fviz_pca_biplot(
  resultado,
 axes = c(1,2),
  repel    = TRUE,          # evita solapamiento de etiquetas
  legend.title = list(fill = "Observ./Var.")
) +
  ggtitle("Biplot") +
  theme_minimal()

library(factoextra)
fviz_pca_biplot(
  resultado,
 axes = c(2, 3),
  repel    = TRUE,          # evita solapamiento de etiquetas
  legend.title = list(fill = "Observ./Var.")
) +
  ggtitle("Biplot") +
  theme_minimal()

Reconstruccion de las variables originales


proyectar <- function(resultado, k, ciudad) {
  a <- t(resultado$rotation[,1:k])
  b <- t(as.matrix(polucion[ciudad,]))
  a%*% b  
}


pr <- proyectar(resultado, 2, "Buffalo")
reconstruir <- function(resultado, proyectado, k) {
  resultado$rotation[,1:k] %*% proyectado 
}
error_reconstruccion <- function(resultado, k, ciudad) {
  norm(reconstruir(resultado, proyectar(resultado, k, ciudad), k) - t( as.matrix(polucion[ciudad,])))  
}

error_reconstruccion(resultado, 2, "Buffalo")
[1] 738.3217
error_reconstruccion(resultado, 3, "Buffalo")
[1] 328.5152
error_reconstruccion(resultado, 4, "Buffalo")
[1] 243.8951
error_reconstruccion(resultado, 5, "Buffalo")
[1] 63.31033

Una extrema:

ciudad <- "Phoenix"
error_reconstruccion(resultado, 2,  ciudad)
[1] 858.4979
error_reconstruccion(resultado, 3,  ciudad)
[1] 500.6273
error_reconstruccion(resultado, 4,  ciudad)
[1] 443.1274
error_reconstruccion(resultado, 5,  ciudad)
[1] 401.1431

Una promedio

ciudad <- "Cincinnati"
error_reconstruccion(resultado, 2,  ciudad)
[1] 785.5298
error_reconstruccion(resultado, 3,  ciudad)
[1] 254.251
error_reconstruccion(resultado, 4,  ciudad)
[1] 150.3578
error_reconstruccion(resultado, 5,  ciudad)
[1] 29.79927
rownames(polucion) %>% purrr::map_vec(function(ciudad) error_reconstruccion(resultado, 2,  ciudad)) %>% var()
[1] 638187.9

rownames(polucion) %>% purrr::map_vec(function(ciudad) error_reconstruccion(resultado, 3,  ciudad)) %>% var()
[1] 53397.83

rownames(polucion) %>% purrr::map_vec(function(ciudad) error_reconstruccion(resultado, 4,  ciudad)) %>% var()
[1] 13752.1

LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKYGBge3J9CnBvbHVjaW9uIDwtIHJlYWQudGFibGUoIlIvdmlzdWFsaXphY2lvbi9wcmFjdGljYSAxL2RhdG9zX3ByYWN0aWNhXzEvZGF0YS11c2Fpci50eHQiLCBoZWFkZXI9VFJVRSkKcm93bmFtZXMocG9sdWNpb24pIDwtIHBvbHVjaW9uJENpdHkKcG9sdWNpb24gPC0gcG9sdWNpb24gJT4lIHNlbGVjdCgtYygiU08yIiwgIkNpdHkiKSkKCnBvbHVjaW9uIApgYGAKYGBge3J9CmNvcnJwbG90Ojpjb3JycGxvdChjb3IocG9sdWNpb24pKQpgYGAKRGlhcyBzb24gcHJlY2lwaXRhY2lvbmVzIGFsIGHDsW8KUHJlY2lwOiBwcmVjaXBpdGFjb24gbWVkaWEgYW51YWwgZW4gcHVsZ2FkYXMKCldpbmQ6IHZlbG9jaWRhZAoKTWFudWY6IGNhbml0ZGFkIGRlIGVtcHJlc2FzClBvcDogUG9wdWxhdGlvbgoKCmBgYHtyfQoKcmVzdWx0YWRvIDwtIHByY29tcChwb2x1Y2lvbiwgY2VudGVyID0gVFJVRSwgc2NhbGUuID0gVFJVRSkKcmVzdWx0YWRvIApgYGAKYGBge3J9CmZ2aXpfZWlnKHJlc3VsdGFkbyxjaG9pY2U9InZhcmlhbmNlIikgCgpgYGAKYGBge3J9CmZ2aXpfcGNhX3ZhcihyZXN1bHRhZG8sIGNvbC52YXIgPSAic3RlZWxibHVlIikKCmBgYAoKClBhcmVjaWVyYSBxdWUgZW4gZXN0ZSBjYXNvIG5lY2VzaXRvIGxhIHRlcmNlciBjb21wb25lbnRlLApgYGB7cn0KY3Vtc3VtKHJlc3VsdGFkbyRzZGV2KSAvIHN1bSAocmVzdWx0YWRvJHNkZXYpCmBgYAoKT3NlYSBuZWNlc2l0byAzIGNvbXBvbmVudHMgcGFyYSBlbCA3MCUgeSA0MCBwYXJhIGVsIDkwJS4KCkVsIGVqZXJjaWNpbyBwcmV0ZW5kZSBxdWUgcGVuc2Vtb3Mgc2kgaGFjZXIgUENBIHNvYnJlIGxhIG1hdHJpeiBkZSBjb3ZhcmlhbnphIG8gbGEgZGUgY29ycmVsYWNpb24sIGVuIHJlYWxpZGFkIGFsIHN0YW5kYXJpemFyIGVzIGxvIG1pc21vLiBFbCB1bmljbyBjYXNvIGRvbmRlIHBvZGVtb3Mgbm8gZXN0YW5kYXJpemFyIGVzIHNpIGxhcyB2YXJpYWJsZXMgZXN0YW4gZW4gbGEgbWlzbWEgZXNjYWxhIHkgbm9zIGltcG9ydGFuIGxhcyB2YXJpYW56YXMuIEVzIGRlY2lyLCBxdWUgbWFzIHZhcmlhbnphIHB1ZWRhIGFmZWN0YXIgbWFzIGVsIHJlc3VsdGFkby4KCkNvbXBvbmVudGVzIHByaW5jaXBhbGVzOiBtaXJvIHN1IGNvdmFyaWFuemEgY29uIGxhcyB2YXJpYWJsZXMgb3JpZ2luYWxlcyAocmVjb3JkZW1vcwpjb21wb25lbnRlIGRpc3RpbnRvIGRlIGRpcmVjY2lvbiBwcmluY2lwYWwpLiBDb21wb25lbnRlIGVzIHVuYSB2ZXogcHJveWVjdGFkbwpgYGB7cn0KCmNvcnJwbG90Ojpjb3JycGxvdChjb3IocmVzdWx0YWRvJHgscG9sdWNpb24pKQoKYGBgCgpMYSBwcmltZXIgY29tcG9uZW50ZSBjb250cmFwb25lIFRlbXBlcmF0dXJhIGNvbiBNYW51ZiwgUG9wIHkgV2luZApMYSBzZWd1bmRhIHRpZW5lIHVuYSBpbmZsdWVuY2lhIHBvc2l0aXZhIGRlIGxhcyB2YXJpYWJsZXMgZGUgcHJlY2lwaXRhY2lvbiB5IG5lZ2F0aXZhIGRlIHRvZG8gbG8gb3Ryby4KTGEgdGVyY2VyYSBzZSB2ZSBpbmZsdWVuY2lhZGEgbmVnYXRpdmFtZW50ZSBwb3IgcHJlY2lwaXRhY2lvbiB5IHRlbXBlcmF0dXJhIHkgcG9zaXRpdmFtZW50ZSBwb3IgZWwgdmllbnRvLgoKU2llbXByZSByZWNvcmRlbW9zIGVzdGEgaW50ZXByZXRhY2lvbiBlcyBzaWVtcHJlIHJlbGF0aXZhIGFsIHByb21lZGlvIGRlIGxhcyB2YXJpYWJsZXMuCgoKYGBge3J9CmxpYnJhcnkoZmFjdG9leHRyYSkKZnZpel9wY2FfYmlwbG90KAogIHJlc3VsdGFkbywKIGF4ZXMgPSBjKDEsMiksCiAgcmVwZWwgICAgPSBUUlVFLCAgICAgICAgICAjIGV2aXRhIHNvbGFwYW1pZW50byBkZSBldGlxdWV0YXMKICBsZWdlbmQudGl0bGUgPSBsaXN0KGZpbGwgPSAiT2JzZXJ2Li9WYXIuIikKKSArCiAgZ2d0aXRsZSgiQmlwbG90IikgKwogIHRoZW1lX21pbmltYWwoKQpgYGAKCgpgYGB7cn0KbGlicmFyeShmYWN0b2V4dHJhKQpmdml6X3BjYV9iaXBsb3QoCiAgcmVzdWx0YWRvLAogYXhlcyA9IGMoMiwgMyksCiAgcmVwZWwgICAgPSBUUlVFLCAgICAgICAgICAjIGV2aXRhIHNvbGFwYW1pZW50byBkZSBldGlxdWV0YXMKICBsZWdlbmQudGl0bGUgPSBsaXN0KGZpbGwgPSAiT2JzZXJ2Li9WYXIuIikKKSArCiAgZ2d0aXRsZSgiQmlwbG90IikgKwogIHRoZW1lX21pbmltYWwoKQpgYGAKUmVjb25zdHJ1Y2Npb24gZGUgbGFzIHZhcmlhYmxlcyBvcmlnaW5hbGVzCgpgYGB7cn0KCnByb3llY3RhciA8LSBmdW5jdGlvbihyZXN1bHRhZG8sIGssIGNpdWRhZCkgewogIGEgPC0gdChyZXN1bHRhZG8kcm90YXRpb25bLDE6a10pCiAgYiA8LSB0KGFzLm1hdHJpeChwb2x1Y2lvbltjaXVkYWQsXSkpCiAgYSUqJSBiICAKfQoKCnByIDwtIHByb3llY3RhcihyZXN1bHRhZG8sIDIsICJCdWZmYWxvIikKcmVjb25zdHJ1aXIgPC0gZnVuY3Rpb24ocmVzdWx0YWRvLCBwcm95ZWN0YWRvLCBrKSB7CiAgcmVzdWx0YWRvJHJvdGF0aW9uWywxOmtdICUqJSBwcm95ZWN0YWRvIAp9CmBgYAoKYGBge3J9CmVycm9yX3JlY29uc3RydWNjaW9uIDwtIGZ1bmN0aW9uKHJlc3VsdGFkbywgaywgY2l1ZGFkKSB7CiAgbm9ybShyZWNvbnN0cnVpcihyZXN1bHRhZG8sIHByb3llY3RhcihyZXN1bHRhZG8sIGssIGNpdWRhZCksIGspIC0gdCggYXMubWF0cml4KHBvbHVjaW9uW2NpdWRhZCxdKSkpICAKfQoKZXJyb3JfcmVjb25zdHJ1Y2Npb24ocmVzdWx0YWRvLCAyLCAiQnVmZmFsbyIpCmVycm9yX3JlY29uc3RydWNjaW9uKHJlc3VsdGFkbywgMywgIkJ1ZmZhbG8iKQplcnJvcl9yZWNvbnN0cnVjY2lvbihyZXN1bHRhZG8sIDQsICJCdWZmYWxvIikKZXJyb3JfcmVjb25zdHJ1Y2Npb24ocmVzdWx0YWRvLCA1LCAiQnVmZmFsbyIpCgpgYGAKVW5hIGV4dHJlbWE6CmBgYHtyfQpjaXVkYWQgPC0gIlBob2VuaXgiCmVycm9yX3JlY29uc3RydWNjaW9uKHJlc3VsdGFkbywgMiwgIGNpdWRhZCkKZXJyb3JfcmVjb25zdHJ1Y2Npb24ocmVzdWx0YWRvLCAzLCAgY2l1ZGFkKQplcnJvcl9yZWNvbnN0cnVjY2lvbihyZXN1bHRhZG8sIDQsICBjaXVkYWQpCmVycm9yX3JlY29uc3RydWNjaW9uKHJlc3VsdGFkbywgNSwgIGNpdWRhZCkKYGBgClVuYSBwcm9tZWRpbwpgYGB7cn0KY2l1ZGFkIDwtICJDaW5jaW5uYXRpIgplcnJvcl9yZWNvbnN0cnVjY2lvbihyZXN1bHRhZG8sIDIsICBjaXVkYWQpCmVycm9yX3JlY29uc3RydWNjaW9uKHJlc3VsdGFkbywgMywgIGNpdWRhZCkKZXJyb3JfcmVjb25zdHJ1Y2Npb24ocmVzdWx0YWRvLCA0LCAgY2l1ZGFkKQplcnJvcl9yZWNvbnN0cnVjY2lvbihyZXN1bHRhZG8sIDUsICBjaXVkYWQpCmBgYApgYGB7cn0Kcm93bmFtZXMocG9sdWNpb24pICU+JSBwdXJycjo6bWFwX3ZlYyhmdW5jdGlvbihjaXVkYWQpIGVycm9yX3JlY29uc3RydWNjaW9uKHJlc3VsdGFkbywgMiwgIGNpdWRhZCkpICU+JSB2YXIoKQpgYGAKYGBge3J9CnJvd25hbWVzKHBvbHVjaW9uKSAlPiUgcHVycnI6Om1hcF92ZWMoZnVuY3Rpb24oY2l1ZGFkKSBlcnJvcl9yZWNvbnN0cnVjY2lvbihyZXN1bHRhZG8sIDIsICBjaXVkYWQpKSAlPiUgaGlzdCgpCmBgYAoKYGBge3J9CnJvd25hbWVzKHBvbHVjaW9uKSAlPiUgcHVycnI6Om1hcF92ZWMoZnVuY3Rpb24oY2l1ZGFkKSBlcnJvcl9yZWNvbnN0cnVjY2lvbihyZXN1bHRhZG8sIDMsICBjaXVkYWQpKSAlPiUgdmFyKCkKYGBgCmBgYHtyfQpyb3duYW1lcyhwb2x1Y2lvbikgJT4lIHB1cnJyOjptYXBfdmVjKGZ1bmN0aW9uKGNpdWRhZCkgZXJyb3JfcmVjb25zdHJ1Y2Npb24ocmVzdWx0YWRvLCAzLCAgY2l1ZGFkKSkgJT4lIGhpc3QoKQpgYGAKCmBgYHtyfQpyb3duYW1lcyhwb2x1Y2lvbikgJT4lIHB1cnJyOjptYXBfdmVjKGZ1bmN0aW9uKGNpdWRhZCkgZXJyb3JfcmVjb25zdHJ1Y2Npb24ocmVzdWx0YWRvLCA0LCAgY2l1ZGFkKSkgJT4lIHZhcigpCmBgYApgYGB7cn0Kcm93bmFtZXMocG9sdWNpb24pICU+JSBwdXJycjo6bWFwX3ZlYyhmdW5jdGlvbihjaXVkYWQpIGVycm9yX3JlY29uc3RydWNjaW9uKHJlc3VsdGFkbywgNCwgIGNpdWRhZCkpICU+JSBoaXN0KCkKCmBgYAoKCgo=