Sie sind auf Seite 1von 52

Componentes Principales

Freddy Hernndez Barajas

1 / 52
Introduccin

En los tiempos modernos es usual tener gran cantidad de datos y es necesario contar con
herramientas para manejarlos.

2 / 52
Componentes principales

Es una herramienta para reducir el nmero de variables originales por nuevas variables o
componentes incorrelacionadas.

3 / 52
Introduccin

Suppose [X1 , X2 , . . . , Xp ] = X 0 is a set of p random variables, with mean vector and


variance-covariance matrix .

I want to define p linear combinations of X 0 that represent the information in X 0


more parsimoniously.

Specifically, find a 1 , . . . , a p such that a 01 X, . . . , a 0p X gives the same information as X 0 ,


but the new random variables, a 01 X, . . . , a 0p X, are nicer.

4 / 52
Introduccin

Let 1 2 p 0 be the p roots (eigenvalues) of the matrix , and let


a 1 , . . . , a p be the corresponding eigenvectors.

If some roots are not distinct, I can still pick corresponding eigenvectors to be
orthogonal.

Choose an eigenvector a i so a 0i a i = 1, i.e., a normalized eigenvector. Then, a 0i X is the


i th principal component of the random variables in X 0 .

5 / 52
Propiedades

1 Var (a 0i X) = a 0i a i = i .

2 a i and a j are orthogonal, i.e., a 0i a j = 0.

3 Cov (a 0i X, a 0j X) = a 0i a j = a 0i j a j = j a 0i a j = 0.

4 Tr () = 1 + + p = sum of variances for all p principal components, and for


X1 , . . . , Xp .

5 The importance of the i th principal component is i /Tr ().

6 / 52
Ejemplo
Supongamos que tenemos dos variables cuantitativas X1 y X2 como se muestra a continua-
cin. Queremos encontrar un eje sobre el cual proyectar los puntos de tal manera que las
sombras tengan la mayor variabilidad.
1
0
x2

1
2

2 1 0 1 2 3

x1
7 / 52
Ejemplo

Proyectando los puntos sobre los vectores (1, 0)T , (0, 1)T y (1/ 2, 1/ 2)T .
Var= 0.92

0.4
1

0.3
Density
0

0.2
x2

0.1
2

0.0
2 1 0 1 2 3 3 2 1 0 1 2 3 4

x1 N = 100 Bandwidth = 0.3353

Var= 0.78 Var= 1.18


0.4

0.30
0.3

0.20
Density

Density
0.2

0.10
0.1

0.00
0.0

3 2 1 0 1 2 4 2 0 2 4

N = 100 Bandwidth = 0.3162 N = 100 Bandwidth = 0.3895

8 / 52
Propsito

9 / 52
Ejemplo 1

A continuacin una base de datos sobre medidas corporales a 36 estudiantes de la


universidad el ao pasado.

myurl <- 'http://tinyurl.com/zmuzd7v'


datos <- read.table(file=myurl, header=T, sep='')
head(datos)

## edad peso altura sexo muneca biceps


## 1 43 87.3 188.0 Hombre 12.2 35.8
## 2 65 80.0 174.0 Hombre 12.0 35.0
## 3 45 82.3 176.5 Hombre 11.2 38.5
## 4 37 73.6 180.3 Hombre 11.2 32.2
## 5 55 74.1 167.6 Hombre 11.8 32.9
## 6 33 85.9 188.0 Hombre 12.4 38.5

10 / 52
Ejemplo 1

150 160 170 180 190 25 30 35 40

40 50 60 70 80 90
peso
150 160 170 180 190

altura

12
11
muneca

10
9
40
35

biceps
30
25

40 50 60 70 80 90 100 9 10 11 12

11 / 52
Ejemplo 1

dt <- datos[, c('peso', 'altura', 'muneca', 'biceps')]


Sigma <- var(dt)
Sigma

## peso altura muneca biceps


