Descarga el fichero de datos data_banknote_authentication.txt del repositorio de aprendizaje automático de la UC Irvine. Se han obtenido de imágenes digitalizadas de billetes de banco auténticos y falsificados, pero la información del repositorio no incluye cuál de las etiquetas (0 ó 1) corresponde a los auténticos. De cada imagen se obtuvieron cuatro variables continuas:
Realiza un análisis exploratorio de los datos y compara los dos grupos. Calcula estadísticos de posición y dispersión y realiza representaciones gráficas. Extrae conclusiones.
Solución
Podemos cargar los datos desde la propia web:
Datos <- read.table("http://archive.ics.uci.edu/ml/machine-learning-databases/00267/data_banknote_authentication.txt",sep=",")
Una posibilidad es separar las observaciones de las variables 1 a 4
según su grupo. Para ellos definimos un vector de TRUE
s y
FALSE
s según si el billete es del grupo 0 o del grupo 1
respectivamente. Usamos el operador relacional ==
.
Ind0 <- Datos$V5 == 0
Usamos ese vector para seleccionar las filas del grupo 0 y del grupo
1 en las 4 primeras columnas de la matriz de datos. Observad que
!
es un operador de negación (o de complementario).
Datos0 <- Datos[Ind0,1:4]
Datos1 <- Datos[!Ind0,1:4]
Ahora podemos calcular descriptivos separados por grupos y compararlos:
summary(Datos0[,1])
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -4.2859 0.8833 2.5531 2.2767 3.8845 6.8248
summary(Datos1[,1])
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -7.0421 -3.0614 -1.8061 -1.8684 -0.5418 2.3917
var(Datos0[,1])
## [1] 4.077767
var(Datos1[,1])
## [1] 3.538848
Pero hay una posibilidad más rápida con el comando
tapply
, que aplica una función de R (por ejemplo,
var
) a los datos (por ejemplo, Datos$V1
) según
los niveles de una variable cualitativa o factor (por ejemplo,
Datos$V5
):
tapply(Datos$V1,Datos$V5,var)
## 0 1
## 4.077767 3.538848
tapply(Datos$V2,Datos$V5,var)
## 0 1
## 26.40718 29.21277
tapply(Datos$V3,Datos$V5,var)
## 0 1
## 10.49691 27.68665
tapply(Datos$V4,Datos$V5,var)
## 0 1
## 4.515952 4.288974
summary
.A veces el comando by
hace lo mismo con data
frames (las listas de R que contienen específicamente conjuntos de
datos):
by(Datos[,1:4],Datos$V5,summary)
## Datos$V5: 0
## V1 V2 V3 V4
## Min. :-4.2859 Min. :-6.9321 Min. :-4.9417 Min. :-8.5482
## 1st Qu.: 0.8833 1st Qu.: 0.4501 1st Qu.:-1.7097 1st Qu.:-2.2283
## Median : 2.5531 Median : 5.6688 Median : 0.7006 Median :-0.5524
## Mean : 2.2767 Mean : 4.2566 Mean : 0.7967 Mean :-1.1476
## 3rd Qu.: 3.8845 3rd Qu.: 8.6920 3rd Qu.: 2.6529 3rd Qu.: 0.4233
## Max. : 6.8248 Max. :12.9516 Max. : 8.8294 Max. : 2.4495
## ------------------------------------------------------------
## Datos$V5: 1
## V1 V2 V3 V4
## Min. :-7.0421 Min. :-13.7731 Min. :-5.2861 Min. :-7.5887
## 1st Qu.:-3.0614 1st Qu.: -5.8100 1st Qu.:-1.3575 1st Qu.:-2.4584
## Median :-1.8061 Median : 0.1728 Median : 0.3737 Median :-0.6616
## Mean :-1.8684 Mean : -0.9936 Mean : 2.1483 Mean :-1.2466
## 3rd Qu.:-0.5418 3rd Qu.: 3.1893 3rd Qu.: 5.6264 3rd Qu.: 0.3418
## Max. : 2.3917 Max. : 9.6014 Max. :17.9274 Max. : 2.1353
var
.Podemos hacer representaciones gráficas de los datos de una en una:
boxplot(Datos0[,1],Datos1[,1],names=c("0","1"),main="1. Varianza de la transformada por ondículas de la imagen")
o todas de golpe con la librería GGally
(primero debéis
descargarla en vuestro ordenador)
library(GGally)
Datos$V5 <- as.factor(Datos$V5)
ggpairs(Datos, aes(colour = Datos$V5))
Esta librería usa un paquete gráfico de R muy potente y versátil
llamado ggplot2
. Los caracteres aes
significan
aesthetics.