#---------------------------------------------------------------#
library(lhs)
##
set.seed(11)
n <- 300 # num observaciones
k <- 4 # num features
X_ <- optimumLHS(n, k) # dist máx LHS uniforme
X <- matrix(0,nrow = n, ncol = k ) # para recibir al transformador
X[,1] <- qnorm(X_[,1]) # Transformada gaussiana
X[,2] <- qexp(X_[,2]) # exponencial
X[,3] <- qpois(X_[,3],lambda = 1) # poisson
X[,4] <- X_[,4] # sin cambios (uniforme)

require(ggplot2)
require(GGally)
df <- data.frame(X)
names(df) <- c("X1_Norm", "X2_Exp", "X3_Pois_1", "X4_unif")
p1 <- ggpairs(df[,c(1,2,3,4)], # elección de variables
              alfa = 1/2) # transparencia

p1<- p1 + theme(panel.background = # ¡es más bonito!
                  element_rect(color = "rosa"))

p1<- p1 + theme(text=element_text(size=14)) # tamaño caracteres
p1 # pantalla#---------------------------------------------------------------#
require(caret)
require(party)

set.seed(1)                   
y <- 10*df[,1] +                      # una función desconocida
     7* df[,2] * rnorm(nrow(df))+ 
     3*sin(df[,3])+
     2*sin(df[,4])*runif(nrow(df))
y <-  ifelse(y < 7,0,1)               # fabricación de clases 
sum(y)/length(y)                      # verificación % clases
y <-  factor(y)                       # creación factores                    

df_<- data.frame(df,y)                # más simple para:
p          <- createDataPartition(y=df_$y,
                                  p= 50/100,
                                  list=FALSE)
training   <- df_[p,]  
test       <- df_[-p,]

#---------------------------------------------------------------#
# ctree                                                         #
m <- ctree(y~.,data=df_)              # árboles
m
y.pred <- predict(m,test)             # predicción
y.test <- test$y
confusionMatrix(y.test,y.pred)        # test

#---------------------------------------------------------------#
## trazar una curva ROC                                        #

require(ROCR)
                            
y.prob = 1- unlist(treeresponse(m, test), # las probabilidades
                   use.names=F)[seq(1,nrow(test)*2,2)]
y.rocr = prediction(y.prob,test$y)        # estandarización
y.perf = performance(y.rocr, "tpr","fpr") # T y F positivo rates

y.auc.perf = performance(y.rocr, measure ="auc", # auc
                         x.measure = "cutoff")
auc <- round( unlist(y.auc.perf@y.values),2)*100 # get auc

plot(y.perf,colorize=T, lty =2,
     main=paste("Superficia bajo la curva ROC (AUC) :",auc,"%"),
     xlab ="Falsos positivos", 
     ylab ="Verdaderos positivos")

#---------------------------------------------------------------#
