1. Analizando el contenido de la base de datos Billetes

La base de datos Billetes.sav contiene las siguientes variables:

#Estructura de la Base de Datos Billetes
nX1 = "Longitud del billete de banco"
nX2 = "Altura del billete de banco, medido a la izquierda"
nX3 = "Altura del billete de banco, medido a la derecha"
nX4 = "Distancia del marco interno al borde inferior"
nX5 = "Distancia del marco interno al borde superior"
nX6 = "Longitud de la diagonal"
nX7 = "Situación del billete"

Observamos que las variables X1, X2, X3, X4, X5 y X6 son variables cuantitativas, mientras que la variable X7 es una variable cualitativa.

Importamos la base datos a un dataframe y analizamos su contenido

#Importando la BD billetes.sav a un objeto dataframe
library(foreign)
billetes = read.spss("D:/Proyectos/Multivariado/Billetes/billetes.sav",to.data.frame = T)
## re-encoding from UTF-8
#Mostramos sólo las 6 primeras filas
head(billetes)
##      X1    X2    X3   X4   X5    X6        X7
## 1 214.8 131.0 131.1  9.0  9.7 141.0 verdadero
## 2 214.6 129.7 129.7  8.1  9.5 141.7 verdadero
## 3 214.8 129.7 129.7  8.7  9.6 142.2 verdadero
## 4 214.8 129.7 129.6  7.5 10.4 142.0 verdadero
## 5 215.0 129.6 129.7 10.4  7.7 141.8 verdadero
## 6 215.7 130.8 130.5  9.0 10.1 141.4 verdadero
#Mostrando la estrutura del dataframe
str(billetes)
## 'data.frame':    200 obs. of  7 variables:
##  $ X1: num  215 215 215 215 215 ...
##  $ X2: num  131 130 130 130 130 ...
##  $ X3: num  131 130 130 130 130 ...
##  $ X4: num  9 8.1 8.7 7.5 10.4 9 7.9 7.2 8.2 9.2 ...
##  $ X5: num  9.7 9.5 9.6 10.4 7.7 10.1 9.6 10.7 11 10 ...
##  $ X6: num  141 142 142 142 142 ...
##  $ X7: Factor w/ 2 levels "verdadero","falso": 1 1 1 1 1 1 1 1 1 1 ...
##  - attr(*, "variable.labels")= Named chr  "Longitud del billete de banco," "Altura del billete de banco, medido a la izquierda" "Altura del billete de banco, medido a la derecha" "Distancia del marco interno al borde inferior," ...
##   ..- attr(*, "names")= chr  "X1" "X2" "X3" "X4" ...
##  - attr(*, "codepage")= int 65001

Mostramos un resúmen descriptivo de cada una de las variables.

summary(billetes)
##        X1              X2              X3              X4        
##  Min.   :213.8   Min.   :129.0   Min.   :129.0   Min.   : 7.200  
##  1st Qu.:214.6   1st Qu.:129.9   1st Qu.:129.7   1st Qu.: 8.200  
##  Median :214.9   Median :130.2   Median :130.0   Median : 9.100  
##  Mean   :214.9   Mean   :130.1   Mean   :130.0   Mean   : 9.418  
##  3rd Qu.:215.1   3rd Qu.:130.4   3rd Qu.:130.2   3rd Qu.:10.600  
##  Max.   :216.3   Max.   :131.0   Max.   :131.1   Max.   :12.700  
##        X5              X6                X7     
##  Min.   : 7.70   Min.   :137.8   verdadero:100  
##  1st Qu.:10.10   1st Qu.:139.5   falso    :100  
##  Median :10.60   Median :140.4                  
##  Mean   :10.65   Mean   :140.5                  
##  3rd Qu.:11.20   3rd Qu.:141.5                  
##  Max.   :12.30   Max.   :142.4

Por lo tanto, la Matriz de Datos estará conformado por las variables X1, X2, X3, X4, X5 y X6.

2. Vector vector de medias, matriz de covarianza y matriz de correlación

A continuación calculamos el vector de medias, la matriz de varianzas y covarianzas, y la matriz de correlaciones de la matriz de datos conformada por X1, X2, X3, X4, X5 y X6

