Qué es el análisis de datos

Varios expertos en ciencia de datos y analistas poseen diferentes enfoques para definir el análisis de datos. Sin embargo, en términos generales, podemos afirmar que el análisis de datos se refiere al procedimiento de extraer información valiosa a partir de datos en bruto para enriquecer la toma de decisiones comerciales basadas en datos.

De acuerdo con Wikipedia, el análisis de datos se configura como un proceso que involucra la revisión, depuración, transformación y modelado de datos con el propósito de desentrañar datos de interés, respaldar conclusiones y fundamentar la toma de decisiones. (Fuente: https://en.wikipedia.org/wiki/Data_analysis)

Si observamos la ejecución o enfoque operativo del análisis de datos, consta de una serie de pasos secuenciales. Al llevarlos a cabo, lograremos destilar conocimientos a partir de los datos sin procesar.

El análisis de datos es una disciplina fundamental en la era actual, impulsada por la abundancia de información generada constantemente en una variedad de campos. Su importancia radica en la capacidad de transformar montañas de datos sin procesar en conocimientos valiosos que pueden respaldar la toma de decisiones informadas en diversos sectores, desde negocios y finanzas hasta ciencias sociales y tecnología. Este proceso implica la aplicación de métodos estadísticos, técnicas de minería de datos y herramientas de visualización para descubrir patrones, tendencias y correlaciones ocultas en los datos, lo que permite a las organizaciones tomar medidas con base en evidencia en lugar de intuición.

El análisis de datos no se limita únicamente a la extracción de información; también abarca la limpieza y transformación de datos, ya que los datos en bruto a menudo contienen errores, valores atípicos y duplicados. Estas etapas son cruciales para garantizar que los resultados sean precisos y confiables. Además, el análisis de datos impulsa la toma de decisiones basada en datos, lo que significa que las organizaciones pueden aprovechar los conocimientos obtenidos para optimizar sus operaciones, mejorar la eficiencia, identificar oportunidades de crecimiento y resolver problemas complejos. En resumen, el análisis de datos se ha convertido en una herramienta esencial en la toma de decisiones empresariales y en la generación de conocimientos en un mundo impulsado por la información.

Tipos de análisis de datos

Análisis de datos descriptivos

El análisis descriptivo se emplea comúnmente para examinar datos pasados o actuales, ya que los datos en su estado original pueden ser difíciles de comprender. En cambio, el análisis descriptivo proporciona métricas más centradas en el objetivo del análisis. Un estudio descriptivo es un método preciso para recopilar información y describir las relaciones entre los datos. Existen dos tipos principales de análisis descriptivo: el numérico, que incluye tablas de frecuencias para variables cuantitativas o cualitativas, y el gráfico, que utiliza diagramas de barras y diagramas de sectores.
¿Qué es un análisis descriptivo en estadística?
Un análisis descriptivo en estadística se utiliza para estudiar características que pueden expresarse numéricamente, ya sea porque son naturalmente mensurables o porque pueden ser cuantificadas de alguna manera. La estadística descriptiva se enfoca en organizar, resumir y analizar un conjunto de datos mediante diversas técnicas, sin pretender ir más allá de los datos mismos. Su objetivo es resumir una muestra estadística a través de medidas de tendencia, dispersión, localización y forma, así como emplear métodos gráficos para representar los aspectos importantes de la muestra y abordar problemas de probabilidad. La estadística descriptiva se utiliza para recopilar, almacenar, y presentar información sobre un tema y proporcionar resúmenes de grandes conjuntos de datos.

Las ventajas del análisis descriptivo son:

Las desventajas del análisis descriptivo son:

Análisis de datos de diagnóstico

El análisis de datos de diagnóstico se utiliza comúnmente para evaluar cualquier tipo de información pasada o presente en el contexto médico o de evaluación. Esto se debe a que los datos en su estado original pueden resultar complicados de comprender y analizar, mientras que las métricas ofrecidas por el análisis de diagnóstico se centran en aspectos específicos relacionados con la identificación de problemas o enfermedades. Un análisis de datos de diagnóstico se presenta como un método preciso para recopilar información y, posteriormente, describir las relaciones entre los datos en el ámbito de la salud o la evaluación. Existen diversos tipos de análisis de diagnóstico, como los basados en pruebas médicas, evaluaciones clínicas o de laboratorio.

El análisis de datos de diagnóstico ofrece una serie de beneficios, que incluyen:

No obstante, el análisis de datos de diagnóstico también presenta desafíos, como:

Análisis de datos predictivos

El análisis de datos predictivo, como su nombre sugiere, permite la construcción de modelos que anticipan eventos con antelación. En esencia, se dirige hacia el futuro y proporciona una comprensión de cómo podría evolucionar nuestro entorno y, en particular, nuestra empresa. Por ejemplo, a partir de los datos, podemos estimar con anticipación cuántas ventas se realizarán en nuestro negocio durante el próximo mes. El propósito fundamental del análisis de datos predictivo es realizar pronósticos, y se fundamenta en enfoques matemáticos avanzados, como la estadística y el aprendizaje automático, para predecir información faltante y describir lo que sucederá. Su principal objetivo es extraer conocimiento a través de la identificación de patrones, modelos y tendencias que mejoren la precisión en la toma de decisiones en situaciones futuras.

Ventajas del análisis predictivo:

Desventajas del análisis predictivo:

Análisis de datos prescriptivos

El análisis prescriptivo se dedica a buscar soluciones dentro de un conjunto de posibilidades con el propósito de optimizar los recursos y mejorar la eficiencia operativa. Este enfoque emplea diversas técnicas de simulación y optimización para identificar la mejor ruta a seguir.

Por otro lado, la analítica predictiva anticipa qué sucederá, cuándo ocurrirá y por qué ocurrirá. Su labor radica en combinar de manera automática grandes volúmenes de datos, conceptos matemáticos, reglas empresariales y aprendizaje automático para realizar predicciones y ofrecer sugerencias que respalden la toma de decisiones. No se limita únicamente a prever los resultados futuros, sino que también propone acciones concretas para aprovechar esas predicciones y presenta a los responsables de la toma de decisiones las implicaciones de cada opción.

El análisis prescriptivo juega un papel fundamental al permitir que las empresas tomen decisiones futuras de manera informada y estratégica. A través de este enfoque, es posible realizar tareas como calcular las ventas futuras de un producto para determinar las necesidades de reposición, comprender las tendencias de compra de los clientes y, en consecuencia, lanzar campañas de marketing que se ajusten a esas necesidades. Además, el análisis prescriptivo posibilita la predicción de posibles fallos en el equipo, lo que facilita la realización de mantenimientos preventivos en el momento oportuno. También proporciona información valiosa sobre los hábitos de compra y la puntualidad de pago de los clientes, lo que ayuda a evaluar la conveniencia de otorgar crédito. Aunque algunas de estas decisiones pueden tomarse manualmente, la complejidad de la información y la urgencia de los procesos hacen que el análisis estadístico sea altamente beneficioso.

El análisis prescriptivo conlleva ventajas significativas, como la optimización de procesos, campañas y estrategias empresariales. Asimismo, contribuye a minimizar las necesidades de mantenimiento y a mejorar las condiciones de los equipos, lo que resulta en una reducción de costos sin afectar el rendimiento. Adicionalmente, este enfoque aumenta la probabilidad de que las empresas enfoquen y planifiquen adecuadamente su crecimiento interno, aprovechando al máximo su potencial y recursos disponibles.

Ventajas del análisis prescriptivo:

Desventajas del análisis prescriptivo:

Metodología para el Análisis de Datos en R

Metodologías Teóricas

El análisis de datos en R se basa en diversas metodologías teóricas, dependiendo de los objetivos del análisis y la naturaleza de los datos. Las metodologías teóricas más comunes incluyen:

Análisis Descriptivo

El análisis descriptivo se utiliza para resumir y visualizar datos. Es especialmente útil para datos estructurados, como tablas, donde se pueden calcular estadísticas descriptivas. Además de summarytools, el paquete psych proporciona herramientas para realizar análisis descriptivos más avanzados:

library(psych)
## Warning: package 'psych' was built under R version 4.2.3
data <- data.frame(
  Age = c(25, 30, 35, 40, 45),
  Height = c(160, 170, 175, 180, 185)
)
describe(data)
##        vars n mean   sd median trimmed  mad min max range  skew kurtosis   se
## Age       1 5   35 7.91     35      35 7.41  25  45    20  0.00    -1.91 3.54
## Height    2 5  174 9.62    175     174 7.41 160 185    25 -0.28    -1.72 4.30

Análisis Inferencial

El análisis inferencial se utiliza para hacer inferencias sobre una población a partir de una muestra. Se aplican pruebas estadísticas, como la prueba t de Student o análisis de varianza (ANOVA). A continuación, se muestra un ejemplo utilizando el paquete stats para realizar una prueba t de Student:

# Generación de datos de ejemplo
set.seed(123)
data <- rnorm(100, mean = 0, sd = 1)

# Prueba t de Student
t.test(data, mu = 0)
## 
##  One Sample t-test
## 
## data:  data
## t = 0.99041, df = 99, p-value = 0.3244
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
##  -0.09071657  0.27152838
## sample estimates:
##  mean of x 
## 0.09040591

Análisis Predictivo

El análisis predictivo se centra en construir modelos que puedan predecir resultados futuros. El paquete caret es útil para ajustar modelos de machine learning y evaluar su rendimiento:

library(caret)
## Warning: package 'caret' was built under R version 4.2.3
## Loading required package: ggplot2
## Warning: package 'ggplot2' was built under R version 4.2.3
## 
## Attaching package: 'ggplot2'
## The following objects are masked from 'package:psych':
## 
##     %+%, alpha
## Loading required package: lattice
data(iris)
# Dividir los datos en entrenamiento y prueba
set.seed(123)
inTrain <- createDataPartition(iris$Species, p = 0.7, list = FALSE)
training_data <- iris[inTrain,]
testing_data <- iris[-inTrain,]

Metodologías Híbridas

Las metodologías híbridas combinan elementos de varias metodologías teóricas. Pueden ser útiles cuando se trabaja con datos de múltiples fuentes y estructuras. La metodología CRISP-DM (Cross-Industry Standard Process for Data Mining) es un ejemplo de enfoque híbrido que abarca desde la comprensión del negocio hasta la implementación del modelo.

Tipo de Datos

El tipo de datos que estamos analizando puede variar, y es importante adaptar la metodología en consecuencia. Los datos se pueden clasificar en tres categorías principales:

Datos Estructurados

Los datos estructurados se presentan en tablas con filas y columnas. Ejemplos comunes incluyen hojas de cálculo, bases de datos relacionales y archivos CSV, tienen un formato o tratamiento de modo que se puede analizar.

Datos Semiestructurados

Los datos semiestructurados no siguen un formato rígido de tabla. Ejemplos incluyen archivos XML, JSON y datos HTML. R proporciona paquetes como jsonlite para analizar datos JSON, el dato cuenta con patrones de estructura pero no es regular.

library(jsonlite)
json_data <- '{"nombre": "Juan", "edad": 30, "ciudad": "Madrid"}'
fromJSON(json_data)
## $nombre
## [1] "Juan"
## 
## $edad
## [1] 30
## 
## $ciudad
## [1] "Madrid"

Datos No Estructurados

Los datos no estructurados no tienen una estructura definida y pueden incluir texto, imágenes, audio, video, etc. El procesamiento de datos no estructurados generalmente requiere técnicas específicas, como el procesamiento de lenguaje natural (NLP) o visión por computadora, tienen un formato o tratamiento de modo que se puede analizar.

Herramientas para Análisis de Datos en R

R cuenta con numerosos paquetes que facilitan el análisis de datos. Algunos paquetes adicionales y ejemplos son:

Lubridate:

lubridate es útil para trabajar con fechas y horas. Puede ser esencial cuando se analizan datos temporales.

library(lubridate)
## Loading required package: timechange
## 
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
## 
##     date, intersect, setdiff, union
date_data <- c("2023-01-15", "2023-02-20", "2023-03-25")
date_data <- ymd(date_data)

Caret:

caret es una librería versátil para la construcción y evaluación de modelos de machine learning. Ejemplo:

library(caret)
data(iris)
# Dividir los datos en entrenamiento y prueba
set.seed(123)
inTrain <- createDataPartition(iris$Species, p = 0.7, list = FALSE)
training_data <- iris[inTrain,]
testing_data <- iris[-inTrain,]

Dplyr:

dplyr es una potente librería para el manejo y transformación de datos. Permite realizar operaciones como filtrado, selección, agregación y unión de datos de forma eficiente. Aquí hay un ejemplo:

library(dplyr)
## Warning: package 'dplyr' was built under R version 4.2.3
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
data <- data.frame(
  Nombre = c("Ana", "Juan", "Carlos"),
  Edad = c(25, 30, 35)
)
filtered_data <- data %>% filter(Edad > 30)

Ggplot2:

ggplot2 es una librería para crear visualizaciones atractivas y personalizables. Permite la creación de gráficos de alta calidad. Ejemplo:

library(ggplot2)
data <- data.frame(
  Mes = c("Enero", "Febrero", "Marzo"),
  Ventas = c(100, 120, 90)
)
ggplot(data, aes(x = Mes, y = Ventas)) + geom_bar(stat = "identity")

Tidyr:

tidyr se utiliza para la manipulación de datos en formato “tidy” o “long”. Ayuda a reorganizar datos de manera que sean más fáciles de analizar. Ejemplo:

library(tidyr)
data <- data.frame(
  Nombre = c("Ana", "Juan"),
  Semana_1 = c(100, 120),
  Semana_2 = c(90, 110)
)
gather(data, key = "Semana", value = "Ventas", -Nombre)
##   Nombre   Semana Ventas
## 1    Ana Semana_1    100
## 2   Juan Semana_1    120
## 3    Ana Semana_2     90
## 4   Juan Semana_2    110

Librerías

ggplot2

Un gráfico realizado con ggplot2 presenta, al menos, tres elementos:

Datos (Data) que queremos representar (que serán un data frame). Características estéticas (aesthetic mappings) que describen cómo queremos que los datos se vean en el gráfico. Para más información podemos consultar la vignette (vignette(“ggplot2-specs”)). Como luego veremos, se introducen con la función aes() y se refieren a:

  • posición (en los ejes)
  • color exterior (color)
  • color de relleno (fill)
  • forma de puntos (shape)
  • tipo de línea (linetype)
  • tamaño (size)

Objetos geométricos (Geom) representan lo que vemos en un gráficos (puntos, líneas, etc.). Todo gráfico tiene, como mínimo, una geometría. La geometría determina el tipo de gráfico:

geom_point (para puntos) geom_lines (para lineas) geom_histogram (para histograma) geom_boxplot (para boxplot) geom_bar (para barras) geom_smooth (líneas suavizadas) geom_polygons (para polígonos en un mapa)

etc. (si ejecutáis el comando help.search(“geom_”, package = “ggplot2”) podéis ver el listado de objetos geométricos) Por tanto, para construir un gráfico con ggplot2 comenzamos con la siguiente estructura de código, usando + como nexo entre argumentos:

ggplot(datos, aes() ) + geom_tipo()

A partir de esta estructura básica puede mejorarse la presentación de los gráficos introduciendo, por ejemplo, características estéticas en los objetos geométricos, rotulando los gráficos, etc.

Otros elementos que conviene tener presente en un gráfico de ggplot2 son:

Stat (Stat), transformaciones estadísticas para, generalmente, resumir datos (por ejemplo: contar frecuencias, número de intervalos en los histogramas, etc.). Escalas (Scale). Las escalas, por ejemplo, convierten datos en características estéticas (colores, etc.), crean leyendas… . Coordenadas (coord): sistema de coordenadas cartesianas, polares, proyecciones, etc. Faceting (Faceting), permite representar gráficos separados para subconjuntos de los datos originales. Vamos a realizar algunos gráficos con ggplot2. Para ello, cargamos la librería. Si no está instalado el paquete lo instalamos.

if(!require(ggplot2)) {
    install.packages("ggplot2")
    library(ggplot2)} 

Barras

library(ggplot2)
# Crear un dataframe de ejemplo
data <- data.frame(categoria = c("A", "B", "C", "D"), valor = c(20, 30, 15, 40))

# Crear un gráfico de barras
ggplot(data, aes(x = categoria, y = valor)) +
  geom_bar(stat = "identity")

Lineas

library(ggplot2)

# Crear un dataframe de ejemplo
data <- data.frame(tiempo = 1:10, valor = c(3, 5, 8, 12, 18, 25, 33, 42, 52, 63))

# Crear un gráfico de líneas
ggplot(data, aes(x = tiempo, y = valor)) +
  geom_line()

Dispersion

library(ggplot2)
data(mpg)  # Cargamos un conjunto de datos de ejemplo

ggplot(data = mpg, aes(x = displ, y = hwy)) +
  geom_point()

Cajas

library(ggplot2)
data(mpg)  # Cargamos un conjunto de datos de ejemplo

ggplot(data = mpg, aes(x = class, y = hwy)) +
  geom_boxplot()

Barras Apiladas

library(ggplot2)
data(economics)  # Cargamos un conjunto de datos de ejemplo

ggplot(data = economics, aes(x = date, y = unemploy, fill = uempmed)) +
  geom_area()

Histograma

library(ggplot2)
data(mpg)  # Cargamos un conjunto de datos de ejemplo

ggplot(data = mpg, aes(x = hwy)) +
  geom_histogram(binwidth = 2, fill = "blue", color = "black") +
  labs(title = "Histograma de millas por galón (hwy)")

Lineal

library(ggplot2)
data(mpg)  # Cargamos un conjunto de datos de ejemplo

ggplot(data = mpg, aes(x = displ, y = hwy)) +
  geom_point() +
  geom_smooth(method = "lm", se = FALSE, color = "red") +
  labs(title = "Gráfico de dispersión con regresión lineal")
## `geom_smooth()` using formula = 'y ~ x'

Barras apiladas

library(ggplot2)
data(mpg)  # Cargamos un conjunto de datos de ejemplo

ggplot(data = mpg, aes(x = class, fill = drv)) +
  geom_bar() +
  labs(title = "Gráfico de barras apiladas por clase de vehículo y tipo de tracción")

Pastel

library(ggplot2)
data(mpg)  # Cargamos un conjunto de datos de ejemplo

ggplot(data = mpg, aes(x = 1, fill = drv)) +
  geom_bar() +
  coord_polar(theta = "y") +
  labs(title = "Gráfico de pastel de tipo de tracción")

corrplot

El paquete R corrplot proporciona una herramienta de exploración visual en la matriz de correlación que admite el reordenamiento automático de variables para ayudar a detectar patrones ocultos entre las variables.

corrplot es muy fácil de usar y proporciona una amplia gama de opciones de trazado en método de visualización, diseño gráfico, color, leyenda, etiquetas de texto, etc. También proporciona valores p e intervalos de confianza para ayudar a los usuarios a determinar la importancia estadística de las correlaciones.

corrplot()Tiene alrededor de 50 parámetros, sin embargo, los más comunes son sólo unos pocos. Podemos obtener un gráfico de matriz de correlación con solo una línea de código en la mayoría de las escenas.

Los parámetros que más se utilizan incluyen method,,,,, etc.typeorderdiag

Hay siete métodos de visualización (parámetro ) en el methodpaquete corrplot , ‘circle’denominados ,,,,,,,, . La intensidad del color del glifo es proporcional a los coeficientes de correlación según la configuración de color predeterminada.’square’‘ellipse’‘number’‘shade’‘color’‘pie’

‘circle’y ’square’, las áreas de círculos o cuadrados muestran el valor absoluto de los coeficientes de correlación correspondientes.

‘ellipse’, las elipses tienen su excentricidad escalada paramétricamente al valor de correlación. Proviene del trabajo de DJ Murdoch y ED Chow, ver en la sección Referencias.

‘number’, números de coeficientes con diferente color.

‘color’, cuadrado de igual tamaño con diferente color.

‘shade’, similar a ‘color’, pero los glifos de coeficientes negativos están sombreados. Método ’pie’y ’shade’proviene del trabajo de Michael Friendly.

‘pie’, los círculos se rellenan en el sentido de las agujas del reloj para los valores positivos y en el sentido contrario a las agujas del reloj para los valores negativos.

corrplot.mixed()es una función ajustada para estilos de visualización mixtos, que puede configurar los métodos visuales del triangular inferior y superior por separado.

Hay tres tipos de diseño (parámetro type) ‘full’: ‘upper’y ’lower’.

La matriz de correlación se puede reordenar según los coeficientes de la matriz de correlación. Esto es importante para identificar la estructura y el patrón ocultos en la matriz.

library(corrplot)
## Warning: package 'corrplot' was built under R version 4.2.3
## corrplot 0.92 loaded
M = cor(mtcars)
corrplot(M, method = 'number') # numero colorido

corrplot(M, method = 'color', order = 'alphabet')

  corrplot(M) # por defecto, método = 'círculo'

corrplot(M, order = 'AOE') # después del reorden 'AOE'

corrplot(M, method = 'shade', order = 'AOE', diag = FALSE)

corrplot(M, method = 'square', order = 'FPC', type = 'lower', diag = FALSE)

corrplot(M, method = 'ellipse', order = 'AOE', type = 'upper')

corrplot.mixed(M, order = 'AOE')

corrplot.mixed(M, lower = 'shade', upper = 'pie', order = 'hclust')

Reordenar una matriz de correlación

Los detalles de cuatro ordera los goritmos, denominados ‘AOE’, ‘FPC’, ‘hclust’, ‘alphabet’ son los siguientes.

‘AOE’ es para el orden angular de los vectores propios. Se calcula a partir del orden de los ángulos. \(a_i\),

$\[ a_i = \begin{cases} \arctan\left(\frac{e^{i2}}{e^{i1}}\right) & \text{si } e^{i1} > 0, \\ \arctan\left(\frac{e^{i2}}{e^{i1}}\right) + \pi & \text{en otro caso}. \end{cases} \] $

dónde \(e_1\) y \(e_2\) son los dos valores propios más grandes de la matriz de correlación.

‘FPC’ para el primer pedido de componente principal.

‘hclust’ para el orden de agrupación jerárquico y ‘hclust.method’ para el método de aglomeración que se utilizará. ‘hclust.method’ debe ser uno de ‘ward’, ‘ward.D’, ‘ward.D2’, ‘single’, ‘complete’, ‘average’, o .’mcquitty’‘median’‘centroid’

‘alphabet’ por orden alfabético.

También puede reordenar la matriz ‘manualmente’ mediante la función corrMatOrder().

Si usa ‘hclust’, corrplot() puede dibujar rectángulos alrededor del gráfico de la matriz de correlación según los resultados de la agrupación jerárquica.

corrplot(M, order = 'hclust', addrect = 2)

corrplot(M, method = 'square', diag = FALSE, order = 'hclust',
         addrect = 3, rect.col = 'blue', rect.lwd = 3, tl.pos = 'd')

La seriación del paquete R proporciona la infraestructura para ordenar objetos con una implementación de varias técnicas de seriación/secuenciación/ordenación para reordenar matrices, matrices de disimilitud y dendrogramas. Para más información, ver en el apartado Referencias.

Podemos reordenar la matriz mediante el paquete de seriación y luego corregirla. Aquí hay unos ejemplos.

library(seriation)
## Warning: package 'seriation' was built under R version 4.2.3
## 
## Attaching package: 'seriation'
## The following object is masked from 'package:lattice':
## 
##     panel.lines
list_seriation_methods('matrix')
##  [1] "BEA"       "BEA_TSP"   "CA"        "Heatmap"   "Identity"  "LLE"      
##  [7] "Mean"      "PCA"       "PCA_angle" "Random"    "Reverse"
list_seriation_methods('dist')
##  [1] "ARSA"           "BBURCG"         "BBWRCG"         "Enumerate"     
##  [5] "GSA"            "GW"             "GW_average"     "GW_complete"   
##  [9] "GW_single"      "GW_ward"        "HC"             "HC_average"    
## [13] "HC_complete"    "HC_single"      "HC_ward"        "Identity"      
## [17] "isomap"         "isoMDS"         "MDS"            "MDS_angle"     
## [21] "metaMDS"        "monoMDS"        "OLO"            "OLO_average"   
## [25] "OLO_complete"   "OLO_single"     "OLO_ward"       "QAP_2SUM"      
## [29] "QAP_BAR"        "QAP_Inertia"    "QAP_LS"         "R2E"           
## [33] "Random"         "Reverse"        "Sammon_mapping" "SGD"           
## [37] "Spectral"       "Spectral_norm"  "SPIN_NH"        "SPIN_STS"      
## [41] "TSP"            "VAT"
data(Zoo)
Z = cor(Zoo[, -c(15, 17)])

dist2order = function(corr, method, ...) {
  d_corr = as.dist(1 - corr)
  s = seriate(d_corr, method = method, ...)
  i = get_order(s)
  return(i)
}

Los métodos ‘PCA_angle’ y ‘HC’ en seriación son los mismos que ‘AOE’ y ‘hclust’ por separado en corrplot() y corrMatOrder().

Aquí hay algunas tramas después de la seriación.

# Ordenamiento rápido y óptimo de las hojas para agrupaciones jerárquicas
i = dist2order(Z, 'OLO')
corrplot(Z[i, i], cl.pos = 'n')

# Problema de asignación cuadrática
i = dist2order(Z, 'QAP_2SUM')
corrplot(Z[i, i], cl.pos = 'n')

# Escalamiento multidimensional
i = dist2order(Z, 'MDS_nonmetric')
## Warning in get_seriation_method("dist", method): seriation method
## 'MDS_nonmetric' is now deprecated and will be removed in future releases. Using
## `isoMDS`
corrplot(Z[i, i], cl.pos = 'n')

# Recocido simulado
i = dist2order(Z, 'ARSA')
corrplot(Z[i, i], cl.pos = 'n')

# solucionador de TSP
i = dist2order(Z, 'TSP')
corrplot(Z[i, i], cl.pos = 'n')

# seriación espectral
i = dist2order(Z, 'Spectral')
corrplot(Z[i, i], cl.pos = 'n')

## Cambiar espectros de color, leyenda de color y leyenda de texto

Podemos obtener colores secuenciales y divergentes de COL1() y COL2(). Las paletas de colores se toman prestadas del R Color Brewer paquete.

Aviso : el color medio que sale COL2() se fija en ‘#FFFFFF’ (blanco), por lo que podemos visualizar el elemento 0 con color blanco.

COL1(): Obtenga colores secuenciales, adecuados para visualizar una matriz no negativa o no positiva (por ejemplo, matriz en [0, 20], o [-100, -10], o [100, 500]).

COL2(): Obtenga colores divergentes, adecuados para visualizar una matriz cuyos elementos son en parte positivos y en parte negativos (por ejemplo, matriz de correlación en [-1, 1] o [-20, 100]).

Los colores de los gráficos de correlación se pueden personalizar colen corrplot(). Están distribuidos uniformemente en col.limel intervalo.

col: vector, los colores de los glifos. Están distribuidos uniformemente en col.limel intervalo.

Por defecto,Si is.corres TRUE, colserá COL2(‘RdBu’, 200). Si is.corres así FALSE, y corres una matriz no negativa ni positiva, col será COL1(‘YlOrBr’, 200);

de lo contrario (los elementos son en parte positivos y en parte negativos), colserá COL2(‘RdBu’, 200). col.lim: el intervalo de límites (x1, x2) para asignar color por col. Por defecto, col.limserá c(-1, 1)cuando is.corrsea TRUE, col.limserá c(min(corr), max(corr))cuando is.corrsea FALSE.

AVISO : si establece col.limcuándo is.corres TRUE, la asignación de colores aún se distribuye uniformemente en [-1, 1], solo afecta la visualización en la leyenda de color.

is.corr: lógico, ya sea que la matriz de entrada sea una matriz de correlación o no. El valor predeterminado es TRUE.

Podemos visualizar una matriz de no correlación configurando is.corr = FALSE. Aquí se muestran a continuación todos los colores divergentes COL2()y secuenciales .COL1()

Colores divergentes :


Colores secuenciales :

Uso de COL1()y COL2():

COL1(sequential = c("Oranges", "Purples", "Reds", "Blues", "Greens", 
                    "Greys", "OrRd", "YlOrRd", "YlOrBr", "YlGn"), n = 200)
##   [1] "#FFF5EB" "#FEF4E9" "#FEF3E8" "#FEF3E7" "#FEF2E6" "#FEF1E5" "#FEF1E4"
##   [8] "#FEF0E2" "#FEF0E1" "#FEEFE0" "#FEEEDF" "#FEEEDE" "#FEEDDD" "#FEEDDB"
##  [15] "#FEECDA" "#FEEBD9" "#FEEBD8" "#FEEAD7" "#FEEAD6" "#FEE9D4" "#FEE8D3"
##  [22] "#FEE8D2" "#FEE7D1" "#FEE7D0" "#FEE6CF" "#FDE5CD" "#FDE5CC" "#FDE4CA"
##  [29] "#FDE3C8" "#FDE2C6" "#FDE1C4" "#FDE0C3" "#FDDFC1" "#FDDEBF" "#FDDDBD"
##  [36] "#FDDDBC" "#FDDCBA" "#FDDBB8" "#FDDAB6" "#FDD9B5" "#FDD8B3" "#FDD7B1"
##  [43] "#FDD6AF" "#FDD5AD" "#FDD5AC" "#FDD4AA" "#FDD3A8" "#FDD2A6" "#FDD1A5"
##  [50] "#FDD0A3" "#FDCFA1" "#FDCE9F" "#FDCC9D" "#FDCB9A" "#FDCA98" "#FDC896"
##  [57] "#FDC794" "#FDC691" "#FDC48F" "#FDC38D" "#FDC18B" "#FDC089" "#FDBF86"
##  [64] "#FDBD84" "#FDBC82" "#FDBB80" "#FDB97E" "#FDB87B" "#FDB779" "#FDB577"
##  [71] "#FDB475" "#FDB273" "#FDB170" "#FDB06E" "#FDAE6C" "#FDAD6A" "#FDAC68"
##  [78] "#FDAA66" "#FDA964" "#FDA862" "#FDA660" "#FDA55E" "#FDA45D" "#FDA25B"
##  [85] "#FDA159" "#FDA057" "#FD9E55" "#FD9D53" "#FD9C51" "#FD9A4F" "#FD994D"
##  [92] "#FD984C" "#FD964A" "#FD9548" "#FD9446" "#FD9244" "#FD9142" "#FD9040"
##  [99] "#FD8E3E" "#FD8D3C" "#FC8C3B" "#FC8A39" "#FB8937" "#FB8736" "#FA8634"
## [106] "#FA8532" "#F98331" "#F9822F" "#F8802D" "#F87F2C" "#F77D2A" "#F77C29"
## [113] "#F67A27" "#F67925" "#F67824" "#F57622" "#F57520" "#F4731F" "#F4721D"
## [120] "#F3701B" "#F36F1A" "#F26D18" "#F26C16" "#F16A15" "#F16913" "#F06812"
## [127] "#EF6611" "#EE6511" "#ED6410" "#EC620F" "#EB610E" "#EA600E" "#E95E0D"
## [134] "#E85D0C" "#E75C0C" "#E65A0B" "#E5590A" "#E45809" "#E35609" "#E25508"
## [141] "#E15407" "#E05206" "#DF5106" "#DF5005" "#DE4E04" "#DD4D04" "#DC4C03"
## [148] "#DB4A02" "#DA4901" "#D94801" "#D74701" "#D54601" "#D34601" "#D14501"
## [155] "#CF4401" "#CD4301" "#CB4301" "#C94201" "#C74101" "#C54001" "#C24001"
## [162] "#C03F01" "#BE3E02" "#BC3E02" "#BA3D02" "#B83C02" "#B63B02" "#B43B02"
## [169] "#B23A02" "#B03902" "#AE3802" "#AC3802" "#AA3702" "#A83602" "#A63602"
## [176] "#A43503" "#A33403" "#A13403" "#9F3303" "#9E3303" "#9C3203" "#9B3103"
## [183] "#993103" "#983003" "#963003" "#942F03" "#932E03" "#912E03" "#902D03"
## [190] "#8E2D03" "#8D2C03" "#8B2B03" "#892B03" "#882A03" "#862A03" "#852903"
## [197] "#832803" "#822803" "#802703" "#7F2704"
COL2(diverging = c("RdBu", "BrBG", "PiYG", "PRGn", "PuOr", "RdYlBu"), n = 200)
##   [1] "#67001F" "#6A011F" "#6E0220" "#720320" "#760421" "#790622" "#7D0722"
##   [8] "#810823" "#850923" "#880A24" "#8C0C25" "#900D25" "#940E26" "#970F26"
##  [15] "#9B1027" "#9F1228" "#A31328" "#A71429" "#AA1529" "#AE162A" "#B2182B"
##  [22] "#B31B2C" "#B51F2E" "#B72330" "#B92632" "#BB2A33" "#BD2E35" "#BE3137"
##  [29] "#C03538" "#C2383A" "#C43C3C" "#C6403D" "#C7433F" "#C94741" "#CB4B43"
##  [36] "#CD4E44" "#CF5246" "#D05548" "#D25949" "#D45D4B" "#D6604D" "#D76450"
##  [43] "#D96752" "#DA6B55" "#DC6E58" "#DD725A" "#DF755D" "#E07860" "#E27C62"
##  [50] "#E37F65" "#E58368" "#E6866A" "#E88A6D" "#E98D70" "#EB9172" "#EC9475"
##  [57] "#EE9878" "#EF9B7A" "#F19F7D" "#F2A280" "#F4A583" "#F4A886" "#F5AB89"
##  [64] "#F5AD8D" "#F5B090" "#F6B394" "#F6B697" "#F7B89B" "#F7BB9E" "#F8BEA2"
##  [71] "#F8C0A5" "#F9C3A9" "#F9C6AC" "#FAC9B0" "#FACBB3" "#FACEB7" "#FBD1BA"
##  [78] "#FBD3BD" "#FCD6C1" "#FCD9C4" "#FDDBC8" "#FDDDCA" "#FDDFCD" "#FDE1D0"
##  [85] "#FDE2D3" "#FDE4D6" "#FDE6D9" "#FDE8DB" "#FDEADE" "#FDECE1" "#FEEDE4"
##  [92] "#FEEFE7" "#FEF1E9" "#FEF3EC" "#FEF5EF" "#FEF6F2" "#FEF8F5" "#FEFAF7"
##  [99] "#FEFCFA" "#FEFEFD" "#FDFEFE" "#FBFDFD" "#F9FBFD" "#F6FAFC" "#F4F9FB"
## [106] "#F2F7FA" "#EFF6FA" "#EDF5F9" "#EBF3F8" "#E9F2F7" "#E6F1F7" "#E4EFF6"
## [113] "#E2EEF5" "#DFEDF4" "#DDECF4" "#DBEAF3" "#D8E9F2" "#D6E8F1" "#D4E6F1"
## [120] "#D1E5F0" "#CFE4EF" "#CBE2EE" "#C8E0ED" "#C5DFEC" "#C2DDEB" "#BFDBEA"
## [127] "#BCDAEA" "#B8D8E9" "#B5D7E8" "#B2D5E7" "#AFD3E6" "#ACD2E5" "#A9D0E4"
## [134] "#A5CFE3" "#A2CDE2" "#9FCBE1" "#9CCAE0" "#99C8E0" "#96C7DF" "#92C5DE"
## [141] "#8FC3DD" "#8BC0DB" "#87BEDA" "#83BBD8" "#7FB9D7" "#7BB6D6" "#77B4D4"
## [148] "#73B1D3" "#6FAFD2" "#6BACD0" "#67AACF" "#63A7CE" "#5FA5CC" "#5BA2CB"
## [155] "#57A0CA" "#539DC8" "#4F9BC7" "#4B98C5" "#4796C4" "#4393C3" "#4191C2"
## [162] "#3F8EC0" "#3E8CBF" "#3C8ABE" "#3A88BD" "#3985BC" "#3783BB" "#3581B9"
## [169] "#337FB8" "#327CB7" "#307AB6" "#2E78B5" "#2D76B4" "#2B73B3" "#2971B1"
## [176] "#286FB0" "#266DAF" "#246AAE" "#2268AD" "#2166AC" "#1F63A8" "#1E60A4"
## [183] "#1C5EA1" "#1B5B9D" "#1A5899" "#185595" "#175391" "#15508E" "#144D8A"
## [190] "#134B86" "#114882" "#10457F" "#0E427B" "#0D4077" "#0C3D73" "#0A3A70"
## [197] "#09386C" "#073568" "#063264" "#053061"

Además, la función colorRampPalette()es muy conveniente para generar espectro de colores.

El grupo de parámetros cl.*es para leyenda de color. Los de uso común son:

cl.poses para la posición de las etiquetas de color. Es de carácter o lógico. Si es carácter, debe ser uno de ‘r’(significa derecho, predeterminado si type=‘upper’o ’full’), ‘b’(significa abajo, predeterminado si type=‘lower’) o ‘n’(significa no dibujar etiqueta de color). cl.ratioes para justificar el ancho de la leyenda del color, se sugiere 0,1~0,2. El grupo de parámetros cl.* es para leyenda de texto. Los de uso común son:

tl.poses para la posición de las etiquetas de texto. Es de carácter o lógico. Si es carácter, debe ser uno de ‘lt’, ‘ld’, ‘td’, o . (predeterminado si ) significa izquierda y arriba, (predeterminado si ) significa izquierda y diagonal, (predeterminado si ) significa arriba y diagonal (cerca), significa diagonal, significa izquierda, significa no agregar etiqueta de texto.’d’‘l’‘n’‘lt’type=’full’‘ld’type=’lower’‘td’type=’upper’‘d’‘l’‘n’ tl.cexes para el tamaño de la etiqueta de texto (nombres de variables). tl.srtes para la rotación de la cadena de etiquetas de texto en grados.

corrplot(M, order = 'AOE', col = COL2('RdBu', 10))

corrplot(M, order = 'AOE', addCoef.col = 'black', tl.pos = 'd',
         cl.pos = 'n', col = COL2('PiYG'))

corrplot(M, method = 'square', order = 'AOE', addCoef.col = 'black', tl.pos = 'd',
         cl.pos = 'n', col = COL2('BrBG'))

## leyenda de color inferior, leyenda de texto diagonal, rotar etiqueta de texto
corrplot(M, order = 'AOE', cl.pos = 'b', tl.pos = 'd',
         col = COL2('PRGn'), diag = FALSE)

## etiquetas de texto giradas 45 grados y leyenda de color más amplia con números ## alineados a la derecha
corrplot(M, type = 'lower', order = 'hclust', tl.col = 'black',
         cl.ratio = 0.2, tl.srt = 45, col = COL2('PuOr', 10))

## eliminar leyenda de color, leyenda de texto y glifo diagonal principal
corrplot(M, order = 'AOE', cl.pos = 'n', tl.pos = 'n',
         col = c('white', 'black'), bg = 'gold2')

Referencias.