En Álgebra matricial, se presentó la base matemática para el estudio del análisis multivariado y que es el requisito para iniciar con el tema.
Se describirá un conjunto de datos multivariantes y se describirá su estructura de dependencia. El análisis descriptivo es el primer paso para el análisis de grandes cantidade de datos, los conceptos utilizados para el desarrollo pertenecen principalmente a Cuadras (2014) y Peña (2013).
Las variables pueden ser cuantitativas, cuando su valor se exprese numéricamente, como la edad de una persona, su estatura o su renta, o cualitativas, cuando su valor sea un atributo o categoría, como el género, el color de los ojos o el municipio de nacimiento. Las variables cuantitativas pueden a su vez clasiÞcarse en continuas o de intervalo, cuando pueden tomar cualquier valor real en un intervalo, como la estatura, o discretas, cuando sólo toman valores enteros, como el número de hermanos. Las variables cualitativas pueden clasiÞcarse en binarias, cuando toman únicamente dos valores posibles, como el género (mujer, hombre) o generales, cuando toman muchos valores posibles, como el municipio de residencia.
Suponiendo que sobre los individuos \(w_{1}, ... , w_{n}\) se han observado las variables \(X_{1},...,X_{p}\). Sea \(x_{ij} = X_{j}(w_{i})\) la observación de la variable \(X_{j}\) sobre el individuo \(w_{i}\) La matriz de datos multivariantes es
\[ X = \begin{bmatrix} x_{11} & \cdots & x_{1j} & \cdots & x_{1p}\\ \vdots & \ddots & \vdots & \ddots & \vdots\\ x_{i1} & \cdots & x_{ij} & \cdots & x_{ip}\\ \vdots & \ddots & \vdots & \ddots & \vdots\\ x_{n1} & \cdots & x_{nj} & \cdots & x_{np} \end{bmatrix} \]
Las filas de \(X\) se identifican con los individuos y las columnas de \(X\) con las variables. Se indica:
\(x_{i}\) la fila i-ésima de \(X\), que se opera como un vector columna.
\(X_{j}\) la columna j-ésima de \(X\).
\(\overline{x} = (\overline{x}_{1},...,\overline{x}_{j},...,\overline{x}_{p})'\) el vector columna de las medias de las variables, siendo
\[ \overline{x}_{j} = \frac{1}{n} \sum_{i=1}^{n} x_{ij} \]
\[ S = \begin{bmatrix} s_{11} & s_{12} & \cdots & s_{1p}\\ s_{21} & s_{22} & \cdots & s_{2p}\\ \vdots & \vdots & \ddots & \vdots\\ s_{p1} & s_{p2} & \cdots & s_{pp} \end{bmatrix} \]
siendo
\[ \overline{s}_{jj'} = \frac{1}{n} \sum_{i=1}^{n} (x_{ij}-\overline{x}_{j})(x_{ij'}-\overline{x}_{j'}) \]
la covarianza entre las variables j, j’ Naturalmente, \(\overline{x}\) y \(S\) son medidas multivariantes de tendencia central y dispersión, respectivamente.
\[ R = \begin{bmatrix} 1 & r_{12} & \cdots & r_{1p}\\ r_{21} & 1 & \cdots &r_{2p}\\ \vdots & \vdots & \ddots & \vdots\\ r_{p1} & r_{p2} & \cdots & 1 \end{bmatrix}, \]
siendo \(r_{jj'} = cor(X_{j},X_{j'})\) el coeficiente de correlación (muestral) entre las variables \(X_{j},X_{j'}\). Este coeficiente viene dado por
\[ r_{jj'} = \frac{s_{jj'}}{s_{j} s_{j'}}, \]
donde \(s_{j} , s_{j'}\) son las desviaciones típicas.
Este ejemplo ha sido tomado de Peña (2013) y la solución adaptada a R.
Se tiene el conjunto de datos que presenta 34 observaciones y 3 variables. Las observaciones corresponden a distintas acciones que cotizan en el mercado continuo español y las variables a tres medidas de rentabilidad de estas acciones durante un período de tiempo. Las variables son : X1 es la rentabilidad efectiva por dividendos, X2 es la proporción de beneÞcios que va a dividendos y X3 el ratio entre precio por acción y beneficios.
library(readr)
library(moments)
acciones <- read_delim("acciones.csv", ";", escape_double = FALSE, trim_ws = TRUE)
## Parsed with column specification:
## cols(
## Obs. = col_double(),
## X1 = col_double(),
## X2 = col_double(),
## X3 = col_double()
## )
head(acciones)
## # A tibble: 6 x 4
## Obs. X1 X2 X3
## <dbl> <dbl> <dbl> <dbl>
## 1 1 3.4 89.7 30.2
## 2 2 5.1 55.7 9.9
## 3 3 4.5 52.3 11.5
## 4 4 3.5 47 11.2
## 5 5 5.9 42.7 7
## 6 6 5.1 30.6 6.9
a_descriptivo = matrix(
c(colMeans(acciones[2:4]),
sd(acciones$X1), sd(acciones$X2), sd(acciones$X3),
skewness(acciones$X1), skewness(acciones$X2), skewness(acciones$X3),
kurtosis(acciones$X1), kurtosis(acciones$X2), kurtosis(acciones$X3)
), nrow = 4, byrow = T)
colnames(a_descriptivo) <- c("X1", "X2", "X3")
rownames(a_descriptivo) <- c("Medias", "D. Típicas", "Coef. asimetría", "Coef. kurtosis")
a_descriptivo
## X1 X2 X3
## Medias 9.4205882 69.52647059 9.096765
## D. Típicas 5.3940360 24.00477615 4.750368
## Coef. asimetría 0.3729966 0.04637396 2.707049
## Coef. kurtosis 1.3828958 1.40013643 12.440638
Las medidas de asimetría y kurtosis indican un alejamiento de la distribución normal para las tres variables: las dos primeras tienen valores muy bajos de la kurtosis, lo que indica alta heterogeneidad, posiblemente por la presencia de dos grupos de datos distintos, y la tercera tiene alta kurtosis, lo que sugiere la presencia de valores atípicos.
Estas características son muy claras en los histogramas de las variables. La primera variable, rentabilidad efectiva por dividendos, x1, muestra dos grupos de acciones con comportamiento distinto. El histograma de la segunda variable, x2, muestra también dos grupos de acciones. Finalmente, la distribución de la tercera variable es muy asimétrica, con un valor atípico muy destacado. La evidencia disponible indica que las acciones pueden proba blemente dividirse en dos grupos más homogéneos. Sin embargo, vamos a ilustrar el análisis de todos los datos.
par(mfrow=c(2,2))
hist(acciones$X1, main = "Histograma de la rentabilidad \n por dividendos")
hist(acciones$X2, main = "Histograma de la proporción \n de beneficios que va a dividendos")
hist(acciones$X3, main = "Histograma del precio por \n acción con relación a los beneficios")
La matriz de varianzas y covarianzas de estas tres variables se presenta como sigue:
cov(acciones[2:4])
## X1 X2 X3
## X1 29.09562 100.44065 -15.70281
## X2 100.44065 576.22928 -18.54628
## X3 -15.70281 -18.54628 22.56599
Los elementos diagonales de esta matriz son los cuadrados de las desviaciones típicas. Como las dimensiones de las variables son distintas, no tiene sentido calcular medidas promedio. Los histogramas de las tres variables han mostrado una clara falta de normalidad. Tomando logaritmos, la matriz de covarianzas de las variables transformadas, se indica como sigue:
cor(acciones[2:4])
## X1 X2 X3
## X1 1.0000000 0.7757076 -0.6128248
## X2 0.7757076 1.0000000 -0.1626417
## X3 -0.6128248 -0.1626417 1.0000000
Si \(1 = (1,..., 1)'\) es el vector columna de unos de orden n x 1, y \(J = 11'\) es la matriz n x n de unos, ciertas características multivariantes se expresan mejor a partir de la matriz de centrado \(H\), definida como
\[ H = I - \frac{1}{n}J \]
I = diag(4)
J = matrix(1, 4, 4)
H = I - (1/4) * J
H
## [,1] [,2] [,3] [,4]
## [1,] 0.75 -0.25 -0.25 -0.25
## [2,] -0.25 0.75 -0.25 -0.25
## [3,] -0.25 -0.25 0.75 -0.25
## [4,] -0.25 -0.25 -0.25 0.75
Propiedades:
identical(t(H),H)
## [1] TRUE
identical(H%*%H,H)
## [1] TRUE
round(eigen(H)$values,1)
## [1] 1 1 1 0
# Primer valor propio
round(eigen(H)$values[1],1)
## [1] 1
# Primer vector propio
round(eigen(H)$vectors[,1],1)
## [1] 0.0 -0.3 -0.5 0.8
qr(H)$rank
## [1] 3
Sea \(X = (x_{ij})\) la matriz de datos. La matriz de datos centrados se obtiene restando a cada variable su media: \(X = (x_{ij} - \overline{x}_{j}\)). Esta matriz, así como el vector de medias, las matrices de covarianzas y correlaciones, tienen expresiones matriciales simples.
\(x' = \frac{1}{n}1'X\):
Matriz de datos centrados:
\[ \overline{X}= X - 1 \overline{x}' = HX \]
X <- read.csv("familia.csv")
X$n <- NULL
X = as.matrix(X)
H = diag(nrow(X)) - (1/nrow(X)) * matrix(1, nrow(X), nrow(X))
X_barra = H %*% X
X_barra
## x1 x2 y1 y2
## [1,] 3.6 3.88 2.6 -4.36
## [2,] 7.6 -2.12 24.6 2.64
## [3,] -6.4 -3.12 8.6 -0.36
## [4,] -4.4 1.88 11.6 -0.36
## [5,] -11.4 -7.12 -5.4 -7.36
## [6,] 20.6 5.88 -157.4 2.64
## [7,] 1.6 -1.12 13.6 -0.36
## [8,] 9.6 7.88 12.6 2.64
## [9,] 0.6 0.88 20.6 9.64
## [10,] 4.6 -1.12 10.6 1.64
## [11,] -1.4 9.88 2.6 8.64
## [12,] -8.4 -4.12 6.6 -2.36
## [13,] 7.6 1.88 -2.4 0.64
## [14,] 14.6 8.88 13.6 9.64
## [15,] 6.6 2.88 11.6 1.64
## [16,] -24.4 -14.12 -15.4 -19.36
## [17,] 7.6 3.88 6.6 8.64
## [18,] -1.4 1.88 -3.4 -1.36
## [19,] -6.4 -6.12 5.6 -3.36
## [20,] -12.4 -11.12 -11.4 -12.36
## [21,] 4.6 2.88 8.6 2.64
## [22,] -13.4 -8.12 1.6 -2.36
## [23,] -11.4 -12.12 -0.4 -6.36
## [24,] 9.6 15.88 23.6 8.64
## [25,] 2.6 1.88 10.6 0.64
\[ S = \frac{1}{n} \overline{X}'\overline{X} = \frac{1}{n} X'HX \]
S = (1/nrow(X)) * t(X) %*% H %*% X
S
## x1 x2 y1 y2
## x1 98.720 57.2320 -75.040 50.5760
## x2 57.232 49.7856 1.792 38.5968
## y1 -75.040 1.7920 1123.200 31.3760
## y2 50.576 38.5968 31.376 44.3904
\[ R = D^{-1}SD^{-1}, \ \ \ \ \ \ \ S = DRD, \]
siendo \(D\) la matriz diagonal con las desviaciones típicas de las variables.
colSd <- function(X) {
desviaciones = c()
for (i in 1:ncol(X)) {
desviaciones <- append(desviaciones, sd(X[,i]))
}
desviaciones
}
D = diag(colSd(X))
R = solve(D) %*% S %*% solve(D)
R
## [,1] [,2] [,3] [,4]
## [1,] 0.9600000 0.78371058 -0.21633806 0.7334468
## [2,] 0.7837106 0.96000000 0.00727493 0.7881813
## [3,] -0.2163381 0.00727493 0.96000000 0.1348950
## [4,] 0.7334468 0.78818131 0.13489496 0.9600000
S = D%*%R%*%D
S
## [,1] [,2] [,3] [,4]
## [1,] 98.720 57.2320 -75.040 50.5760
## [2,] 57.232 49.7856 1.792 38.5968
## [3,] -75.040 1.7920 1123.200 31.3760
## [4,] 50.576 38.5968 31.376 44.3904
Una variable compuesta \(Y\) es una combinación lineal de las variables observables con coeficientes \(a = (a_{1},...,a_{p})'\)
\[ Y = a_{1}X_{1} + \cdots + a_{p}X_{p} \]
Si \(X = [X_{1},...,X_{p}]\) es la matriz de datos, también podemos escribir
\[ Y = Xa \]
Si \(Z = b_{1}X_{1} + \cdots + b_{p}X_{p} = Xb\) es otra variable compuesta, se verifica:
\(\overline{Y} = \overline{x}'a, \ \ \ \overline{Z} = \overline{x}'b\)
\(var(Y) = a'Sa, \ \ var(Z) = b'Sb\)
\(cov(Y,Z) = a'Sb\)
Ciertas variables compuestas reciben diferentes nombres según la técnica multivariante: componentes principales, variables canónicas, funciones discriminantes, etc. Uno de los objetivos del Análisis Multivariante es encontrar variables compuestas adecuadas que expliquen aspectos relevantes de los datos.
Tomando el ejemplo 1.11.1 de Cuadras (2014).
X <- read.csv("alcornoques.csv")
X <- as.matrix(X[,2:5])
# Variables compuestas
#y1 = N + S - E - W
y1 = X%*%c(1,-1,1,-1)
y1
## [,1]
## [1,] 5
## [2,] 10
## [3,] 5
## [4,] 10
## [5,] -1
## [6,] 3
## [7,] 4
## [8,] 5
## [9,] 3
## [10,] -5
## [11,] 8
## [12,] 29
## [13,] 16
## [14,] 5
## [15,] 37
## [16,] -15
## [17,] 23
## [18,] 11
## [19,] 30
## [20,] 7
## [21,] 1
## [22,] 0
## [23,] 23
## [24,] 7
## [25,] 11
## [26,] 13
## [27,] -5
## [28,] 8
# y2 = N - S
y2 = X%*%c(1,0,-1,0)
y2
## [,1]
## [1,] -4
## [2,] -6
## [3,] -8
## [4,] 5
## [5,] -3
## [6,] -4
## [7,] 8
## [8,] 11
## [9,] 6
## [10,] 6
## [11,] -2
## [12,] -11
## [13,] -6
## [14,] -5
## [15,] -9
## [16,] 9
## [17,] 9
## [18,] 13
## [19,] 11
## [20,] 9
## [21,] 5
## [22,] 2
## [23,] -7
## [24,] -13
## [25,] 0
## [26,] 13
## [27,] 4
## [28,] -9
#y3 = E - W
y3 = X%*%c(0,1,0,-1)
y3
## [,1]
## [1,] -11
## [2,] -10
## [3,] -1
## [4,] -9
## [5,] -4
## [6,] 9
## [7,] 12
## [8,] 18
## [9,] 15
## [10,] -7
## [11,] 2
## [12,] -18
## [13,] -6
## [14,] 8
## [15,] 4
## [16,] 18
## [17,] 4
## [18,] 22
## [19,] -5
## [20,] 0
## [21,] -2
## [22,] -2
## [23,] -4
## [24,] -2
## [25,] 5
## [26,] -6
## [27,] -13
## [28,] 11
# Variables compuestas normalizadas
#Z1 = (N + S - E - W) / 2
z1 = y1/2
z1
## [,1]
## [1,] 2.5
## [2,] 5.0
## [3,] 2.5
## [4,] 5.0
## [5,] -0.5
## [6,] 1.5
## [7,] 2.0
## [8,] 2.5
## [9,] 1.5
## [10,] -2.5
## [11,] 4.0
## [12,] 14.5
## [13,] 8.0
## [14,] 2.5
## [15,] 18.5
## [16,] -7.5
## [17,] 11.5
## [18,] 5.5
## [19,] 15.0
## [20,] 3.5
## [21,] 0.5
## [22,] 0.0
## [23,] 11.5
## [24,] 3.5
## [25,] 5.5
## [26,] 6.5
## [27,] -2.5
## [28,] 4.0
#Z2 = (N - S) / sqrt(2)
z2 = y2/sqrt(2)
z2
## [,1]
## [1,] -2.828427
## [2,] -4.242641
## [3,] -5.656854
## [4,] 3.535534
## [5,] -2.121320
## [6,] -2.828427
## [7,] 5.656854
## [8,] 7.778175
## [9,] 4.242641
## [10,] 4.242641
## [11,] -1.414214
## [12,] -7.778175
## [13,] -4.242641
## [14,] -3.535534
## [15,] -6.363961
## [16,] 6.363961
## [17,] 6.363961
## [18,] 9.192388
## [19,] 7.778175
## [20,] 6.363961
## [21,] 3.535534
## [22,] 1.414214
## [23,] -4.949747
## [24,] -9.192388
## [25,] 0.000000
## [26,] 9.192388
## [27,] 2.828427
## [28,] -6.363961
#Z3 = (E - W) / sqrt(2)
z3 = y3/sqrt(2)
z3
## [,1]
## [1,] -7.7781746
## [2,] -7.0710678
## [3,] -0.7071068
## [4,] -6.3639610
## [5,] -2.8284271
## [6,] 6.3639610
## [7,] 8.4852814
## [8,] 12.7279221
## [9,] 10.6066017
## [10,] -4.9497475
## [11,] 1.4142136
## [12,] -12.7279221
## [13,] -4.2426407
## [14,] 5.6568542
## [15,] 2.8284271
## [16,] 12.7279221
## [17,] 2.8284271
## [18,] 15.5563492
## [19,] -3.5355339
## [20,] 0.0000000
## [21,] -1.4142136
## [22,] -1.4142136
## [23,] -2.8284271
## [24,] -1.4142136
## [25,] 3.5355339
## [26,] -4.2426407
## [27,] -9.1923882
## [28,] 7.7781746
Sea T una matriz p x q Una transformación lineal de la matriz de datos es
\[ Y = XT \]
Las columnas \(Y1,...,Y_{q}\) de Y son las variables transformadas.
X <- read.csv("alcornoques.csv")
X <- as.matrix(X[,2:5])
set.seed(10)
T =matrix(round(rnorm(20,3,2)),4,5)
# Transformacion lineal
Y = X%*%T
Y
## [,1] [,2] [,3] [,4] [,5]
## [1,] 568 782 897 1081 958
## [2,] 465 644 751 898 801
## [3,] 455 632 724 883 779
## [4,] 286 392 428 526 460
## [5,] 264 363 419 504 447
## [6,] 247 346 370 479 409
## [7,] 288 397 368 517 419
## [8,] 305 421 366 540 426
## [9,] 281 389 360 510 412
## [10,] 258 347 373 460 399
## [11,] 242 338 370 466 404
## [12,] 450 632 775 899 820
## [13,] 404 564 652 788 700
## [14,] 380 530 577 733 632
## [15,] 660 930 1033 1293 1128
## [16,] 472 643 621 846 695
## [17,] 554 768 785 1025 868
## [18,] 599 828 790 1089 893
## [19,] 519 719 745 957 818
## [20,] 328 449 451 590 497
## [21,] 296 404 425 539 462
## [22,] 250 342 370 462 400
## [23,] 438 615 705 860 761
## [24,] 294 414 509 599 542
## [25,] 287 401 422 546 466
## [26,] 332 453 453 588 497
## [27,] 340 459 519 620 549
## [28,] 392 551 608 771 667
Cuadras, C. (2014). Métodos de análisis multivariante. Publicaciones ppu.
Peña, D. (2013). Análisis de datos multivariantes. McGraw-Hill España.