#Obtenemos el vector de medias
media = colMeans(billetes[1:6])
media
##       X1       X2       X3       X4       X5       X6 
## 214.8960 130.1215 129.9565   9.4175  10.6505 140.4835
#Obtenemos la matriz de varianzas y covarianzas
covarianza = cov(billetes[1:6])
covarianza
##             X1          X2          X3         X4         X5          X6
## X1  0.14179296  0.03144322  0.02309146 -0.1032462 -0.0185407  0.08430553
## X2  0.03144322  0.13033945  0.10842739  0.2158028  0.1050394 -0.20934196
## X3  0.02309146  0.10842739  0.16327412  0.2841319  0.1299967 -0.24047010
## X4 -0.10324623  0.21580276  0.28413191  2.0868781  0.1645389 -1.03699623
## X5 -0.01854070  0.10503945  0.12999673  0.1645389  0.6447234 -0.54961482
## X6  0.08430553 -0.20934196 -0.24047010 -1.0369962 -0.5496148  1.32771633
#Obtenemos la matriz de correlaciones
correlacion = cor(billetes[1:6])
correlacion
##             X1         X2         X3         X4          X5         X6
## X1  1.00000000  0.2312926  0.1517628 -0.1898009 -0.06132141  0.1943015
## X2  0.23129257  1.0000000  0.7432628  0.4137810  0.36234960 -0.5032290
## X3  0.15176280  0.7432628  1.0000000  0.4867577  0.40067021 -0.5164755
## X4 -0.18980092  0.4137810  0.4867577  1.0000000  0.14185134 -0.6229827
## X5 -0.06132141  0.3623496  0.4006702  0.1418513  1.00000000 -0.5940446
## X6  0.19430146 -0.5032290 -0.5164755 -0.6229827 -0.59404464  1.0000000

3. Analisis de la matriz de correlación

Ordenamos los elementos de la matriz de correlación de menor a mayor valor para indentificar a las variables que tienen mayor dependencia.

#Ordenamos los valores de la matriz de correlaciones
order(correlacion, decreasing = FALSE)
##  [1] 24 34 30 35 18 33 12 32  4 19  5 25 23 28  3 13  6 31  2  7 11 26 17
## [24] 27 10 20 16 21  9 14  1  8 15 22 29 36
as.vector(correlacion)[order(correlacion, decreasing = FALSE)]
##  [1] -0.62298270 -0.62298270 -0.59404464 -0.59404464 -0.51647554
##  [6] -0.51647554 -0.50322905 -0.50322905 -0.18980092 -0.18980092
## [11] -0.06132141 -0.06132141  0.14185134  0.14185134  0.15176280
## [16]  0.15176280  0.19430146  0.19430146  0.23129257  0.23129257
## [21]  0.36234960  0.36234960  0.40067021  0.40067021  0.41378098
## [26]  0.41378098  0.48675765  0.48675765  0.74326277  0.74326277
## [31]  1.00000000  1.00000000  1.00000000  1.00000000  1.00000000
## [36]  1.00000000

Observamos que los menores valores corresponden a la covariancia entre x4 y X6 con r=-0.62298270 y la covarianza entre X5 y X6 con r= -0.59404464, indicando que existe una relación inversa en entre las variables indicadas.

#Las variables con mayor correlación negativa
cor( billetes[4],billetes[6])
##            X6
## X4 -0.6229827
plot(billetes$X4,billetes$X6, main = "Gráfico de Dispersión", xlab = nX4,ylab = nX6)

cor( billetes[5],billetes[6])
##            X6
## X5 -0.5940446
plot(billetes$X5,billetes$X6, main = "Gráfico de Dispersión", xlab = nX5, ylab = nX6)

Asimismo el mayor valor positivo (diferente de 1) es X2 y X3 con r= 0.7432628 indicando que existe una relación positiva entre dichas variables

#Las dos variables con mayor correlacion positiva
cor( billetes[2],billetes[3])
##           X3
## X2 0.7432628
plot(billetes$X2,billetes$X3,xlab = nX2,ylab = nX3)

4. Estandarización de la Matriz de Datos

Prodemos a estandariza la matriz de datos

