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.
Análisis de datos descriptivos
Análisis de datos de diagnóstico
Análisis de datos predictivos
Análisis de datos prescriptivos
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:
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:
Proporciona una evaluación objetiva y neutral de los datos.
Es un enfoque expansivo que puede ofrecer una visión completa de los problemas de salud o evaluación.
Ayuda a comprender a fondo un diagnóstico y a interpretar los resultados de evaluaciones más complejas.
Permite a los profesionales de la salud combinar datos cuantitativos y cualitativos para obtener una imagen completa de la situación.
Facilita la detección de patrones y anomalías, lo que es útil en el diagnóstico temprano.
No obstante, el análisis de datos de diagnóstico también presenta desafíos, como:
Posibles problemas de confidencialidad y veracidad en los datos recopilados.
La necesidad de diseñar cuidadosamente las pruebas y evaluaciones para evitar errores en el diagnóstico.
Riesgo de sesgo si se selecciona información que respalda una hipótesis preexistente y se ignoran datos contradictorios.
Limitaciones en la generalización de resultados basados en un único caso o un grupo reducido.
La influencia de prejuicios profesionales que pueden afectar la toma de decisiones en el diagnóstico o evaluación.
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:
Mejora de la competitividad empresarial: En lugar de depender únicamente de experiencias pasadas para comprender tendencias y obtener información, el análisis predictivo permite a las empresas mantener su competitividad al anticipar y adaptarse a los cambios del mercado.
Identificación de nuevas fuentes de ingresos: A través del análisis predictivo, las empresas pueden examinar los patrones históricos de compra de sus clientes y tomar decisiones basadas en estos patrones, lo que les permite lanzar ofertas promocionales, descuentos y cupones de manera más efectiva.
Mejora en el servicio al cliente: Las empresas pueden ofrecer experiencias de cliente excepcionales al analizar las necesidades futuras de los clientes, lo que es especialmente relevante en sectores como el desarrollo de aplicaciones. Un sistema de análisis predictivo confiable permite analizar tanto datos estructurados como no estructurados para anticipar las expectativas de los clientes.
Detección de tendencias ocultas en los datos de los clientes: El análisis predictivo facilita la personalización de la experiencia del cliente al identificar de manera precisa a aquellos con una alta propensión a realizar compras, lo que permite a las empresas detectar tendencias emergentes en los sentimientos de los clientes.
Identificación de áreas de abandono: El análisis predictivo brinda la oportunidad de recuperar a clientes perdidos al identificar las razones de su partida y evitar que otros clientes sigan su ejemplo. Con esta información anticipada, las empresas pueden planificar estrategias efectivas para retener a sus clientes.
Desventajas del análisis predictivo:
Dependencia de la metodología: El análisis predictivo implica el uso de probabilidades y correlaciones que no son absolutas, lo que requiere que los ejecutivos y gerentes entiendan y filtren adecuadamente la información para garantizar resultados precisos y reproducibles. Además, deben presentar estos resultados como percepciones procesables con parámetros de riesgo para cada opción.
Formulación de preguntas inadecuadas: Es esencial que las empresas planteen las preguntas correctas, dado el vasto volumen de información involucrado en el análisis predictivo. Los científicos de datos deben ser capaces de cuestionar las suposiciones y descartar datos incorrectos.
Calidad de los datos: No todos los datos son precisos, y pueden contener errores debido a diversas razones, como errores de autoinforme, archivos dañados, preguntas mal formuladas, datos incompletos y métodos deficientes. Reconocer y filtrar rápidamente los datos incorrectos es esencial, y es necesario evitar la creación de datos erróneos.
Complejidad e imprevisibilidad: El análisis predictivo, basado en técnicas estadísticas, requiere que los datos se estandaricen y cuantifiquen, lo que conlleva sus propios riesgos y genera incertidumbre. Los datos son inherentemente impredecibles, especialmente los datos dinámicos. Un modelo que pronostica con precisión eventos futuros puede verse desafiado por una cascada de eventos inesperados que no se habían previsto inicialmente.
Privacidad y seguridad: El uso de datos para predecir el comportamiento de las personas es considerado invasivo y preocupante por defensores de la privacidad. La recopilación de información sobre individuos con el propósito de predicción plantea cuestiones éticas y de privacidad. Los ejecutivos y los responsables de datos deben estar al tanto de los cambios constantes en las regulaciones de protección de datos.
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:
Optimización de decisiones: Permite tomar decisiones futuras de manera más informada y estratégica, optimizando recursos y procesos.
Mejor planificación de reposiciones: Facilita el cálculo de ventas futuras para determinar cuántos productos deben reponerse.
Personalización de campañas de marketing: Ayuda a comprender las tendencias de compra de los clientes y a lanzar campañas de marketing adaptadas a sus necesidades.
Mantenimiento preventivo: Permite predecir fallos en el equipo, lo que posibilita realizar mantenimientos en el momento oportuno.
Evaluación de riesgos crediticios: Proporciona información sobre los hábitos de compra y la puntualidad de pago de los clientes, ayudando a determinar si es adecuado otorgar crédito.
Enfoque estratégico: Es especialmente útil cuando la información es compleja y los procesos requieren decisiones rápidas y precisas.
Desventajas del análisis prescriptivo:
Dependencia de la calidad de los datos: La precisión de las predicciones depende en gran medida de la calidad de los datos utilizados en el análisis.
Complejidad del análisis: El análisis prescriptivo puede ser complejo y requiere conocimientos especializados en estadísticas y análisis de datos.
Costos asociados: La implementación de sistemas de análisis prescriptivo puede ser costosa en términos de recursos, herramientas y capacitación.
Posibilidad de decisiones incorrectas: Si no se plantean las preguntas adecuadas o se utilizan datos incorrectos, las decisiones basadas en el análisis prescriptivo pueden ser erróneas.
Necesidad de seguimiento y adaptación: El entorno empresarial es dinámico, y las predicciones pueden volverse obsoletas si no se actualizan y adaptan a los cambios en el mercado
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:
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
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
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,]
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.
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:
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.
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"
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.
R cuenta con numerosos paquetes que facilitan el análisis de datos. Algunos paquetes adicionales y ejemplos son:
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 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 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 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 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
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:
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)}
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")
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()
library(ggplot2)
data(mpg) # Cargamos un conjunto de datos de ejemplo
ggplot(data = mpg, aes(x = displ, y = hwy)) +
geom_point()
library(ggplot2)
data(mpg) # Cargamos un conjunto de datos de ejemplo
ggplot(data = mpg, aes(x = class, y = hwy)) +
geom_boxplot()
library(ggplot2)
data(economics) # Cargamos un conjunto de datos de ejemplo
ggplot(data = economics, aes(x = date, y = unemploy, fill = uempmed)) +
geom_area()
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)")
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'
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")
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")
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')
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')
Velázquez, A. (2023, 25 febrero). ¿Qué es el análisis prescriptivo? QuestionPro. https://www.questionpro.com/blog/es/analisis-prescriptivo/
Ortega, C. (2021, 28 julio). ¿Qué es el análisis de diagnóstico? https://tudashboard.com/analisis-de-diagnostico/
Mecalux. Análisis prescriptivo: un plan a medida para la cadena de suministro. https://www.mecalux.es/blog/analitica-prescriptiva#:~:text=El%20an%C3%A1lisis%20prescriptivo%20se%20basa,alternativas%2C%20un%20plan%20de%20acci%C3%B3n/
Losada, C. (2022, 27 septiembre). 4 tipos de análisis de datos que debes conocer - Making science. Making Science. https://www.makingscience.es/blog/4-tipos-de-analisis-de-datos-que-debes-conocer/
Admin. (2019b, febrero 25). Análisis de datos predictivos, descriptivos y prescriptivos ¿Dónde está la diferencia? Prometeus Global Solutions. https://prometeusgs.com/analisis-de-datos-diferencias/
RPUbs - Introducción a Shiny (parte 1). https://rpubs.com/JairoAyala/Shiny_parte1