# INSTALAR PAQUETES DE FUNCIONES
#*******************************************************************************
# Lista de paquetes de funciones a instalar
.packages = c("ggplot2", "caret", "mlbench", "caretEnsemble", "ipred", "rpart",
              "doMC", "AppliedPredictiveModeling", "corrplot", "Hmisc", "DMwR", "lattice",
              "RWeka", "e1071", "C50")

# Instala los paquetes sinó los tienes instalados
.inst <- .packages %in% installed.packages()
if(length(.packages[!.inst]) > 0) install.packages(.packages[!.inst])

# CARGAR PAQUETES O CREAR FUNCIONES
#*******************************************************************************
# Carga los paquetes sinó los tienes cargados
lapply(.packages, require, character.only=TRUE)
#-------------------------------------------------------------------------------


# load library
library(mlbench)
# load dataset
data(BreastCancer)
datos <- BreastCancer

## limpiar datos

# quitar filas iguales
length(unique(datos$Id))
datos.limpios <- unique(datos)
datos.limpios <- datos.limpios[,2:11]
dim(datos.limpios)

#quitar filas de NA
id.NA <- complete.cases(datos.limpios)
# Remove all incomplete rows
datos.limpios <- datos.limpios[id.NA,]
dim(datos.limpios)

## exploración de los datos
# Transformando de caracteres a numéricos
for (i in 1:9) {
  datos.limpios[,i] <- as.numeric(datos.limpios[,i])
}
# Estadísticos
df <- datos.limpios[,1:9]
estadisticaDescriptiva <- t(do.call(data.frame, 
                                    list(mean = apply(df, 2, mean),
                                         Desv.Estandar = apply(df, 2, sd),
                                         Mediana = apply(df, 2, median),
                                         IQR = apply(df,2,IQR),
                                         Min = apply(df, 2, min),
                                         Max = apply(df, 2, max),
                                         Rango = apply(df, 2,max)-apply(df, 2,min),
                                         Cuartil1 = apply(df,2,quantile,probs = c(0.25)),
                                         Cuartil3 = apply(df,2,quantile,probs = c(0.75)),
                                         N = apply(df,2,length),
                                         ErrorEstandar = apply(df,2,sd)/sqrt(apply(df,2,length)),
                                         IC95MediaLower = apply(df,2,mean)-1.96*apply(df,2,sd)/sqrt(apply(df,2,length)),
                                         IC95MediaUpper = apply(df,2,mean)+1.96*apply(df,2,sd)/sqrt(apply(df,2,length)),
                                         Varianza = apply(df, 2, var),
                                         Suma = apply(df,2,sum)
                                    )))
summary(df)
# Estadísticos por grupos de cancer
# grupo maligno
idMal <- datos.limpios$Class=="malignant"
df <- datos.limpios[idMal,1:9]
descriptivos.Mal <- t(do.call(data.frame, 
                                    list(mean = apply(df, 2, mean),
                                         Desv.Estandar = apply(df, 2, sd),
                                         Mediana = apply(df, 2, median),
                                         IQR = apply(df,2,IQR),
                                         Min = apply(df, 2, min),
                                         Max = apply(df, 2, max),
                                         Rango = apply(df, 2,max)-apply(df, 2,min),
                                         Cuartil1 = apply(df,2,quantile,probs = c(0.25)),
                                         Cuartil3 = apply(df,2,quantile,probs = c(0.75)),
                                         N = apply(df,2,length),
                                         ErrorEstandar = apply(df,2,sd)/sqrt(apply(df,2,length)),
                                         IC95MediaLower = apply(df,2,mean)-1.96*apply(df,2,sd)/sqrt(apply(df,2,length)),
                                         IC95MediaUpper = apply(df,2,mean)+1.96*apply(df,2,sd)/sqrt(apply(df,2,length)),
                                         Varianza = apply(df, 2, var),
                                         Suma = apply(df,2,sum)
                                    )))
# grupo benigno
idBen <- datos.limpios$Class=="benign"
df <- datos.limpios[idBen,1:9]
descriptivos.Ben <- t(do.call(data.frame, 
                              list(mean = apply(df, 2, mean),
                                   Desv.Estandar = apply(df, 2, sd),
                                   Mediana = apply(df, 2, median),
                                   IQR = apply(df,2,IQR),
                                   Min = apply(df, 2, min),
                                   Max = apply(df, 2, max),
                                   Rango = apply(df, 2,max)-apply(df, 2,min),
                                   Cuartil1 = apply(df,2,quantile,probs = c(0.25)),
                                   Cuartil3 = apply(df,2,quantile,probs = c(0.75)),
                                   N = apply(df,2,length),
                                   ErrorEstandar = apply(df,2,sd)/sqrt(apply(df,2,length)),
                                   IC95MediaLower = apply(df,2,mean)-1.96*apply(df,2,sd)/sqrt(apply(df,2,length)),
                                   IC95MediaUpper = apply(df,2,mean)+1.96*apply(df,2,sd)/sqrt(apply(df,2,length)),
                                   Varianza = apply(df, 2, var),
                                   Suma = apply(df,2,sum)
                              )))

# pasar los descriptivos a Excel ... y analizarlos

# visualizar las distribuciones con diagramas de barras
namvar <- names(datos.limpios)
par(mfrow = c(3,3))
for (i in 1:9) {
  barplot(table(datos.limpios[,i]),main = namvar[i])
}

# visualizar las distribuciones de los malignos
namvar <- names(datos.limpios)
idMal <- datos.limpios$Class=="malignant"
df <- datos.limpios[idMal,1:9]

par(mfrow = c(3,3))
for (i in 1:9) {
  barplot(table(df[,i]),main = namvar[i])
}

# visualizar las distribuciones de los benignos
namvar <- names(datos.limpios)
idMal <- datos.limpios$Class=="benign"
df <- datos.limpios[idMal,1:9]

par(mfrow = c(3,3))
for (i in 1:9) {
  barplot(table(df[,i]),main = namvar[i])
}


# visualizar distribuciones con el boxplot
namvar <- names(datos.limpios)
par(mfrow = c(3,3))
for (i in 1:9) {
  df = datos.limpios[c(i,10)]
  df[,2] = as.factor(df[,2])
  boxplot(df[,1]~df[,2],data = df, main = namvar[i])
}