estandar = as.data.frame(scale(billetes[1:6]))
cov(estandar)
##             X1         X2         X3         X4          X5         X6
## X1  1.00000000  0.2312926  0.1517628 -0.1898009 -0.06132141  0.1943015
## X2  0.23129257  1.0000000  0.7432628  0.4137810  0.36234960 -0.5032290
## X3  0.15176280  0.7432628  1.0000000  0.4867577  0.40067021 -0.5164755
## X4 -0.18980092  0.4137810  0.4867577  1.0000000  0.14185134 -0.6229827
## X5 -0.06132141  0.3623496  0.4006702  0.1418513  1.00000000 -0.5940446
## X6  0.19430146 -0.5032290 -0.5164755 -0.6229827 -0.59404464  1.0000000
cor(estandar)
##             X1         X2         X3         X4          X5         X6
## X1  1.00000000  0.2312926  0.1517628 -0.1898009 -0.06132141  0.1943015
## X2  0.23129257  1.0000000  0.7432628  0.4137810  0.36234960 -0.5032290
## X3  0.15176280  0.7432628  1.0000000  0.4867577  0.40067021 -0.5164755
## X4 -0.18980092  0.4137810  0.4867577  1.0000000  0.14185134 -0.6229827
## X5 -0.06132141  0.3623496  0.4006702  0.1418513  1.00000000 -0.5940446
## X6  0.19430146 -0.5032290 -0.5164755 -0.6229827 -0.59404464  1.0000000

Se observa que cuando la matriz de datos se encuentra estandarizado:

5. Cálculo y análisis de la distancia de Mahalanobis

Procedemos al calculo de la distancia de Mahalanobis y ordemos de forma decreciente

dmahalanobis= sqrt(mahalanobis(billetes[6],colMeans(billetes[6]),cov(billetes[6])))

dmahalanobis[order(dmahalanobis,decreasing = TRUE)]
##   [1] 2.3288899 2.3288899 2.2421043 2.0685333 2.0685333 1.8949622 1.8081766
##   [8] 1.7213911 1.7213911 1.6632448 1.6346056 1.6346056 1.5764593 1.5764593
##  [15] 1.5764593 1.5478200 1.4896737 1.4896737 1.4610345 1.4028882 1.4028882
##  [22] 1.4028882 1.3161027 1.3161027 1.3161027 1.3161027 1.3161027 1.3161027
##  [29] 1.3161027 1.3161027 1.2874634 1.2874634 1.2293171 1.2293171 1.2293171
##  [36] 1.2293171 1.2293171 1.2006779 1.2006779 1.2006779 1.1425316 1.1425316
##  [43] 1.1425316 1.1425316 1.1425316 1.1425316 1.1425316 1.1425316 1.1425316
##  [50] 1.1425316 1.1425316 1.1138924 1.1138924 1.1138924 1.1138924 1.1138924
##  [57] 1.1138924 1.1138924 1.1138924 1.1138924 1.1138924 1.0557460 1.0557460
##  [64] 1.0557460 1.0557460 1.0557460 1.0557460 1.0557460 1.0271068 1.0271068
##  [71] 1.0271068 1.0271068 1.0271068 1.0271068 0.9689605 0.9689605 0.9689605
##  [78] 0.9689605 0.9689605 0.9689605 0.9689605 0.9689605 0.9403213 0.9403213
##  [85] 0.9403213 0.9403213 0.9403213 0.9403213 0.9403213 0.9403213 0.9403213
##  [92] 0.9403213 0.8821750 0.8821750 0.8821750 0.8821750 0.8821750 0.8821750
##  [99] 0.8821750 0.8821750 0.8821750 0.8821750 0.8821750 0.8821750 0.8535357
## [106] 0.8535357 0.8535357 0.8535357 0.8535357 0.8535357 0.8535357 0.7953894
## [113] 0.7953894 0.7953894 0.7953894 0.7953894 0.7953894 0.7953894 0.7953894
## [120] 0.7953894 0.7667502 0.7667502 0.7667502 0.7667502 0.7667502 0.7667502
## [127] 0.7667502 0.7667502 0.7667502 0.7667502 0.7667502 0.7086039 0.7086039
## [134] 0.7086039 0.7086039 0.7086039 0.6799647 0.6799647 0.6799647 0.6799647
## [141] 0.6799647 0.6799647 0.6799647 0.6799647 0.6799647 0.6218184 0.6218184
## [148] 0.6218184 0.6218184 0.6218184 0.6218184 0.5931791 0.5931791 0.5931791
## [155] 0.5931791 0.5931791 0.5931791 0.5931791 0.5931791 0.5350328 0.5350328
## [162] 0.5350328 0.5350328 0.5350328 0.5063936 0.5063936 0.5063936 0.5063936
## [169] 0.5063936 0.5063936 0.5063936 0.5063936 0.5063936 0.4482473 0.4482473
## [176] 0.4482473 0.4482473 0.4482473 0.4196081 0.4196081 0.4196081 0.3614618
## [183] 0.3614618 0.3614618 0.3614618 0.3614618 0.3328225 0.3328225 0.2746762
## [190] 0.2460370 0.2460370 0.2460370 0.2460370 0.1878907 0.1878907 0.1592515
## [197] 0.1592515 0.1592515 0.1011051 0.1011051
#Mostramos sólo las 6 primeras filas
head(dmahalanobis)
## [1] 0.4482473 1.0557460 1.4896737 1.3161027 1.1425316 0.7953894