## peso 221.08713 124.728698 14.844667 70.738381
## altura 124.72870 110.673968 8.156476 39.021048
## muneca 14.84467 8.156476 1.381714 5.400571
## biceps 70.73838 39.021048 5.400571 27.398857

sum(diag(Sigma))

## [1] 360.5417

12 / 52
Ejemplo 1

Eigenvalores e eigenvectores de los datos

ei <- eigen(Sigma)
ei

## $values
## [1] 325.1349702 30.8091070 4.3076215 0.2899759
##
## $vectors
## [,1] [,2] [,3] [,4]
## [1,] 0.81049522 0.47697293 0.33927752 0.022024447
## [2,] 0.52109937 -0.85221951 -0.04660443 -0.002319266
## [3,] 0.05465892 0.04305245 -0.12686657 -0.989476509
## [4,] 0.26184984 0.21063052 -0.93092624 0.142988748

sum(ei$values)

## [1] 360.5417

13 / 52
Ejemplo 1

Eigenvalores e eigenvectores de los datos escalados


dt.s <- scale(dt) # Datos escalados
sum(apply(dt.s, MARGIN=2, FUN=var))

## [1] 4

ei <- eigen(var(dt.s))
ei

## $values
## [1] 3.40781664 0.37981249 0.13515565 0.07721522
##
## $vectors
## [,1] [,2] [,3] [,4]
## [1,] -0.5229877 -0.0001370885 0.4515021 0.7229313
## [2,] -0.4613002 -0.8346529032 -0.2363538 -0.1862619
## [3,] -0.4985496 0.4607270199 -0.7282171 0.0942266
## [4,] -0.5149118 0.3018031239 0.4582385 -0.6586336

sum(ei$values)

## [1] 4

14 / 52
Ejemplo 1

PCA usando la funcin princomp de stats

mod <- prcomp(~ peso + altura + muneca + biceps,


data=datos, scale=TRUE)
mod

## Standard deviations:
## [1] 1.8460273 0.6162893 0.3676352 0.2778763
##
## Rotation:
## PC1 PC2 PC3 PC4
## peso -0.5229877 0.0001370885 -0.4515021 0.7229313
## altura -0.4613002 0.8346529032 0.2363538 -0.1862619
## muneca -0.4985496 -0.4607270199 0.7282171 0.0942266
## biceps -0.5149118 -0.3018031239 -0.4582385 -0.6586336

15 / 52
Ejemplo 1

summary(mod)

## Importance of components:
## PC1 PC2 PC3 PC4
## Standard deviation 1.8460 0.61629 0.36764 0.2779
## Proportion of Variance 0.8519 0.09495 0.03379 0.0193
## Cumulative Proportion 0.8519 0.94691 0.98070 1.0000

16 / 52
Ejemplo 8.2

Suponga que se tiene la siguiente matriz de covarianzas:


 
1 4
= (1)
4 100
y su correspondiente matriz de correlaciones:
 
1 0.4
= (2)
0.4 1
Obtener las componentes principales y comparar.

17 / 52
Ejemplo 8.2

A continuacin las componentes obtenidas con .

summary(princomp(covmat=Sigma), loadings = TRUE)

## Importance of components:
## Comp.1 Comp.2
## Standard deviation 10.0080644 0.915776619
## Proportion of Variance 0.9916966 0.008303434
## Cumulative Proportion 0.9916966 1.000000000
##
## Loadings:
## Comp.1 Comp.2
## Var 1 -0.999
## Var 2 0.999

18 / 52
Ejemplo 8.2

A continuacin las componentes obtenidas con .

summary(princomp(covmat=rho), loadings = TRUE)

## Importance of components:
## Comp.1 Comp.2
## Standard deviation 1.183216 0.7745967
## Proportion of Variance 0.700000 0.3000000
## Cumulative Proportion 0.700000 1.0000000
##
## Loadings:
## Comp.1 Comp.2
## Var 1 0.707 -0.707
## Var 2 0.707 0.707

19 / 52
Ejemplo 2 de Torsten & Hothorn (2011)

