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.
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
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)
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:
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
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
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
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")
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")