Mostramos un gráfico de cajas para detectar si existen valores atípicos

boxplot(dmahalanobis, ylab = "Distancias de Mahalanobis")

Del diagrama de cajas se observa que existen valores atípicos. Para detectar cuales son los valores atípicos adicionamos a cada vector de datos su correspondiente distancia de Mahalanobis y su probabilidad de ocurrencia considerando que la distancia de Mahalanobis se distribuye como una Chi Cuadrado con grados de libertad igual al número de variables en la matriz de datos

options(digits = 4)

#Combinamos la matriz de datos, la distancia de Mahalanobis y la probablidad x2 con 8 GL
dmahalanobisp = cbind(billetes[1:6],dmahalanobis, round(pchisq(dmahalanobis,6),4))

colnames(dmahalanobisp) = c("X1","X2","X3","X4","X5","X6","DM","Prob")

#Mostramos sólo las 6 primeras filas
head(dmahalanobisp)
##      X1    X2    X3   X4   X5    X6     DM   Prob
## 1 214.8 131.0 131.1  9.0  9.7 141.0 0.4482 0.0016
## 2 214.6 129.7 129.7  8.1  9.5 141.7 1.0557 0.0166
## 3 214.8 129.7 129.7  8.7  9.6 142.2 1.4897 0.0398
## 4 214.8 129.7 129.6  7.5 10.4 142.0 1.3161 0.0292
## 5 215.0 129.6 129.7 10.4  7.7 141.8 1.1425 0.0204
## 6 215.7 130.8 130.5  9.0 10.1 141.4 0.7954 0.0078

Para detectar los datos atipicos, filtramos el dataframe dmahalanobisp por la filas cuya probabilidad sean menores a 0.001.

A continuación se muestran los datos atípicos identificados:

#Detectando los vectores atipicos p < 0.001
options(digits = 4)
atipicos = subset(dmahalanobisp,  dmahalanobisp[8] < 0.001)
atipicos[order(atipicos$DM,decreasing = TRUE),]
##        X1    X2    X3   X4   X5    X6     DM  Prob
## 42  214.8 130.1 129.6  8.8  9.9 140.9 0.3615 9e-04
## 44  214.9 130.4 129.7  9.0  9.8 140.9 0.3615 9e-04
## 53  214.5 130.1 130.0  7.8 10.9 140.9 0.3615 9e-04
## 71  213.8 129.8 129.5  8.4 11.1 140.9 0.3615 9e-04
## 79  215.2 130.5 129.8  7.9 10.9 140.9 0.3615 9e-04
## 112 215.1 130.5 130.3 10.6 11.5 140.1 0.3328 7e-04
## 125 214.7 130.5 130.5  9.9 10.3 140.1 0.3328 7e-04
## 66  215.2 130.6 130.0  8.8 10.6 140.8 0.2747 4e-04
## 103 214.9 130.3 130.1  8.7 11.7 140.2 0.2460 3e-04
## 107 215.3 130.3 130.1  9.3 12.1 140.2 0.2460 3e-04
## 123 215.3 130.8 131.1 11.6 10.6 140.2 0.2460 3e-04
## 127 215.0 130.4 130.4  9.4 11.6 140.2 0.2460 3e-04
## 10  215.2 130.4 130.3  9.2 10.0 140.7 0.1879 1e-04
## 33  215.0 130.0 129.6  7.7 10.5 140.7 0.1879 1e-04
## 104 215.0 130.4 130.6  9.9 10.9 140.3 0.1593 1e-04
## 110 215.2 130.6 130.8 10.4 11.2 140.3 0.1593 1e-04
## 129 215.1 130.2 130.2 10.1 11.3 140.3 0.1593 1e-04
## 81  215.1 129.7 129.7  8.6 10.3 140.6 0.1011 0e+00
## 113 215.4 130.7 131.1  9.7 11.8 140.6 0.1011 0e+00