The data frets give the head lengths and head breadths (mm) for each of the first two
adult sons in 25 families. Here we shall use only the head lengths (l1 and l2).

20 / 52
Ejemplo 2 de Torsten & Hothorn (2011)

require(boot) # Donde los datos estn


head(frets)

## l1 b1 l2 b2
## 1 191 155 179 145
## 2 195 149 201 152
## 3 181 148 185 149
## 4 183 153 188 149
## 5 176 144 171 142
## 6 208 157 192 152

dt <- frets[, c('l1', 'l2')]

21 / 52
Ejemplo 2 de Torsten & Hothorn (2011)

colMeans(dt)

## l1 l2
## 185.72 183.84

var(dt)

## l1 l2
## l1 95.29333 69.66167
## l2 69.66167 100.80667

22 / 52
Ejemplo 2 de Torsten & Hothorn (2011)

head_pca <- princomp(x=dt, cor=FALSE)


summary(head_pca, loadings=T)

## Importance of components:
## Comp.1 Comp.2
## Standard deviation 12.6907660 5.2154059
## Proportion of Variance 0.8555135 0.1444865
## Cumulative Proportion 0.8555135 1.0000000
##
## Loadings:
## Comp.1 Comp.2
## l1 0.693 -0.721
## l2 0.721 0.693

23 / 52
Ejemplo 2 de Torsten & Hothorn (2011)

Qu elementos hay dentro del objeto head_pca?

names(head_pca)

## [1] "sdev" "loadings" "center" "scale" "n.obs" "scores"


## [7] "call"

Tarea: explorar los elementos.

24 / 52
Ejemplo 2 de Torsten & Hothorn (2011)

Las dos componentes son:

y1 = 0.693x1 + 0.721x2 (3)


y2 = 0.721x1 + 0.693x2 (4)

25 / 52
Ejemplo 2 de Torsten & Hothorn (2011)

Para calcular el valor de las componentes para una persona con x1 = 191 y x2 = 179 se
hace:

y1 = 0.693 (191 185.72) + 0.721 (179 183.84) = 0.169 (5)


y2 = 0.721 (191 185.72) + 0.693 (179 183.84) = 7.61 (6)

26 / 52
Ejemplo 2 de Torsten & Hothorn (2011)

Suponga que se desean estimar las componentes para dos nuevas observaciones que estn
el el objeto new.dt.
Cmo predecir las componentes automticamente?

new.dt <- matrix(c(191, 179,


185, 196), byrow=T, ncol=2)
colnames(new.dt) <- c('l1', 'l2')
predict(object=head_pca, newdata=new.dt)

## Comp.1 Comp.2
## [1,] 0.1695614 -7.160674
## [2,] 8.2678168 8.945793

27 / 52
Ejemplo 2 de Torsten & Hothorn (2011)

Diagrama de dispersin original con las componentes y1 y y2 .


200
190
Second son's head length

180
170
160

170 180 190 200

First son's head length (mm)

28 / 52
Ejemplo 2 de Torsten & Hothorn (2011)

Diagrama de dispersin con las componentes y1 y y2 usando plot(head_pca$scores).


10
5
0
y2

5
10

30 20 10 0 10 20

y1

29 / 52
Ejemplo 3 de Torsten & Hothorn (2011)

The pentathlon for women was first held in Germany in 1928.

30 / 52
Ejemplo 3 de Torsten & Hothorn (2011)

31 / 52
Ejemplo 3 de Torsten & Hothorn (2011)

require(MVA)
head(heptathlon)

## hurdles highjump shot run200m longjump javelin


## Joyner-Kersee (USA) 12.69 1.86 15.80 22.56 7.27 45.66
## John (GDR) 12.85 1.80 16.23 23.65 6.71 42.56
## Behmer (GDR) 13.20 1.83 14.20 23.10 6.68 44.54
## Sablovskaite (URS) 13.61 1.80 15.23 23.92 6.25 42.78
## Choubenkova (URS) 13.51 1.74 14.76 23.93 6.32 47.46
## Schulz (GDR) 13.75 1.83 13.50 24.65 6.33 42.82
## run800m score
## Joyner-Kersee (USA) 128.51 7291
## John (GDR) 126.12 6897
## Behmer (GDR) 124.20 6858
## Sablovskaite (URS) 132.24 6540
## Choubenkova (URS) 127.90 6540
## Schulz (GDR) 125.79 6411

