Ir al contenido principal

[DATA SCIENCE] [R PROGRAMMING] [DATA VISUALIZATION] Explorando Técnicas de Análisis y Visualización de Datos en R

 

Introducción

En el análisis de datos, la correcta partición y visualización de los datasets es crucial para obtener conclusiones precisas y valiosas. En este artículo, exploraremos diversas técnicas en R para particionar datasets, crear histogramas, scatterplots, boxplots, y ajustar curvas de regresión y suavizado.

1. Partición de Datasets

La partición de datasets es una etapa fundamental en el proceso de machine learning. Permite dividir los datos en conjuntos de entrenamiento, validación y prueba para asegurar que nuestros modelos se entrenen y evalúen adecuadamente.

Función para Particionar Datasets


# Función para automatizar la partición de datasets
partition_data <- function(data, target_column, train_ratio = 0.7, validate_ratio = NULL, seed = 123) {
  # Establecer la semilla para reproducibilidad
  set.seed(seed)
  
  # Crear partición de entrenamiento
  training_ids <- createDataPartition(data[[target_column]], p = train_ratio, list = FALSE)
  data_training <- data[training_ids, ]
  temp <- data[-training_ids, ]

  # Inicializar variables para validación y prueba
  data_validation <- NULL
  data_testing <- NULL
  
  # Si se especifica un ratio de validación
  if (!is.null(validate_ratio)) {
    validation_ids <- createDataPartition(temp[[target_column]], p = validate_ratio / (1 - train_ratio), list = FALSE)
    data_validation <- temp[validation_ids, ]
    data_testing <- temp[-validation_ids, ]
  } else {
    # Si no se especifica ratio de validación, dividir el resto en validación y prueba a partes iguales
    validation_ids <- createDataPartition(temp[[target_column]], p = 0.5, list = FALSE)
    data_validation <- temp[validation_ids, ]
    data_testing <- temp[-validation_ids, ]
  }
  
  # Devolver las particiones
  list(training = data_training, validation = data_validation, testing = data_testing)
}

# Ejemplo de uso
data <- read.csv("../data/tema2/BostonHousing.csv")
partitions <- partition_data(data, target_column = "MEDV", train_ratio = 0.7, validate_ratio = 0.15)
data_training <- partitions$training
data_validation <- partitions$validation
data_testing <- partitions$testing


2. Visualización de Datos

2.1 Histograma con Curva de Densidad

Los histogramas son útiles para visualizar la distribución de una variable. Podemos superponer una curva de densidad para comprender mejor la distribución.


# Crear el histograma de la variable 'mpg'

hist(auto$mpg, 

     breaks = 16,

     probability = TRUE, 

     main = "Histograma y Densidad de MPG", 

     xlab = "Millas por Galón (MPG)", 

     col = "lightblue", 

     border = "black")


# Añadir la curva de densidad

lines(density(auto$mpg), 

      col = "red", 

      lwd = 2)




2.2 Scatterplots y Ajuste de Curvas

Los scatterplots ayudan a visualizar relaciones entre dos variables. Podemos añadir diferentes tipos de ajustes de curvas para identificar patrones.

Scatterplot con Recta de Regresión


# Crear scatterplot de 'mpg' vs 'horsepower'

plot(auto$horsepower, auto$mpg, 

     main = "Scatterplot de MPG vs Horsepower con Recta de Regresión", 

     xlab = "Potencia del Motor (Horsepower)", 

     ylab = "Millas por Galón (MPG)", 

     pch = 19, 

     col = "blue")


# Ajustar el modelo lineal

model <- lm(mpg ~ horsepower, data = auto)


# Añadir la recta de regresión

abline(model, col = "red", lwd = 2)


Scatterplot con Loess Smoothing


# Crear scatterplot de 'mpg' vs 'horsepower'

plot(auto$horsepower, auto$mpg, 

     main = "Scatterplot de MPG vs Horsepower con Loess Smoothing", 

     xlab = "Potencia del Motor (Horsepower)", 

     ylab = "Millas por Galón (MPG)", 

     pch = 19, 

     col = "blue")


# Añadir la curva Loess

loess_fit <- loess(mpg ~ horsepower, data = auto)

lines(auto$horsepower, predict(loess_fit), col = "red", lwd = 2)



3. Análisis Avanzado de Datos

3.1 Boxplots

Los boxplots son útiles para visualizar la distribución de una variable y detectar outliers. Podemos crear boxplots para diferentes variables y compararlas.

Boxplot para Todas las Variables Numéricas


# Seleccionar solo las variables numéricas

numeric_vars <- auto[, sapply(auto, is.numeric)]


# Crear un layout para múltiples gráficos

par(mfrow = c(ceiling(ncol(numeric_vars)/2), 2))


# Generar boxplots para cada variable numérica

for (var in names(numeric_vars)) {

  boxplot(numeric_vars[[var]], 

          main = paste("Boxplot de", var), 

          ylab = var, 

          col = "lightblue", 

          border = "darkblue")

}


# Resetear layout

