La transformación se basa en el centrado y escalado de los datos.
require(mice)
require(caret)
# se usa el conjunto de datos de calidad del aire, en las mismas condiciones que vimos con anterioridad
datos <- airquality
# se determina el numero de instancias sin datos perdidos y con datos perdidos. A observar la comodidad de uso de las funciones ncc e nic
completos <- ncc(datos)
incompletos <- nic(datos)
cat("Datos completos: ",completos, " e incompletos: ",incompletos,"\n")
## Datos completos: 111 e incompletos: 42
# se imputan los datos
imputados <- mice(datos)
##
## iter imp variable
## 1 1 Ozone Solar.R
## 1 2 Ozone Solar.R
## 1 3 Ozone Solar.R
## 1 4 Ozone Solar.R
## 1 5 Ozone Solar.R
## 2 1 Ozone Solar.R
## 2 2 Ozone Solar.R
## 2 3 Ozone Solar.R
## 2 4 Ozone Solar.R
## 2 5 Ozone Solar.R
## 3 1 Ozone Solar.R
## 3 2 Ozone Solar.R
## 3 3 Ozone Solar.R
## 3 4 Ozone Solar.R
## 3 5 Ozone Solar.R
## 4 1 Ozone Solar.R
## 4 2 Ozone Solar.R
## 4 3 Ozone Solar.R
## 4 4 Ozone Solar.R
## 4 5 Ozone Solar.R
## 5 1 Ozone Solar.R
## 5 2 Ozone Solar.R
## 5 3 Ozone Solar.R
## 5 4 Ozone Solar.R
## 5 5 Ozone Solar.R
datos <- mice::complete(imputados)
# se aplica el centrado y escalado sobre el conjunto de datos, una vez eliminados los valores perdidos
valoresPreprocesados <- caret::preProcess(datos[,1:4],method=c("center","scale"))
# el resultado consiste en el escalado y centrado de las variables de la 1 a la 4 (las que pueden considerarse continuas). El resultado anterior se usa ahora para asignar a las variables los valores correspondientes de acuerdo a esta transformacion
valoresTransformados <- predict(valoresPreprocesados,datos[,1:4])
# y podemos generar un nuevo conjunto de datos con el que seguir aplicando tecnicas con las 4 variables transformadas y las dos que no se tocaron
datosFinales <- cbind(valoresTransformados,datos[,5:6])
Para pasar los datos numericos a discretos podemos usar un paquete de discretizacion que nos dará puntos de corte optimos sobre los datos continuos.
require(discretization)
# se usa el conjunto de datos de calidad del aire, en las
# mismas condiciones que vimos con anterioridad
datos <- iris
# discretizacion mediante metodo CAIM
cm <- discretization::disc.Topdown(iris, method=1)
# se muestran los puntos de corte
cat("Puntos de corte metodo CAIM: \n")
## Puntos de corte metodo CAIM:
print(cm$cutp)
## [[1]]
## [1] 4.30 5.55 6.25 7.90
##
## [[2]]
## [1] 2.00 2.95 3.05 4.40
##
## [[3]]
## [1] 1.00 2.45 4.75 6.90
##
## [[4]]
## [1] 0.10 0.80 1.75 2.50
# los datos discretizados se mostrarian de la
# forma siguiente
cat("Datos discretizados: \n")
## Datos discretizados:
print(cm$Disc.data)
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 1 3 1 1 setosa
## 2 1 2 1 1 setosa
## 3 1 3 1 1 setosa
## 4 1 3 1 1 setosa
## 5 1 3 1 1 setosa
## 6 1 3 1 1 setosa
## 7 1 3 1 1 setosa
## 8 1 3 1 1 setosa
## 9 1 1 1 1 setosa
## 10 1 3 1 1 setosa
## 11 1 3 1 1 setosa
## 12 1 3 1 1 setosa
## 13 1 2 1 1 setosa
## 14 1 2 1 1 setosa
## 15 2 3 1 1 setosa
## 16 2 3 1 1 setosa
## 17 1 3 1 1 setosa
## 18 1 3 1 1 setosa
## 19 2 3 1 1 setosa
## 20 1 3 1 1 setosa
## 21 1 3 1 1 setosa
## 22 1 3 1 1 setosa
## 23 1 3 1 1 setosa
## 24 1 3 1 1 setosa
## 25 1 3 1 1 setosa
## 26 1 2 1 1 setosa
## 27 1 3 1 1 setosa
## 28 1 3 1 1 setosa
## 29 1 3 1 1 setosa
## 30 1 3 1 1 setosa
## 31 1 3 1 1 setosa
## 32 1 3 1 1 setosa
## 33 1 3 1 1 setosa
## 34 1 3 1 1 setosa
## 35 1 3 1 1 setosa
## 36 1 3 1 1 setosa
## 37 1 3 1 1 setosa
## 38 1 3 1 1 setosa
## 39 1 2 1 1 setosa
## 40 1 3 1 1 setosa
## 41 1 3 1 1 setosa
## 42 1 1 1 1 setosa
## 43 1 3 1 1 setosa
## 44 1 3 1 1 setosa
## 45 1 3 1 1 setosa
## 46 1 2 1 1 setosa
## 47 1 3 1 1 setosa
## 48 1 3 1 1 setosa
## 49 1 3 1 1 setosa
## 50 1 3 1 1 setosa
## 51 3 3 2 2 versicolor
## 52 3 3 2 2 versicolor
## 53 3 3 3 2 versicolor
## 54 1 1 2 2 versicolor
## 55 3 1 2 2 versicolor
## 56 2 1 2 2 versicolor
## 57 3 3 2 2 versicolor
## 58 1 1 2 2 versicolor
## 59 3 1 2 2 versicolor
## 60 1 1 2 2 versicolor
## 61 1 1 2 2 versicolor
## 62 2 2 2 2 versicolor
## 63 2 1 2 2 versicolor
## 64 2 1 2 2 versicolor
## 65 2 1 2 2 versicolor
## 66 3 3 2 2 versicolor
## 67 2 2 2 2 versicolor
## 68 2 1 2 2 versicolor
## 69 2 1 2 2 versicolor
## 70 2 1 2 2 versicolor
## 71 2 3 3 3 versicolor
## 72 2 1 2 2 versicolor
## 73 3 1 3 2 versicolor
## 74 2 1 2 2 versicolor
## 75 3 1 2 2 versicolor
## 76 3 2 2 2 versicolor
## 77 3 1 3 2 versicolor
## 78 3 2 3 2 versicolor
## 79 2 1 2 2 versicolor
## 80 2 1 2 2 versicolor
## 81 1 1 2 2 versicolor
## 82 1 1 2 2 versicolor
## 83 2 1 2 2 versicolor
## 84 2 1 3 2 versicolor
## 85 1 2 2 2 versicolor
## 86 2 3 2 2 versicolor
## 87 3 3 2 2 versicolor
## 88 3 1 2 2 versicolor
## 89 2 2 2 2 versicolor
## 90 1 1 2 2 versicolor
## 91 1 1 2 2 versicolor
## 92 2 2 2 2 versicolor
## 93 2 1 2 2 versicolor
## 94 1 1 2 2 versicolor
## 95 2 1 2 2 versicolor
## 96 2 2 2 2 versicolor
## 97 2 1 2 2 versicolor
## 98 2 1 2 2 versicolor
## 99 1 1 2 2 versicolor
## 100 2 1 2 2 versicolor
## 101 3 3 3 3 virginica
## 102 2 1 3 3 virginica
## 103 3 2 3 3 virginica
## 104 3 1 3 3 virginica
## 105 3 2 3 3 virginica
## 106 3 2 3 3 virginica
## 107 1 1 2 2 virginica
## 108 3 1 3 3 virginica
## 109 3 1 3 3 virginica
## 110 3 3 3 3 virginica
## 111 3 3 3 3 virginica
## 112 3 1 3 3 virginica
## 113 3 2 3 3 virginica
## 114 2 1 3 3 virginica
## 115 2 1 3 3 virginica
## 116 3 3 3 3 virginica
## 117 3 2 3 3 virginica
## 118 3 3 3 3 virginica
## 119 3 1 3 3 virginica
## 120 2 1 3 2 virginica
## 121 3 3 3 3 virginica
## 122 2 1 3 3 virginica
## 123 3 1 3 3 virginica
## 124 3 1 3 3 virginica
## 125 3 3 3 3 virginica
## 126 3 3 3 3 virginica
## 127 2 1 3 3 virginica
## 128 2 2 3 3 virginica
## 129 3 1 3 3 virginica
## 130 3 2 3 2 virginica
## 131 3 1 3 3 virginica
## 132 3 3 3 3 virginica
## 133 3 1 3 3 virginica
## 134 3 1 3 2 virginica
## 135 2 1 3 2 virginica
## 136 3 2 3 3 virginica
## 137 3 3 3 3 virginica
## 138 3 3 3 3 virginica
## 139 2 2 3 3 virginica
## 140 3 3 3 3 virginica
## 141 3 3 3 3 virginica
## 142 3 3 3 3 virginica
## 143 2 1 3 3 virginica
## 144 3 3 3 3 virginica
## 145 3 3 3 3 virginica
## 146 3 2 3 3 virginica
## 147 3 1 3 3 virginica
## 148 3 2 3 3 virginica
## 149 2 3 3 3 virginica
## 150 2 2 3 3 virginica
# discretizacion mediante CACC
cmCacc <- disc.Topdown(datos, method=2)
# se muestran los puntos de corte
cat("Puntos de corte metodo CACC: \n")
## Puntos de corte metodo CACC:
print(cm$cutp)
## [[1]]
## [1] 4.30 5.55 6.25 7.90
##
## [[2]]
## [1] 2.00 2.95 3.05 4.40
##
## [[3]]
## [1] 1.00 2.45 4.75 6.90
##
## [[4]]
## [1] 0.10 0.80 1.75 2.50
# discretizacion mediante AMEVA
cmAmeva <- disc.Topdown(datos, method=3)
# se muestran los puntos de corte
cat("Puntos de corte metodo AMEVA: \n")
## Puntos de corte metodo AMEVA:
print(cm$cutp)
## [[1]]
## [1] 4.30 5.55 6.25 7.90
##
## [[2]]
## [1] 2.00 2.95 3.05 4.40
##
## [[3]]
## [1] 1.00 2.45 4.75 6.90
##
## [[4]]
## [1] 0.10 0.80 1.75 2.50