32 / 52
Ejemplo 3 de Torsten & Hothorn (2011)

Vamos a transformar los tiempos para que entre ms alto su valor mejor el desempeo.

heptathlon$hurdles <- with(heptathlon, max(hurdles)-hurdles)


heptathlon$run200m <- with(heptathlon, max(run200m)-run200m)
heptathlon$run800m <- with(heptathlon, max(run800m)-run800m)

33 / 52
Ejemplo 3 de Torsten & Hothorn (2011)

Matriz de correlaciones usando la funcin corrplot del paquete corrplot,

highjump

longjump
run200m

run800m
hurdles

javelin
shot
1

hurdles 1 0.81 0.65 0.77 0.91 0.01 0.78


0.8

0.6
highjump 1 0.44 0.49 0.78 0 0.59

0.4

shot 1 0.68 0.74 0.27 0.42


0.2

run200m 1 0.82 0.33 0.62 0

0.2
longjump 1 0.07 0.7

0.4

javelin 1 0.02 0.6

0.8
run800m 1

34 / 52
Ejemplo 3 de Torsten & Hothorn (2011)

Diagramas de dispersin.
1.50 1.65 1.80 0 1 2 3 4 36 40 44

3
hurdles

2
1
0
1.70

highjump
1.50

16
shot

13
10
0 1 2 3 4

run200m

7.0
longjump

6.0
5.0
36 40 44

javelin

40
run800m

20
0
0 1 2 3 10 12 14 16 5.0 6.0 7.0 0 10 20 30 40

35 / 52
Ejemplo 3 de Torsten & Hothorn (2011)

Matriz de correlaciones sin Launa (PNG).

highjump

longjump
run200m

run800m
hurdles

javelin
shot
1

hurdles 1 0.58 0.77 0.83 0.89 0.33 0.56


0.8

0.6
highjump 1 0.46 0.39 0.66 0.35 0.15

0.4

shot 1 0.67 0.78 0.34 0.41


0.2

run200m 1 0.81 0.47 0.57 0

0.2
longjump 1 0.29 0.52

0.4

javelin 1 0.26 0.6

0.8
run800m 1

36 / 52
Ejemplo 3 de Torsten & Hothorn (2011)

Diagramas de dispersin sin Launa (PNG).


1.70 1.80 0 1 2 3 4 36 40 44

3.5
hurdles

2.5
1.5
1.80

highjump
1.70

16
shot

13
10
0 1 2 3 4

run200m

6.5
longjump

5.5
36 40 44

javelin

40
30
run800m

20
1.5 2.5 3.5 10 12 14 16 5.5 6.0 6.5 7.0 20 25 30 35 40

37 / 52
Ejemplo 3 de Torsten & Hothorn (2011)

hep_pca <- prcomp(heptathlon[, -8], scale = TRUE) # without score


hep_pca

## Standard deviations:
## [1] 2.0793370 0.9481532 0.9109016 0.6831967 0.5461888 0.3374549 0.2620420
##
## Rotation:
## PC1 PC2 PC3 PC4 PC5
## hurdles -0.4503876 0.05772161 -0.1739345 0.04840598 -0.19889364
## highjump -0.3145115 -0.65133162 -0.2088272 -0.55694554 0.07076358
## shot -0.4024884 -0.02202088 -0.1534709 0.54826705 0.67166466
## run200m -0.4270860 0.18502783 0.1301287 0.23095946 -0.61781764
## longjump -0.4509639 -0.02492486 -0.2697589 -0.01468275 -0.12151793
## javelin -0.2423079 -0.32572229 0.8806995 0.06024757 0.07874396
## run800m -0.3029068 0.65650503 0.1930020 -0.57418128 0.31880178
## PC6 PC7
## hurdles 0.84665086 -0.06961672
## highjump -0.09007544 0.33155910
## shot -0.09886359 0.22904298
## run200m -0.33279359 0.46971934
## longjump -0.38294411 -0.74940781
## javelin 0.07193437 -0.21108138
## run800m -0.05217664 0.07718616

