Carguemos los datos que hemos obtenido en el script anterior

dt <- readRDS("dta/datos-criminalidad.RDS")

Hemos visto en los scripts anteriores cómo agrupar observaciones que son similares. Nuestro objetivo ahora es agrupar dimensiones de tal forma que podamos representar nuestros datos utilizando menos variables.

pcm <- princomp(scale(dt))
summary(pcm)

Podemos extraer los coeficientes asociados a cada una de las dimensiones para interpretar en qué sentido se agrupan los diferentes componentes:

pcm$loadings

La cuestión restante es ver cuántas dimensiones mantener para poder representar los datos con la menor pérdida. Podemos observar las varianzas asociadas a cada dimensión y comprobar el descenso marginal asociada a cada componente añadido.

plot(pcm, type="l")

En este caso, la tercera dimensión apenas reduce la varianza acumulada y con solo dos dimensiones podemos representar los datos con un 76% de precisión. Dado eso, podemos interpretar los resultados usando biplot:

biplot(pcm)

que se corresponde con los pesos y dirección de los componentes tal y como vemos aquí:

as.matrix(pcm$loadings[, 1:2])

¿Cuál es la representación de los datos bajo los componentes que acabamos de calcular?

as.matrix(scale(dt)) %*% as.matrix(pcm$loadings[, 1:2])

Podemos comprobar que con el nuevo índice las observaciones que hemos detectado antes que tenían un patrón de criminalidad diferenciado vuelven a destacarse.