par(mfrow = c(1, 1))


Tesis: Selección de Técnicas de Ajuste de Curvas

La elección de la técnica de ajuste de curvas más adecuada depende del contexto y de la naturaleza de los datos. Aquí algunas consideraciones para elegir la mejor técnica:

Regresión Lineal:

  • Ventajas: Simple y fácil de interpretar.

  • Desventajas: No captura relaciones no lineales.

Loess Smoothing:

  • Ventajas: Captura tendencias locales, útil para datos con patrones no lineales.

  • Desventajas: Puede ser computacionalmente costoso para grandes datasets.

Smoothing Splines:

  • Ventajas: Flexibles y pueden modelar relaciones complejas.

  • Desventajas: Pueden sobreajustarse a datos ruidosos.

Modelos Aditivos Generalizados (GAM):

  • Ventajas: Combinan la flexibilidad de los splines con la capacidad de modelar relaciones complejas.

  • Desventajas: Pueden ser difíciles de interpretar y requieren más tiempo de cómputo.

Conclusión

Elegir la técnica de ajuste de curvas adecuada es crucial para la precisión y la interpretabilidad del modelo. Para datos lineales simples, la regresión lineal puede ser suficiente. Para datos más complejos, técnicas como Loess, Smoothing Splines o GAMs pueden proporcionar una mejor representación de los datos.


Comentarios

Entradas populares de este blog

[CIVILIZACION][MODELOS] La Civilización Hiper-Avanzada y la Escala Kardashev

La Civilización Hiper-Avanzada y la Escala Kardashev ¿Qué es la Escala Kardashev? La Escala Kardashev es un marco propuesto en 1964 por el astrofísico Nikolai Kardashev para clasificar civilizaciones según su capacidad de aprovechar energía: Tipo I: Aprovecha toda la energía disponible en su planeta (~10¹⁶ watts). Nosotros estamos en ~0,72 según Carl Sagan. Tipo II: Captura toda la energía de su estrella (por ejemplo, con una esfera de Dyson). ~10²⁶ watts. Tipo III: Controla la energía de toda su galaxia (~10³⁶ watts). Carl Sagan propuso una fórmula para grados intermedios: K = [log10(Potencia en watts) - 6] / 10 La humanidad (~1,74 × 10¹³ watts) = ~0,72 en esta escala. ¿Cómo se podría acelerar la transición a Tipo II o III si obviamos la ética? Si ignoramos la moral, la estrategia sería pragmática y extrema: Centralización extrema del poder: Unificación bajo un mando único global tecnocrático. Explotación total de recursos: Minería planetaria masiva, co...

[Validación Cruzada] [Machine Learning] [Evaluación de Modelos] [Ciencia de Datos] [R Programming] [Resampling] Validación Cruzada: Concepto y Técnicas Principales

Validación Cruzada: Concepto y Técnicas Principales Validación Cruzada: Concepto y Técnicas Principales La validación cruzada es un conjunto de técnicas utilizadas para evaluar la capacidad de generalización de un modelo de machine learning. Su objetivo principal es determinar cómo de bien puede el modelo desempeñarse con datos no vistos, proporcionando una evaluación más robusta y fiable en comparación con dividir los datos en un simple conjunto de entrenamiento y prueba. Principales Técnicas de Validación Cruzada 1. K-Fold Cross Validation (Validación Cruzada K-Fold) El conjunto de datos se divide en \(k\) particiones o "pliegues" de igual tamaño. El modelo se entrena \(k\) veces: en cada iteración, un pliegue diferente se utiliza como conjunto de prueba y los \(k-1\) pliegues restantes como conjunto de entrenamiento. La métrica final (por ejemplo, precisión, F1, etc.) se c...

Encontré 42 GB de modelos de IA fosilizados en mi PC: una puesta al día honesta sobre IA local, conceptos y entornos Python en 2026

Hace tiempo que no tocaba nada de IA en mi PC, y al echar un ojo descubrí varios programas que no recordaba para qué eran y, sobre todo, modelos de hace año y medio acumulando polvo en el disco. Lo que empezó como una limpieza acabó siendo una puesta al día completa: Ollama, conceptos fundamentales, mapa del ecosistema, comparativas, y un setup de Python desde cero. Lo dejo aquí ordenado por si a alguien le sirve. 1. El punto de partida: 42 GB de modelos zombi Lo primero que encontré fue Ollama corriendo en segundo plano (ese icono pequeño en la barra de tareas que llevaba meses sin tocar). Un ollama list reveló cinco modelos descargados hacía 18 meses, ocupando casi 42 GB: llama-3-8B-programming-questions — 16 GB SuperNova-Medius-Q8_0 — 15 GB uncensored_wizard_7b — 4.1 GB llama3.2 — 2 GB llama3.1 — 4.7 GB En el mundo de la IA, 18 meses son una eternidad. Han salido Llama 3.3 y 4, Qwen 2.5 y 3, DeepSeek-V3 y R1, Gemma 3 y 4, gpt-oss... cualquiera de los nu...