38 / 52
Ejemplo 3 de Torsten & Hothorn (2011)

Los coeficientes para la primera componente y1 .

a1 <- hep_pca$rotation[, 1]
a1

## hurdles highjump shot run200m longjump javelin


## -0.4503876 -0.3145115 -0.4024884 -0.4270860 -0.4509639 -0.2423079
## run800m
## -0.3029068

39 / 52
Ejemplo 3 de Torsten & Hothorn (2011)

The center and the scaling used by prcomp internally can be extracted from the hep_pca
via

center <- hep_pca$center


center

## hurdles highjump shot run200m longjump javelin run800m


## 2.687500 1.793750 13.173333 2.023750 6.205417 41.278333 28.516667

scale <- hep_pca$scale


scale

## hurdles highjump shot run200m longjump javelin


## 0.51456398 0.05232112 1.49714995 0.93676972 0.40165938 3.46870690
## run800m
## 6.14724800

40 / 52
Ejemplo 3 de Torsten & Hothorn (2011)
Para obtener la primera componente y1 para las deportistas:

hm <- as.matrix(heptathlon[, -score])


drop(scale(hm, center=center, scale=scale) %*% hep_pca$rotation[, 1])

## Joyner-Kersee (USA) John (GDR) Behmer (GDR)


## -4.757530189 -3.147943402 -2.926184760
## Sablovskaite (URS) Choubenkova (URS) Schulz (GDR)
## -1.288135516 -1.503450994 -0.958467101
## Fleming (AUS) Greiner (USA) Lajbnerova (CZE)
## -0.953445060 -0.633239267 -0.381571974
## Bouraga (URS) Wijnsma (HOL) Dimitrova (BUL)
## -0.522322004 -0.217701500 -1.075984276
## Scheider (SWI) Braun (FRG) Ruotsalainen (FIN)
## 0.003014986 0.109183759 0.208868056
## Yuping (CHN) Hagger (GB) Brown (USA)
## 0.232507119 0.659520046 0.756854602
## Mulliner (GB) Hautenauve (BEL) Kytola (FIN)
## 1.880932819 1.828170404 2.118203163
## Geremias (BRA) Hui-Ing (TAI) Jeong-Mi (KOR)
## 2.770706272 3.901166920 3.896847898
41 / 52
Ejemplo 3 de Torsten & Hothorn (2011)

Otra forma sencilla de hacerlo es

predict(hep_pca)[, 1]

## Joyner-Kersee (USA) John (GDR) Behmer (GDR)


## -4.757530189 -3.147943402 -2.926184760
## Sablovskaite (URS) Choubenkova (URS) Schulz (GDR)
## -1.288135516 -1.503450994 -0.958467101
## Fleming (AUS) Greiner (USA) Lajbnerova (CZE)
## -0.953445060 -0.633239267 -0.381571974
## Bouraga (URS) Wijnsma (HOL) Dimitrova (BUL)
## -0.522322004 -0.217701500 -1.075984276
## Scheider (SWI) Braun (FRG) Ruotsalainen (FIN)
## 0.003014986 0.109183759 0.208868056
## Yuping (CHN) Hagger (GB) Brown (USA)
## 0.232507119 0.659520046 0.756854602
## Mulliner (GB) Hautenauve (BEL) Kytola (FIN)
## 1.880932819 1.828170404 2.118203163
## Geremias (BRA) Hui-Ing (TAI) Jeong-Mi (KOR)
## 2.770706272 3.901166920 3.896847898

42 / 52
Ejemplo 3 de Torsten & Hothorn (2011)

Tabla de resumen

summary(hep_pca)