6. Varianza generalizada y varianza total

La varianza generaliza es el determinante de la matriz de covarianzas de la matriz de datos

#Varianza generalizada
VarGeneralizada = det(covarianza)
 
VarGeneralizada 
## [1] 0.0004025

Asimismo, la varianza global es la suma de las varianzas de cada una de las variables, es decir, la traza de la matriz de covarianza

VarGlobal = sum(diag(covarianza))
VarGlobal
## [1] 4.495

7. Análisis gráfico para detectar los valores atípicos de cada variable

Utilizados el diagrama de cajas para identificar si tenemos valores atípicos para cada variable:

boxplot(billetes$X1, xlab = nX1, ylab = "Número de billetes")

Para esta variable se detecta valores atípicos en ambos extremos

boxplot(billetes$X2, xlab = nX2, ylab = "Número de billetes")

Para esta variable se detecta valores atípicos en la parte inferior

boxplot(billetes$X3, xlab = nX3, ylab = "Número de billetes")

Para esta variable se detecta valores atípicos en la parte superior

boxplot(billetes$X4, xlab = nX4, ylab = "Número de billetes")

Para esta variable no se identifica valores atípicos

boxplot(billetes$X5, xlab = nX5, ylab = "Número de billetes")

Para esta variable se detecta valores atípicos en la parte inferior

boxplot(billetes$X6, xlab = nX6, ylab = "Número de billetes")

Para esta variable no se identifica valores atípicos

8. Análisis gráfico para detectar los valores atípicos en subconjuntos

Utilizados el diagrama de cajas y utilizando la variable X7: Situacion del billete para dividir la conjunto de datos

boxplot(billetes$X1~billetes$X7, xlab = nX1, ylab = "Número de billetes")

boxplot(billetes$X2~billetes$X7, xlab = nX2, ylab = "Número de billetes")

boxplot(billetes$X3~billetes$X7, xlab = nX3, ylab = "Número de billetes")

boxplot(billetes$X4~billetes$X7, xlab = nX4, ylab = "Número de billetes")

boxplot(billetes$X5~billetes$X7, xlab = nX5, ylab = "Número de billetes")

Para esta variable se detecta valores atípicos en la parte inferior

boxplot(billetes$X6~billetes$X7, xlab = nX6, ylab = "Número de billetes")

9. Análisis de Normalidad

Utilizamos un gráfico matricial para indentificar que variables cuya distribución se aproximan a una distribución normal:

library("car")
## Warning: package 'car' was built under R version 3.5.3
## Loading required package: carData
scatterplotMatrix(billetes[1:6])

Del gráfico anterior podemos apreciar que las variables X1 y X5 tiene forma acampanada

hist(billetes$X1, main = paste("Histrograma de " , nX1),  xlab = nX1, probability = TRUE)
lines(density(billetes$X1),col="red")

Asimismo, tomamos una muestra de 15 elementos y realizamos un gráfico QQ

muestra= sample(1:nrow(billetes),size = 15,replace=FALSE)
dmuestra= billetes$X1[muestra]
  
qqnorm(dmuestra)
qqline(dmuestra,col="blue")

Graficamos el histograma de la variable

hist(billetes$X5, main = paste("Histrograma de " , nX5),  xlab = nX5, probability = TRUE)
lines(density(billetes$X5),col="red")

Asimismo, tomamos una muestra de 15 elementos y realizamos un gráfico QQ

muestra= sample(1:nrow(billetes),size = 15,replace=FALSE)
dmuestra= billetes$X5[muestra]
  
qqnorm(dmuestra)
qqline(dmuestra,col="blue")