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:

  1. Varianza de la transformada por ondículas de la imagen.
  2. Asimetría de la transformada por ondículas de la imagen.
  3. Curtosis de la transformada por ondículas de la imagen.
  4. Entropía de la imagen.

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 TRUEs y FALSEs 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

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

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.