## Importance of components:
## PC1 PC2 PC3 PC4 PC5 PC6
## Standard deviation 2.0793 0.9482 0.9109 0.68320 0.54619 0.33745
## Proportion of Variance 0.6177 0.1284 0.1185 0.06668 0.04262 0.01627
## Cumulative Proportion 0.6177 0.7461 0.8646 0.93131 0.97392 0.99019
## PC7
## Standard deviation 0.26204
## Proportion of Variance 0.00981
## Cumulative Proportion 1.00000

43 / 52
Ejemplo 3 de Torsten & Hothorn (2011)
Cuntas componentes se deben usar?
screeplot(hep_pca, type='l', lwd=3, main='', ylim=c(0, 5))
5
4
3
Variances

2
1
0

1 2 3 4 5 6 7

44 / 52
Ejemplo 3 de Torsten & Hothorn (2011)

Qu tanta relacin hay entre el score y la componente y1 .

cor(heptathlon$score, hep_pca$x[, 1])

## [1] -0.9931168

45 / 52
Ejemplo 3 de Torsten & Hothorn (2011)

Grfico de dispersin entre y1 y el score.

0
y1

5500 6000 6500 7000

Score

46 / 52
Ejemplo 3 de Torsten & Hothorn (2011)
Ubicacin de las atletas en el plano factorial usando plot_obspc de model.
model::plot_obspc(hep_pca, col='blue')

Hui

1.0 Joh Cho Mul


Bou Hau
Beh

0.5 Dim
Fle
Sch Gre Kyt Jeo
Sab
Ger
0.0 Hag
Joy
Wij
PC2

0.5
Laj Ruo

1.0

Sch
1.5
Bra

Yup
2.0 Bro

4 2 0 2 4

PC1
47 / 52
Ejemplo 3 de Torsten & Hothorn (2011)
Variables en el plano factorial usando plot_varpc de model.
model::plot_varpc(hep_pca, col='blue')

1.0

run800m

0.5

run200m
hurdles
PC2

0.0 shot
longjump

javelin

0.5
highjump

1.0

1.0 0.5 0.0 0.5 1.0

PC1
48 / 52
Ejemplo 3 de Torsten & Hothorn (2011)
El Biplot reune los dos grficos en 1.
biplot(hep_pca)

4 2 0 2 4
0.4

4
run800m
HuiIng (TAI)
0.2

Choubenkova (URS)
John (GDR)

2
Mulliner (GB)
Bouraga (URS) Hautenauve (BEL)
Behmer (GDR)
Dimitrova
Fleming (BUL)
(AUS)
run200m Greiner
Schulz (USA)
(GDR) Kytola (FIN)JeongMi (KOR)

hurdles Sablovskaite (URS)


Geremias (BRA)
0.0

0
longjump
shot Hagger (GB)
PC2

JoynerKersee (USA)
Wijnsma (HOL)

javelin Ruotsalainen
Lajbnerova (CZE)(FIN)
0.2

2
highjump Scheider (SWI)
Braun (FRG)
0.4

4
Yuping (CHN)
Brown (USA)

0.4 0.2 0.0 0.2 0.4

PC1

49 / 52
Funciones bsicas para componentes principales

princomp(formula, data, subset, na.action, x, cor, covmat)

prcomp(formula, data, subset, na.action, x, center, scale)

50 / 52
Respuestas a preguntas interesantes

D clic sobre el enlace para consultar las respuestas.


1 Why do the R functions princomp and prcomp give different eigenvalues? enlace
2 What is the difference between R functions prcomp and princomp? enlace
3 5 functions to do Principal Components Analysis in R. enlace

51 / 52
Recursos adicionales

1 Datos de las olimpiadas: https://www.olympic.org/rio-2016


2 Factoextra R Package: Easy Multivariate Data Analyses and Elegant Visualization:
http://www.sthda.com/english/wiki/
factoextra-r-package-easy-multivariate-data-analyses-and-elegant-visual

52 / 52

Das könnte Ihnen auch gefallen