
#---------------------------------------------------------------#
## ANÁLISIS RESUMEN DE CARACTERÍSTICAS ##
source("pair_panels.R") # funciones paramétricas de la función de pares
source("f_longley.R") # Función de acceso al conjunto de datos de Longley
require(stats) # estadísticas básicas
require(graphics) # gráficos básicos
require(dplyr) # librería de manipulación de datos
require(caret) # para predicciones y transformación.


Z <- f_longley(verbose =FALSE) # silenciar la carga de datos
y <- data.frame(workers = Z$workers) # y es el objetivo
X <- select(Z, - trabajadores, - an) # características - an / overfit
pares (c (X, y), diag.panel = panel.hist, # vista de correlaciones
       panel.superior = panel.cor,
       panel.inferior = panel.liso,
       main = "2 A 2 RELACIONES ENTRE CARACTERÍSTICAS")

#------------------------------------------------- --------------#
## COMPONENTES PRINCIPALES ANÁLISIS VISUAL NAIVE (MUY RÁPIDO)##
X_<- data.frame(scale(X)) # normalización de datos entre -1 y 1
# no cambiar las correlaciones

model_pca <- prcomp(X_); # análisis de componentes principales
model_pca # el "modelo" resultante
summary(model_pca) # información sobre model_pca

library(qcc) # librería "gráficos de control de calidad"
v <- model_pca$sdev^2 # varianza = cuadrado de la desviación típica

pareto.chart(v,xlab = "Componentes", # diagrama de Pareto
             ylab = "Varianza",
             col=arco iris(longitud(v)),
             main = "Pareto de nuevas dimensiones")

#------------------------------------------------- --------------#
## REDUCCIÓN DE TAMAÑO efectiva a través de PCA
## 3 transformaciones sucesivas en los datos (librería de intercalación)
t1 <- preProcess(X,method = "YeoJohnson");t1 # soporte x < 0
X_1 <- predict(t1, X) # transformador 1
t2 <- preProcess(X_1,método = "pca",umbral = 0.95);t2 # pca
X_2 <- predict(t2, X_1) # transformador 2
t3 <- preProcess(X_2,método = "rango");t3 # norma entre 0 y 1
X_3 <- predict(t3, X_2) # transformador 3

pairs (c (X_3, y), diag.panel = panel.hist, # análisis visual
       upper.panel = panel.cor, # /!\ NO SOBRE-INTERPRETAR
       panel.inferior = panel.liso,
       main = "2 A 2 RELACIONES ENTRE NUEVAS CARACTERÍSTICAS")

#------------------------------------------------- --------------#
## creación de una representación 3D manipulable interactivamente
library(doBy) # para poder ordenar los datos
# Buen hábito: ordenar antes de las representaciones 3D
Z_ <- data.frame(X_3,y,row.names = NULL)
Z_ <- orderBy(~ PC1+PC2, datos = Z_)

# MANIPULACIÓN INTERACTIVA DEL RATÓN 3D
library(rgl)          
plot3d(Z_$PC1,Z_$PC2,Z_$trabajadores, 
       type="s", size=1.75, lit=FALSE,col = rainbow(10))

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

