Using R for Data Visualization: Creating Insightful Graphs for Psychology Research
Table of Contents
La visualización de datos se ha convertido en un componente indispensable de la investigación psicológica moderna, permitiendo a los investigadores transformar complejos conjuntos de datos en narrativas visuales significativas que faciliten tanto el análisis como la comunicación. R ofrece ventajas significativas para la visualización de datos mediante su reproducibilidad y transparencia, beneficios que se alinean con el creciente énfasis en las prácticas científicas abiertas en la investigación psicológica.
El papel crítico de la visualización de datos en la investigación de psicología
A raíz de la crisis de replicación de la psicología, el campo ha reconocido cada vez más la importancia de prácticas de investigación transparentes y reproducibles. La visualización de datos se beneficia de las mismas ventajas que el análisis estadístico al escribir código en lugar de utilizar el software de punta y clic, la reproducibilidad y la transparencia, con el beneficio práctico adicional que el código puede ser reutilizado y adaptado para futuros proyectos en lugar de empezar cada vez.
Centrarse en la visualización de datos temprano en el proceso de investigación permite a los investigadores captar sus datos y cualquier patrón general dentro de esos datos antes de realizar cualquier prueba inferencial. Este enfoque exploratorio ayuda a identificar los outliers, entender las distribuciones y detectar posibles problemas antes de realizar análisis estadísticos formales.
La visualización de datos siempre ha sido un componente vital de cualquier proyecto de investigación, ya que facilita la extracción de información significativa independientemente de la complejidad de los datos, y permite a los investigadores comunicar eficazmente sus resultados dentro de su propia disciplina, a través de los límites interdisciplinarios y con un público laico. La capacidad de crear visualizaciones convincentes se ha vuelto cada vez más valiosa a medida que los resultados de investigación se comparten a través de diversos canales, desde revistas académicas a plataformas sociales.
Por qué R se destaca por la visualización de datos en Psicología
Flexibilidad y personalización sin igual
R es muy potente cuando se trata de la visualización de datos, y mientras las capacidades básicas de R son impresionantes, es el miríado de paquetes especializados que elevan su potencial a alturas sin paralelo, con ggplot2 destacada como una herramienta fundamental que ofrece una plataforma versátil para crear una amplia gama de parcelas. Esta flexibilidad es particularmente valiosa en la investigación psicología, donde diversos tipos de datos y preguntas de investigación demandan enfoques de visualización ajustados.
Utilizar R para la visualización de datos le da al investigador casi el control total de cada elemento de la trama, y aunque esta flexibilidad puede parecer desalentador al principio, la capacidad de escribir recetas de código reutilizables y utilizar recetas creadas por otros es altamente ventajosa. Este nivel de personalización permite a los psicólogos crear visualizaciones que se ajusten precisamente a sus necesidades de investigación y a los requisitos de publicación.
Producto de la calidad profesional
ggplot2 tiende a hacer tramas muy buenas para la producción, con Hadley Wickham influenciado por obras de Edward Tufte al desarrollar ggplot2. El nivel de personalización y los productos profesionales disponibles con R ha llevado a los medios de noticias como la BBC y el New York Times a adoptar R como su herramienta de visualización de datos preferida. Este pedigree profesional demuestra la capacidad de R para producir contextos gráficos adecuados para la publicación.
Ecosistema de Fuente Abierta y Apoyo Comunitario
Una de las ventajas de utilizar R es que los investigadores tienen una gama mucho mayor de opciones de visualización de datos completamente personalizables que normalmente están disponibles en el software de punta y clic debido a la naturaleza de código abierto de R. La comunidad R desarrolla continuamente nuevos paquetes y extensiones, asegurando que los investigadores tengan acceso a técnicas de visualización de vanguardia.
El repositorio CRAN de paquetes R ha superado ahora 18.000 paquetes más, lo que significa que hay paquetes para prácticamente cualquier tarea de visualización de datos que puedas imaginar, desde visualizar los genomas del cáncer hasta graficar la acción de un libro. Este amplio ecosistema proporciona a los psicólogos herramientas especializadas para virtualmente cualquier desafío de visualización que puedan encontrar.
Integración con análisis estadístico
La fuerza de R reside en su integración perfecta de análisis y visualización estadísticos dentro de un solo entorno. A diferencia de los flujos de trabajo que requieren la conmutación entre diferentes paquetes de software, R permite a los investigadores importar datos, realizar análisis, crear visualizaciones y generar informes dentro de un marco cohesivo. Esta integración reduce errores, mejora la eficiencia y mejora la reproducibilidad de los hallazgos de investigación.
Cómo empezar: Configurar su entorno R
Instalar R y RStudio
R es el lenguaje de programación, mientras que RStudio es un entorno de desarrollo integrado que hace que trabajar con R más fácil. Para comenzar su viaje de visualización de datos, necesitará instalar tanto R (el lenguaje de programación estadística subyacente) como RStudio (la interfaz fácil de usar que hace que trabajar con R más intuitiva).
En primer lugar, descargar e instalar R de la Red de Archivo R Integral (CRAN) en https://cran.r-project.org/. Elige la versión apropiada para tu sistema operativo (Windows, Mac o Linux). Después de instalar R, descargar e instalar RStudio Desktop desde https://posit.co/download/rstudiotop
Paquetes esenciales para la investigación de psicología
El tidyverse es una colección de paquetes R de acuerdo con la filosofía de diseño subyacente, gramática y estructuras de datos, incluyendo muchos paquetes para la importación, el tidiado y la visualización de datos. Para investigadores de psicología, el ecosistema tidyverse proporciona un conjunto coherente de herramientas que trabajan perfectamente juntos.
Para instalar los paquetes esenciales para la visualización de datos, abra RStudio y ejecute los siguientes comandos en la consola:
# Install the tidyverse collection (includes ggplot2, dplyr, tidyr, and more)
install.packages("tidyverse")
# Install additional visualization packages
install.packages("plotly") # For interactive visualizations
install.packages("patchwork") # For combining multiple plots
install.packages("ggpubr") # Publication-ready plots
install.packages("viridis") # Color-blind friendly palettes
Una vez instalado, necesitará cargar estos paquetes al comienzo de cada sesión R:
library(tidyverse) # Loads ggplot2 and other core packages
library(plotly)
library(patchwork)
Comprender la gramática de los gráficos
Los participantes se introducen en los conceptos explorados en "La Gramática de Gráficos Abogada" por Hadley Wickham (2010), y aprenden sobre la aplicación moderna de los principios de psicología de Gestalt, descubiertos hace casi 100 años, y cómo se pueden utilizar para desarrollar y evaluar visualizaciones. Esta base teórica es crucial para crear visualizaciones efectivas.
ggplot2 utiliza un enfoque basado en gramáticas de describir una trama que lo hace conceptualmente diferente de la mayoría de otros software como Matlab, Matplotlib en Python, etc. Este enfoque basado en gramáticas descompone las visualizaciones en componentes distintos que pueden combinarse y encuadernar para crear gráficos complejos.
Los componentes básicos del ggplot2
ggplot2 es una herramienta flexible y útil para crear parcelas en R, donde el sistema de configuración y coordinación de datos se puede definir utilizando la función ggplot, y capas adicionales, incluyendo geoms, se añaden utilizando el + operador. Entender estos componentes es esencial para crear visualizaciones eficaces:
- Data: El conjunto de datos que desea visualizar
- Estética (aes): Cómo se mapean las variables a las propiedades visuales (x-axis, eje y, color, tamaño, forma)
- Geometrías (geom): El tipo de parcela (puntos, líneas, barras, cajas)
- Escalas: Controlar cómo los valores de datos se mapean a las propiedades visuales
- Temas: Aparición visual general de la parcela
- Facets: Creación de múltiples parcelas basadas en subgrupos
La llamada inicial especifica la parte más importante: cómo las variables individuales mapean en varias propiedades incluso antes de decirle a ggplot2 que se utilizarán visuales para trazar los datos, y cuando se especifica el eje x para representar una variable, ggplot2 se caracteriza por la gama de valores y la etiqueta del eje. Este diseño inteligente significa que gran parte del trabajo se realiza automáticamente, permitiendo a los investigadores enfocarse en la sustancia de sus visualizaciones.
Creando tus primeras visualizaciones
Construyendo un Parcela de Escatter Básico
Las tramas de estafa son fundamentales para examinar las relaciones entre variables continuas, una tarea común en la investigación psicológica. Aquí hay un ejemplo completo usando datos simulados de un estudio que examina la relación entre ansiedad y niveles de estrés:
library(ggplot2)
# Create example dataset
psych_data <- data.frame(
participant_id = 1:50,
anxiety = rnorm(50, mean = 45, sd = 10),
stress = rnorm(50, mean = 38, sd = 8),
group = rep(c("Control", "Treatment"), each = 25)
)
# Create basic scatter plot
ggplot(psych_data, aes(x = anxiety, y = stress)) +
geom_point() +
labs(
title = "Relationship Between Anxiety and Stress Levels",
x = "Anxiety Score (GAD-7)",
y = "Perceived Stress Score (PSS-10)"
)
# Enhanced scatter plot with color and trend line
ggplot(psych_data, aes(x = anxiety, y = stress, color = group)) +
geom_point(size = 3, alpha = 0.7) +
geom_smooth(method = "lm", se = TRUE) +
scale_color_manual(values = c("Control" = "#2E86AB", "Treatment" = "#A23B72")) +
labs(
title = "Anxiety-Stress Relationship by Treatment Group",
x = "Anxiety Score (GAD-7)",
y = "Perceived Stress Score (PSS-10)",
color = "Group"
) +
theme_minimal() +
theme(
plot.title = element_text(size = 14, face = "bold"),
legend.position = "bottom"
)
Creación de parcelas de distribución
Comprender la distribución de sus datos es crucial antes de realizar análisis estadísticos. Aquí están varios enfoques para visualizar las distribuciones:
# Histogram
ggplot(psych_data, aes(x = anxiety)) +
geom_histogram(binwidth = 5, fill = "#2E86AB", color = "white", alpha = 0.8) +
labs(
title = "Distribution of Anxiety Scores",
x = "Anxiety Score (GAD-7)",
y = "Frequency"
) +
theme_minimal()
# Density plot
ggplot(psych_data, aes(x = anxiety, fill = group)) +
geom_density(alpha = 0.6) +
scale_fill_manual(values = c("Control" = "#2E86AB", "Treatment" = "#A23B72")) +
labs(
title = "Anxiety Score Distribution by Group",
x = "Anxiety Score (GAD-7)",
y = "Density",
fill = "Group"
) +
theme_minimal()
Técnicas avanzadas de Visualización para la Investigación de Psicología
Lotes de caja y lotes de Violin
El tutorial recorre al lector a través de cómo reproducir las parcelas que están disponibles comúnmente en el software de punta y clic, como histogramas y diagramas de caja, y muestra cómo el código para estas parcelas "básicas" puede extenderse fácilmente a opciones menos disponibles, como las parcelas de caja de violín.
Los diagramas de caja proporcionan un resumen conciso de la distribución de datos, mostrando el medio, cuartiles y potenciales apalancamientos. Los diagramas de Violin lo extienden mostrando la forma de distribución completa:
# Basic box plot
ggplot(psych_data, aes(x = group, y = stress, fill = group)) +
geom_boxplot(alpha = 0.7) +
scale_fill_manual(values = c("Control" = "#2E86AB", "Treatment" = "#A23B72")) +
labs(
title = "Stress Levels by Treatment Group",
x = "Group",
y = "Perceived Stress Score (PSS-10)"
) +
theme_minimal() +
theme(legend.position = "none")
# Violin plot with individual points
ggplot(psych_data, aes(x = group, y = stress, fill = group)) +
geom_violin(alpha = 0.6, trim = FALSE) +
geom_boxplot(width = 0.2, alpha = 0.8, outlier.shape = NA) +
geom_jitter(width = 0.1, alpha = 0.3, size = 2) +
scale_fill_manual(values = c("Control" = "#2E86AB", "Treatment" = "#A23B72")) +
labs(
title = "Distribution of Stress Scores by Group",
subtitle = "Violin plot with overlaid boxplot and individual data points",
x = "Group",
y = "Perceived Stress Score (PSS-10)"
) +
theme_minimal() +
theme(legend.position = "none")
Bar Parcelas para Datos Categorísticos
Los complots de barras son uno de los complots más comunes en Psicología, más útiles para representar los recuentos de datos que se dividen en categorías, como mostrar el número de participantes masculinos y femeninos en un estudio. Sin embargo, es importante utilizar los complots de barras adecuadamente y considerar alternativas al visualizar datos continuos.
# Create categorical data
response_data <- data.frame(
condition = rep(c("Baseline", "Post-Treatment", "Follow-up"), each = 3),
response = rep(c("Improved", "No Change", "Worsened"), 3),
count = c(45, 30, 15, 60, 20, 10, 55, 25, 10)
)
# Stacked bar plot
ggplot(response_data, aes(x = condition, y = count, fill = response)) +
geom_bar(stat = "identity", position = "stack") +
scale_fill_manual(values = c("Improved" = "#06A77D",
"No Change" = "#F5B700",
"Worsened" = "#D62246")) +
labs(
title = "Treatment Response Across Time Points",
x = "Assessment Time",
y = "Number of Participants",
fill = "Response Category"
) +
theme_minimal()
# Grouped bar plot
ggplot(response_data, aes(x = condition, y = count, fill = response)) +
geom_bar(stat = "identity", position = "dodge") +
scale_fill_manual(values = c("Improved" = "#06A77D",
"No Change" = "#F5B700",
"Worsened" = "#D62246")) +
labs(
title = "Treatment Response Comparison",
x = "Assessment Time",
y = "Number of Participants",
fill = "Response Category"
) +
theme_minimal()
Enfrentamiento para Comparaciones Complej
Faceting le permite generar múltiples parcelas basadas en una variable categórica. Esta técnica es particularmente valiosa en la investigación psicológica al examinar cómo las relaciones varían en diferentes subgrupos o condiciones.
# Create more complex dataset
longitudinal_data <- data.frame(
participant_id = rep(1:30, each = 3),
time_point = rep(c("Baseline", "Week 4", "Week 8"), 30),
depression = rnorm(90, mean = 25, sd = 8),
anxiety = rnorm(90, mean = 30, sd = 7),
treatment = rep(rep(c("CBT", "Medication", "Combined"), each = 10), 3),
age_group = rep(rep(c("18-35", "36-50", "51+"), each = 10), 3)
)
# Faceted scatter plot by treatment type
ggplot(longitudinal_data, aes(x = depression, y = anxiety, color = time_point)) +
geom_point(size = 2, alpha = 0.6) +
geom_smooth(method = "lm", se = FALSE) +
facet_wrap(~ treatment, ncol = 3) +
scale_color_viridis_d(option = "plasma", end = 0.8) +
labs(
title = "Depression-Anxiety Relationship Across Treatment Types",
x = "Depression Score (PHQ-9)",
y = "Anxiety Score (GAD-7)",
color = "Time Point"
) +
theme_minimal() +
theme(
strip.text = element_text(size = 11, face = "bold"),
legend.position = "bottom"
)
# Faceted by multiple variables
ggplot(longitudinal_data, aes(x = time_point, y = depression, fill = treatment)) +
geom_boxplot(alpha = 0.7) +
facet_grid(age_group ~ treatment) +
scale_fill_brewer(palette = "Set2") +
labs(
title = "Depression Scores by Treatment, Time, and Age Group",
x = "Time Point",
y = "Depression Score (PHQ-9)",
fill = "Treatment"
) +
theme_minimal() +
theme(
axis.text.x = element_text(angle = 45, hjust = 1),
legend.position = "none"
)
Correlación Matrices y Heatmaps
Los cálculos son excelentes para visualizar las matrices de correlación, que son comunes en la investigación psicológica al examinar las relaciones entre múltiples variables:
library(reshape2)
# Create correlation matrix
psych_measures <- data.frame(
Depression = rnorm(100, 25, 8),
Anxiety = rnorm(100, 30, 7),
Stress = rnorm(100, 35, 9),
Sleep_Quality = rnorm(100, 6, 2),
Life_Satisfaction = rnorm(100, 5, 1.5)
)
# Calculate correlations
cor_matrix <- cor(psych_measures)
cor_melted <- melt(cor_matrix)
# Create heatmap
ggplot(cor_melted, aes(x = Var1, y = Var2, fill = value)) +
geom_tile(color = "white") +
geom_text(aes(label = round(value, 2)), color = "black", size = 4) +
scale_fill_gradient2(
low = "#2E86AB",
mid = "white",
high = "#A23B72",
midpoint = 0,
limits = c(-1, 1)
) +
labs(
title = "Correlation Matrix of Psychological Measures",
x = "",
y = "",
fill = "Correlation"
) +
theme_minimal() +
theme(
axis.text.x = element_text(angle = 45, hjust = 1),
plot.title = element_text(size = 14, face = "bold")
)
Trabajar con Datos de Tidy
Tradicionalmente, se ha impartido capacitación a psicólogos utilizando datos de gran formato, que normalmente tiene una fila de datos para cada participante con columnas separadas para cada puntuación o variable, y para variables de medidas repetidas, la variable dependiente se divide en diferentes columnas. Sin embargo, ggplot2 funciona mejor con datos en formato "long" o "tidy".
Convertir de ancho a largo formato
Comprender cómo configurar los datos es esencial para una visualización efectiva en R:
library(tidyr)
# Wide format data (typical psychology data structure)
wide_data <- data.frame(
participant = 1:20,
baseline_depression = rnorm(20, 25, 5),
week4_depression = rnorm(20, 20, 5),
week8_depression = rnorm(20, 15, 5),
baseline_anxiety = rnorm(20, 30, 6),
week4_anxiety = rnorm(20, 25, 6),
week8_anxiety = rnorm(20, 20, 6)
)
# Convert to long format
long_data <- wide_data %>%
pivot_longer(
cols = -participant,
names_to = c("time", "measure"),
names_pattern = "(.*)_(.*)",
values_to = "score"
)
# Now easy to visualize
ggplot(long_data, aes(x = time, y = score, color = measure, group = interaction(participant, measure))) +
geom_line(alpha = 0.3) +
geom_point(alpha = 0.5) +
stat_summary(aes(group = measure), fun = mean, geom = "line", size = 2) +
stat_summary(aes(group = measure), fun = mean, geom = "point", size = 4) +
facet_wrap(~ measure, scales = "free_y") +
scale_color_manual(values = c("depression" = "#2E86AB", "anxiety" = "#A23B72")) +
labs(
title = "Individual and Mean Trajectories of Depression and Anxiety",
x = "Time Point",
y = "Score",
color = "Measure"
) +
theme_minimal() +
theme(legend.position = "none")
Visualizaciones interactivas con Plotly
Parcela es una biblioteca que puede crear parcelas interactivas con código mínimo e integra perfectamente con R, con la función ggplotly() siendo particularmente útil para construir experiencias de datos interactivos en el forte de R. Plotly está haciendo parcelas interactivas, y ofrece algunas gráficas que no encontrará en la mayoría de los paquetes, como contornos, candeleros y gráficos 3D.
Las visualizaciones interactivas son particularmente valiosas para el análisis de datos exploratorios y para presentaciones donde desea permitir a su audiencia explorar los datos:
library(plotly)
# Create a ggplot2 plot
p <- ggplot(psych_data, aes(x = anxiety, y = stress, color = group,
text = paste("Participant:", participant_id,
"<br>Anxiety:", round(anxiety, 1),
"<br>Stress:", round(stress, 1)))) +
geom_point(size = 3, alpha = 0.7) +
scale_color_manual(values = c("Control" = "#2E86AB", "Treatment" = "#A23B72")) +
labs(
title = "Interactive Anxiety-Stress Relationship",
x = "Anxiety Score (GAD-7)",
y = "Perceived Stress Score (PSS-10)",
color = "Group"
) +
theme_minimal()
# Convert to interactive plotly plot
ggplotly(p, tooltip = "text")
# Create native plotly 3D scatter plot
plot_ly(
data = psych_data,
x = ~anxiety,
y = ~stress,
z = ~rnorm(50, 40, 8), # Adding a third dimension
color = ~group,
colors = c("#2E86AB", "#A23B72"),
type = "scatter3d",
mode = "markers",
marker = list(size = 5)
) %>%
layout(
title = "3D Visualization of Psychological Measures",
scene = list(
xaxis = list(title = "Anxiety"),
yaxis = list(title = "Stress"),
zaxis = list(title = "Depression")
)
)
Personalización de las Visualizaciones para la Publicación
Temas y estilo
ggplot2 tiene una serie de temas visuales incorporados que se pueden aplicar como capa extra, y cada parte de un tema puede ser personalizado de forma independiente, que puede ser necesario si tiene guías de revistas sobre fuentes para la publicación. Crear visualizaciones de publicación precisa atención al detalle en estilo y formato.
# Create a custom theme for publication
theme_publication <- function(base_size = 12) {
theme_minimal(base_size = base_size) +
theme(
# Text elements
plot.title = element_text(size = base_size + 2, face = "bold", hjust = 0),
plot.subtitle = element_text(size = base_size, color = "gray40", hjust = 0),
axis.title = element_text(size = base_size, face = "bold"),
axis.text = element_text(size = base_size - 1),
legend.title = element_text(size = base_size, face = "bold"),
legend.text = element_text(size = base_size - 1),
# Grid and background
panel.grid.major = element_line(color = "gray90", size = 0.3),
panel.grid.minor = element_blank(),
panel.background = element_rect(fill = "white", color = NA),
plot.background = element_rect(fill = "white", color = NA),
# Legend
legend.position = "bottom",
legend.background = element_rect(fill = "white", color = "gray80"),
legend.key = element_rect(fill = "white", color = NA),
# Margins
plot.margin = margin(10, 10, 10, 10)
)
}
# Apply custom theme
ggplot(psych_data, aes(x = anxiety, y = stress, color = group)) +
geom_point(size = 3, alpha = 0.7) +
geom_smooth(method = "lm", se = TRUE, alpha = 0.2) +
scale_color_manual(values = c("Control" = "#2E86AB", "Treatment" = "#A23B72")) +
labs(
title = "Relationship Between Anxiety and Stress by Treatment Group",
subtitle = "N = 50 participants (25 per group)",
x = "Anxiety Score (GAD-7)",
y = "Perceived Stress Score (PSS-10)",
color = "Group",
caption = "Error bands represent 95% confidence intervals"
) +
theme_publication()
Consideraciones de color para la accesibilidad
Un problema con el uso de ggplot2 para la visualización es que el esquema de color predeterminado no es accesible, ya que la paleta predeterminada roja y verde es difícil para las personas de color ciego para diferenciar y también no se muestra bien en la escala gris, pero puede especificar los colores personalizados exactos para sus parcelas o utilizar una paleta de color personalizado.
Para colores categóricos, las paletas "Set2", "Dark2", y "Paired" de las funciones de la escala de cerveza son seguras de color ciego. Usando paletas de colores accesibles garantiza que sus visualizaciones puedan ser interpretadas por todos los lectores:
library(viridis)
library(RColorBrewer)
# Using viridis color scales (color-blind friendly)
ggplot(longitudinal_data, aes(x = time_point, y = depression, fill = treatment)) +
geom_boxplot(alpha = 0.8) +
scale_fill_viridis_d(option = "plasma", end = 0.8) +
labs(
title = "Depression Scores Across Treatment Types",
x = "Time Point",
y = "Depression Score (PHQ-9)",
fill = "Treatment Type"
) +
theme_publication()
# Using ColorBrewer palettes
ggplot(response_data, aes(x = condition, y = count, fill = response)) +
geom_bar(stat = "identity", position = "dodge") +
scale_fill_brewer(palette = "Set2") +
labs(
title = "Treatment Response Distribution",
x = "Assessment Time",
y = "Number of Participants",
fill = "Response"
) +
theme_publication()
Combinando múltiples parcelas
El paquete de patchwork te permite combinar múltiples parcelas ggplot2 en una obra maestra visual, y es un cambiador de juego para cualquiera que esté luchando con la tarea a menudo engorrosa de combinar parcelas. Esto es particularmente útil para crear figuras completas para publicaciones:
library(patchwork)
# Create individual plots
p1 <- ggplot(psych_data, aes(x = group, y = anxiety, fill = group)) +
geom_violin(alpha = 0.6) +
geom_boxplot(width = 0.2, alpha = 0.8) +
scale_fill_manual(values = c("Control" = "#2E86AB", "Treatment" = "#A23B72")) +
labs(title = "A) Anxiety Scores", x = "", y = "Anxiety (GAD-7)") +
theme_publication() +
theme(legend.position = "none")
p2 <- ggplot(psych_data, aes(x = group, y = stress, fill = group)) +
geom_violin(alpha = 0.6) +
geom_boxplot(width = 0.2, alpha = 0.8) +
scale_fill_manual(values = c("Control" = "#2E86AB", "Treatment" = "#A23B72")) +
labs(title = "B) Stress Scores", x = "", y = "Stress (PSS-10)") +
theme_publication() +
theme(legend.position = "none")
p3 <- ggplot(psych_data, aes(x = anxiety, y = stress, color = group)) +
geom_point(size = 2, alpha = 0.6) +
geom_smooth(method = "lm", se = TRUE) +
scale_color_manual(values = c("Control" = "#2E86AB", "Treatment" = "#A23B72")) +
labs(title = "C) Anxiety-Stress Relationship",
x = "Anxiety (GAD-7)",
y = "Stress (PSS-10)",
color = "Group") +
theme_publication()
# Combine plots with patchwork
combined_plot <- (p1 | p2) / p3 +
plot_annotation(
title = "Comprehensive Analysis of Anxiety and Stress by Treatment Group",
subtitle = "Violin plots show distribution, scatter plot shows relationship",
caption = "N = 50 participants; Error bands represent 95% CI",
theme = theme(plot.title = element_text(size = 16, face = "bold"))
)
combined_plot
Visualizaciones especializadas para la investigación de psicología
Visualizaciones de tamaño de efecto
La visualización de los tamaños de los efectos y los intervalos de confianza es cada vez más importante en la investigación psicológica, especialmente en el contexto de la crisis de replicación y el énfasis en la presentación de informes de tamaño de los efectos:
library(ggpubr)
# Create effect size data
effect_data <- data.frame(
study = c("Study 1", "Study 2", "Study 3", "Study 4", "Meta-Analysis"),
effect_size = c(0.45, 0.38, 0.52, 0.41, 0.44),
lower_ci = c(0.25, 0.18, 0.32, 0.21, 0.35),
upper_ci = c(0.65, 0.58, 0.72, 0.61, 0.53),
type = c(rep("Individual", 4), "Summary")
)
# Forest plot
ggplot(effect_data, aes(x = effect_size, y = study, color = type)) +
geom_point(size = 4) +
geom_errorbarh(aes(xmin = lower_ci, xmax = upper_ci), height = 0.2, size = 1) +
geom_vline(xintercept = 0, linetype = "dashed", color = "gray50") +
scale_color_manual(values = c("Individual" = "#2E86AB", "Summary" = "#A23B72")) +
labs(
title = "Effect Sizes Across Studies: CBT for Depression",
subtitle = "Cohen's d with 95% confidence intervals",
x = "Effect Size (Cohen's d)",
y = "",
color = "Study Type"
) +
theme_publication() +
theme(
panel.grid.major.y = element_blank(),
legend.position = "bottom"
)
Visualizaciones de escalas de Likert
Las escalas de la hierba son omnipresentes en la investigación psicológica, y las visualizaciones especializadas pueden comunicar eficazmente patrones de respuesta:
# Create Likert scale data
likert_data <- data.frame(
item = rep(c("I feel confident in my abilities",
"I can handle difficult situations",
"I believe in my decision-making",
"I trust my judgment"), each = 5),
response = rep(c("Strongly Disagree", "Disagree", "Neutral",
"Agree", "Strongly Agree"), 4),
percentage = c(5, 10, 15, 45, 25,
3, 8, 20, 50, 19,
7, 12, 18, 40, 23,
4, 9, 22, 48, 17)
)
# Convert response to factor with correct order
likert_data$response <- factor(likert_data$response,
levels = c("Strongly Disagree", "Disagree",
"Neutral", "Agree", "Strongly Agree"))
# Create diverging stacked bar chart
ggplot(likert_data, aes(x = item, y = percentage, fill = response)) +
geom_bar(stat = "identity", position = "stack") +
coord_flip() +
scale_fill_manual(
values = c("Strongly Disagree" = "#D62246",
"Disagree" = "#F5B700",
"Neutral" = "#E8E8E8",
"Agree" = "#06A77D",
"Strongly Agree" = "#005F73")
) +
labs(
title = "Self-Efficacy Scale Responses",
subtitle = "Percentage distribution across items (N = 200)",
x = "",
y = "Percentage",
fill = "Response"
) +
theme_publication() +
theme(
axis.text.y = element_text(hjust = 0),
legend.position = "bottom"
)
Curvas de supervivencia y datos de tiempo a evolución
Para estudios longitudinales que examinan el tiempo para recaídas, abandonos u otros eventos, las curvas de supervivencia proporcionan una valiosa información:
library(survival)
library(survminer)
# Create survival data
surv_data <- data.frame(
time = c(rexp(50, 0.1), rexp(50, 0.05)),
status = c(rbinom(50, 1, 0.6), rbinom(50, 1, 0.4)),
treatment = rep(c("Standard Care", "Enhanced Treatment"), each = 50)
)
# Fit survival model
fit <- survfit(Surv(time, status) ~ treatment, data = surv_data)
# Create survival plot
ggsurvplot(
fit,
data = surv_data,
pval = TRUE,
conf.int = TRUE,
risk.table = TRUE,
risk.table.height = 0.25,
palette = c("#2E86AB", "#A23B72"),
title = "Time to Relapse by Treatment Type",
xlab = "Time (Months)",
ylab = "Relapse-Free Probability",
legend.title = "Treatment",
legend.labs = c("Standard Care", "Enhanced Treatment"),
ggtheme = theme_publication()
)
Mejores prácticas para la visualización de datos en psicología
Mostrar los datos, no sólo resúmenes
Uno de los principios más importantes de la visualización moderna de datos es mostrar los datos subyacentes siempre que sea posible, en lugar de depender únicamente de estadísticas resumidas. Los gráficos de barras que muestran sólo medios y barras de errores pueden ocultar información distributiva importante. Considerar el uso de tramas de violín, tramas de jitter o puntos de datos individuales sobrepuestos en estadísticas de resumen.
Garantizar la reproducción
Una de las mayores fortalezas de R es la reproducibilidad. Guarda siempre tu código de visualización en scripts bien documentados. Usar rutas de archivos relativas, incluir información de sesión, y considerar el uso de documentos de R Markdown o Quarto para integrar tu código, visualizaciones y texto narrativo en un solo documento reproducible.
# Example of well-documented visualization code
# Project: Depression Treatment Study
# Author: [Your Name]
# Date: 2024-04-07
# Purpose: Create publication figures for main analysis
# Load required packages
library(tidyverse)
library(patchwork)
# Set random seed for reproducibility
set.seed(12345)
# Load data
data <- read_csv("data/treatment_study.csv")
# Create visualization
plot <- ggplot(data, aes(x = time, y = depression_score, color = treatment)) +
geom_point() +
geom_smooth(method = "lm") +
theme_minimal()
# Save plot
ggsave("figures/figure1_treatment_effects.png",
plot = plot,
width = 8,
height = 6,
dpi = 300)
# Print session information for reproducibility
sessionInfo()
Considere su audiencia
Los diferentes públicos requieren diferentes enfoques de visualización. Los documentos académicos pueden beneficiarse de visualizaciones más técnicas y detalladas, mientras que las presentaciones a los interesados o al público pueden requerir gráficos más sencillos e intuitivos. Las visualizaciones interactivas funcionan bien para presentaciones en línea, pero necesitan alternativas estáticas para publicaciones impresas.
Evite el Chart Junk y Mantenga la Claridad
Siguiendo los principios del trabajo de Edward Tufte en la visualización de datos, concéntrese en maximizar la relación entre datos y tinta. Eliminar las líneas de rejilla innecesarias, elementos decorativos y etiquetas redundantes. Cada elemento en su visualización debe servir para comunicar sus datos.
Ahorro y Exportación de Visualizaciones
Crear visualizaciones de alta calidad es sólo parte del proceso, también es necesario exportarlas en formatos apropiados para diferentes usos:
# Save as high-resolution PNG for presentations
ggsave("figure1.png",
plot = last_plot(),
width = 10,
height = 6,
dpi = 300,
bg = "white")
# Save as PDF for publications (vector format, scalable)
ggsave("figure1.pdf",
plot = last_plot(),
width = 10,
height = 6,
device = cairo_pdf)
# Save as TIFF for some journal requirements
ggsave("figure1.tiff",
plot = last_plot(),
width = 10,
height = 6,
dpi = 600,
compression = "lzw")
# Save with specific dimensions in inches (common journal requirement)
ggsave("figure1_journal.pdf",
plot = last_plot(),
width = 7, # Single column width
height = 5,
units = "in")
Recursos para el aprendizaje continuo
El ecosistema de visualización R es vasto y evoluciona continuamente. Aquí hay recursos valiosos para profundizar su conocimiento:
Libros y Tutoriales esenciales
- R for Data Science] by Hadley Wickham and Garrett Grolemund - Una introducción completa al ecosistema tidiverso, disponible en línea gratuita en https://r4ds.had.co.nz/
- ggplot2: Gráficos Elegantes para el Análisis de Datos por Hadley Wickham - La guía definitiva de ggplot2
- Fundamentals of Data Visualization por Claus O. Wilke - Excelentes principios para crear visualizaciones eficaces, disponibles en https://clauswilke.com/dataviz/
- La muestra visual de información cuantitativa por Edward Tufte - Texto clásico sobre principios de visualización
Recursos y Comunidades en línea
- R Graph Gallery] (]https://r-graph-gallery.com/) - Cientos de ejemplos de gráficos con código reproducible
- RStudio Community - Foro activo para hacer preguntas y compartir soluciones
- Desbordamiento de los discos - Base de datos de búsqueda de preguntas y respuestas de programación R
- Twitter/X #rstats community - Comunidad activa compartiendo consejos, visualizaciones y recursos
Paquetes especializados Explotación de valor
- ggpubr - Parcelas listas para la publicación con comparaciones estadísticas
- gganimate - Crear visualizaciones animadas
- ggridges - Parcelas de Ridge para visualizar distribuciones
- ggraph - Visualizaciones de redes y gráficos
- corrplot] - Visualizaciones de matriz de correlación especializadas
- waffle - Gráficos y pictogramas de waffles
- ggalluvial - Diagramas aluviales para flujos de datos categóricos
Pitfalls comunes y cómo evitarlos
Sobrecarga en Parcelas de estante
Cuando usted tiene muchos puntos de datos, pueden superponer y obscurecer patrones. Las soluciones incluyen el uso de la transparencia (parametro alfa), puntos de limpieza ligeramente, utilizando parcelas de densidad 2D, o crear parcelas de hexbin:
# Problem: Overplotting
ggplot(large_dataset, aes(x = var1, y = var2)) +
geom_point()
# Solution 1: Add transparency
ggplot(large_dataset, aes(x = var1, y = var2)) +
geom_point(alpha = 0.3)
# Solution 2: Use 2D density
ggplot(large_dataset, aes(x = var1, y = var2)) +
geom_density_2d_filled() +
scale_fill_viridis_d()
# Solution 3: Hexbin plot
ggplot(large_dataset, aes(x = var1, y = var2)) +
geom_hex() +
scale_fill_viridis_c()
Uso inapropiado de los ejes duales Y
Los dobles y-axes pueden ser engañosos y generalmente se desalientan. En lugar de ello, considere enfrentarse, utilizando diferentes tipos de trama, o estandarizando sus variables antes de trazar.
Ignorar la estructura de datos
Los datos de psicología a menudo tienen estructuras jerárquicas o anidadas (participantes dentro de grupos, medidas repetidas dentro de los participantes). Asegúrese de que sus visualizaciones representan esta estructura, tal vez utilizando diferentes colores para diferentes niveles o creando paneles separados.
Integrando las Visualizaciones en su flujo de trabajo de investigación
La visualización efectiva de datos debe integrarse a lo largo de su proceso de investigación, no sólo se añade al final de la publicación. Use visualizaciones durante la limpieza de datos para identificar errores y atípicos, durante el análisis exploratorio para comprender patrones y relaciones, durante el desarrollo de modelos para evaluar hipótesis y ajuste, y durante la comunicación para presentar claramente los hallazgos.
Considere la posibilidad de crear una plantilla de script de visualización estandarizada para su laboratorio o grupo de investigación. Esto asegura la coherencia entre los proyectos y facilita la generación de visualizaciones rápidamente. Incluya secciones para la carga de datos, preprocesamiento, tramas exploratorias, cifras de publicaciones y materiales complementarios.
Conclusión
R proporciona un enfoque práctico de visualización de datos específicamente dirigido a investigadores, detallando la racionalización para el uso de R para la visualización de datos e introduciendo la "gramática de gráficos" que subyace a la visualización de datos utilizando el paquete ggplot2. La inversión en el aprendizaje R para la visualización de datos paga dividendos sustanciales para investigadores de psicología mediante una mayor reproducibilidad, mayor flexibilidad y la capacidad de crear gráficos de calidad de publicación.
Aunque la curva de aprendizaje inicial puede parecer empinada, la gramática de los gráficos se acerca en última instancia a crear visualizaciones complejas más intuitivas y sistemáticas. Usar la gramática de los gráficos es un cambio de paradigma que hará que su vida sea 100 veces más fácil. Al dominar estas herramientas, los psicólogos pueden transformar sus datos en narrativas visuales convincentes que promueven la comprensión científica y comunican eficazmente los hallazgos de investigación a diversos públicos.
La clave para el éxito es la práctica y la iteración. Comience con simples visualizaciones e incorpore gradualmente técnicas más avanzadas a medida que se sienta cómodo con los fundamentos. Intente con la comunidad R, explore ejemplos en la Galería R Graph, y no dude en adaptar el código de otros para adaptarse a sus necesidades. Recuerde que cada experto R usuario comenzó como principiante, y la comunidad R de apoyo está siempre lista para ayudar.
A medida que la psicología siga abarcando prácticas científicas abiertas y la investigación reproducible, la competencia en la visualización de datos R será cada vez más valiosa. Ya sea que usted está creando diagramas exploratorios para comprender sus datos, diagramas de diagnóstico para comprobar hipótesis estadísticas o cifras de publicación para comunicar sus hallazgos, R proporciona las herramientas que necesita para convertir los datos en ideas.El viaje de datos brutos a una visualización significativa es tanto una habilidad técnica como una forma de arte.