1) INTRODUCCION

En este taller, nos enfocaremos en la predicción de la edad del abulón utilizando diversas mediciones físicas. La edad de un abulón se determina tradicionalmente cortando la cáscara, manchándola y contando el número de anillos bajo un microscopio, un proceso laborioso y tedioso. Sin embargo, con las herramientas adecuadas, podemos predecir la edad del abulón de manera más eficiente utilizando variables como el sexo, la longitud, el diámetro, la altura, y varios pesos.

Trabajaremos con una base de datos que ha sido previamente procesada, eliminando los valores faltantes y escalando los valores continuos para facilitar su uso en una red neuronal artificial (ANN). En RStudio, clasificaremos las variables en continuas, discretas o categóricas, y analizaremos cómo cada una de ellas contribuye a la predicción de la edad.

Además, discutiremos la posibilidad de incorporar factores adicionales, como patrones climáticos y la ubicación, que podrían mejorar la precisión del modelo. Este taller te proporcionará las herramientas necesarias para llevar a cabo análisis avanzados y modelado predictivo, aplicando conceptos clave de estadística y aprendizaje automático.

Al clasificar las variables de la base de datos del abulón, me enfoqué en identificar su naturaleza cualitativa o cuantitativa, así como su tipo específico. La única variable cualitativa es “Sex”, que es categórica nominal y representa el sexo del abulón, con categorías como ‘M’ para masculino y ‘F’ para femenino. No tiene un orden particular.

Las demás variables son cuantitativas, pero varían en su clasificación. “Length”, “Diameter”, “Height”, “Whole_weight”, “Shucked_weight”, “Viscera_weight”, y “Shell_weight” son todas continuas. Estas variables pueden tomar cualquier valor dentro de un rango específico y se miden en milímetros o gramos, lo que me permite trabajar con datos precisos y detallados.

Por otro lado, la variable “Rings” es cuantitativa discreta. Cuenta el número de anillos en la cáscara del abulón, un indicador clave de su edad, que solo puede tomar valores enteros.

Esta clasificación es esencial para elegir las técnicas de análisis y modelado adecuadas. Al trabajar con estas variables en RStudio, podré aplicar diferentes métodos según si son cualitativas o cuantitativas, asegurando así un análisis efectivo y preciso en la predicción de la edad del abulón.

2) DESARROLLO

En este análisis, voy a utilizar la librería highcharter en RStudio para realizar estadísticas descriptivas univariantes, bivariantes y multivariantes. Primero, crearé dos diagramas de barras para visualizar la distribución de la variable cualitativa “Sex”. Luego, generaré dos diagramas de dispersión para analizar la relación entre parejas de variables cuantitativas, como “Length” y “Diameter”. Finalmente, elaboraré una matriz 4x4 de diagramas de dispersión y otra de correlación para cuatro variables cuantitativas, lo que me permitirá explorar las relaciones y correlaciones entre estas variables de manera visual y cuantitativa.

Comando para cargar los datos en R desde internet y renombramos las variables o columnas

abalone_data <- read.csv("https://raw.githubusercontent.com/geovannychoez/prueba/master/abalone.data", header = FALSE)
names(abalone_data) <- c('Sex', 'Length', 'Diameter', 'Height', 'Whole_weight', 
                         'Shucked_weight', 'Viscera_weight', 'Shell_weight', 'Rings')

Estadística descriptiva univariante

Dos diagramas de barras (o columnas) (sólo variables cualitativas) Utilizando la librería highcharter

Diagramas de barras de la variable sexo

En este código, utilizo la librería highcharter para crear un diagrama de columnas que muestra la distribución del sexo de los abulones. Primero, cargo la librería y configuro el gráfico con hc_chart(type = "column"). Luego, añado un título al gráfico con hc_title. En el eje X, coloco las categorías de “Sex” usando hc_xAxis, y en el eje Y, defino la “Frecuencia”. Finalmente, utilizo hc_series para agregar los datos y hc_plotOptions para habilitar las etiquetas de datos en las columnas, mostrando las frecuencias directamente en el gráfico.

library(highcharter)
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
highchart() %>%
  hc_chart(type = "column") %>%
  hc_title(text = "Distribución del Sexo de los Abulones") %>%
  hc_xAxis(categories = names(table(abalone_data$Sex))) %>%
  hc_yAxis(title = list(text = "Frecuencia")) %>%
  hc_series(list(name = "Sexo", data = as.numeric(table(abalone_data$Sex)))) %>%
  hc_plotOptions(column = list(dataLabels = list(enabled = TRUE)))

Analisis del diagrama

El diagrama de barras para Sex revela la distribución de géneros de los abulones en mi muestra. Observé que la frecuencia de géneros se distribuye entre masculino y femenino, permitiéndome identificar cuál género es más predominante y evaluar su posible impacto en estudios biológicos.

Diagramas de barras de la variable Rings

Primero, cargué la base de datos de abulones desde la URL y renombré las columnas para una mejor comprensión. Convertí la variable Rings a un factor para tratarla como una categoría cualitativa en lugar de una variable numérica. Esto me permitió analizar cómo se distribuyen los diferentes números de anillos entre los abulones.

Luego, utilicé la librería highcharter en R para crear un diagrama de barras. Configuré el gráfico como un tipo de columna para mostrar la frecuencia de cada categoría de anillos. El título del gráfico es “Distribución del Número de Anillos de los Abulones”, con el eje X representando los diferentes números de anillos y el eje Y mostrando las frecuencias correspondientes. Añadí una serie de datos para las frecuencias y habilité las etiquetas de datos sobre las barras para una mejor visualización. Este gráfico facilita la interpretación de cómo se distribuyen los números de anillos en la muestra.

# Cargar librería
library(highcharter)

# Leer y preparar los datos
abalone_data <- read.csv("https://raw.githubusercontent.com/geovannychoez/prueba/master/abalone.data", header = FALSE)
names(abalone_data) <- c('Sex', 'Length', 'Diameter', 'Height', 'Whole_weight', 
                         'Shucked_weight', 'Viscera_weight', 'Shell_weight', 'Rings')

# Convertir 'Rings' a factor para tratarlo como variable cualitativa
abalone_data$Rings <- as.factor(abalone_data$Rings)

# Crear el diagrama de barras
highchart() %>%
  hc_chart(type = "column") %>%
  hc_title(text = "Distribución del Número de Anillos de los Abulones") %>%
  hc_xAxis(categories = levels(abalone_data$Rings)) %>%
  hc_yAxis(title = list(text = "Frecuencia")) %>%
  hc_series(list(name = "Número de Anillos", data = as.numeric(table(abalone_data$Rings)))) %>%
  hc_plotOptions(column = list(dataLabels = list(enabled = TRUE)))

Analisis del Diagrama

El diagrama de barras para Rings muestra la frecuencia de diferentes números de anillos en los abulones. Noté qué números de anillos son más comunes, lo cual me ayuda a estimar la edad promedio de los abulones y entender la estructura de edad de la población en mi muestra.


Estadística descriptiva bivariante (4 variables, dos parejas diferentes)

Dos diagramas de dispersión (sólo variables cuantitativas)Utilizando la librería highcharter

Primero, instalé las librerías necesarias (highcharter y htmltools) si no estaban ya instaladas en mi entorno de trabajo. Luego, cargué estas librerías en R para poder crear gráficos interactivos.

A continuación, cargué la base de datos de abulones desde la URL proporcionada utilizando read.csv, y renombré las columnas para facilitar el análisis. Para asegurarme de que los datos estaban limpios, eliminé cualquier fila con valores faltantes en las columnas relevantes (Length, Whole_weight, Diameter, Shucked_weight).

Después, creé dos diagramas de dispersión utilizando la librería highcharter. El primer gráfico muestra la relación entre la longitud (Length) y el peso total (Whole_weight) de los abulones. Configuré el gráfico para que sea interactivo con zoom y resalté los puntos al pasar el cursor sobre ellos. El segundo gráfico ilustra la relación entre el diámetro (Diameter) y el peso sin concha (Shucked_weight). También configuré este gráfico para que sea interactivo y facilitara la visualización de las relaciones entre las variables.

Finalmente, mostré ambos gráficos para analizar las relaciones entre las variables seleccionadas y obtener insights visuales sobre los datos.

# Instalar las librerías necesarias si no están ya instaladas
if (!requireNamespace("highcharter", quietly = TRUE)) {
  install.packages("highcharter")
}

if (!requireNamespace("htmltools", quietly = TRUE)) {
  install.packages("htmltools")
}

# Cargar las librerías
library(highcharter)
library(htmltools)

# Comando para cargar los datos en R desde internet
data <- read.csv("https://raw.githubusercontent.com/geovannychoez/prueba/master/abalone.data", header = FALSE)

# Renombramos las variables o columnas
names(data) <- c('Sex', 'Length', 'Diameter', 'Height', 'Whole_weight', 'Shucked_weight', 'Viscera_weight', 'Shell_weight', 'Rings')

# Limpiar los datos para asegurarse de que no haya NA
data_clean <- na.omit(data[, c('Length', 'Whole_weight', 'Diameter', 'Shucked_weight')])

# Diagrama de dispersión para Length vs Whole_weight
hc_length_weight <- highchart() %>%
  hc_chart(type = "scatter", zoomType = "xy") %>%
  hc_title(text = "Relación entre Longitud y Peso Total") %>%
  hc_xAxis(title = list(text = "Longitud")) %>%
  hc_yAxis(title = list(text = "Peso Total")) %>%
  hc_series(list(
    name = "Abulones",
    data = list_parse2(data.frame(
      x = data_clean$Length,
      y = data_clean$Whole_weight
    )),
    color = "#007bff",
    marker = list(radius = 5)
  )) %>%
  hc_plotOptions(scatter = list(
    marker = list(states = list(
      hover = list(enabled = TRUE, lineColor = 'rgb(100,100,100)', lineWidth = 1)
    )),
    tooltip = list(headerFormat = '<b>{point.x}</b> vs <b>{point.y}</b>')
  ))

# Mostrar el gráfico
hc_length_weight
# Diagrama de dispersión para Diameter vs Shucked_weight
hc_diameter_weight <- highchart() %>%
  hc_chart(type = "scatter", zoomType = "xy") %>%
  hc_title(text = "Relación entre Diámetro y Peso Sin Concha") %>%
  hc_xAxis(title = list(text = "Diámetro")) %>%
  hc_yAxis(title = list(text = "Peso Sin Concha")) %>%
  hc_series(list(
    name = "Abulones",
    data = list_parse2(data.frame(
      x = data_clean$Diameter,
      y = data_clean$Shucked_weight
    )),
    color = "#28a745",
    marker = list(radius = 5)
  )) %>%
  hc_plotOptions(scatter = list(
    marker = list(states = list(
      hover = list(enabled = TRUE, lineColor = 'rgb(100,100,100)', lineWidth = 1)
    )),
    tooltip = list(headerFormat = '<b>{point.x}</b> vs <b>{point.y}</b>')
  ))

# Mostrar el gráfico
hc_diameter_weight

Analisis de los Diagramas

Para el diagrama de dispersión de Length vs Whole_weight, observé que a medida que aumenta la longitud del abulón, también aumenta su peso total, indicando una relación positiva y directa entre estas dos variables. Mientras que en el gráfico de Diameter vs Shucked_weight, noté que a mayor diámetro, mayor es el peso sin concha, lo que sugiere una correlación positiva. Ambos gráficos revelan relaciones consistentes entre las variables, lo que puede ayudarme a comprender mejor las características físicas de los abulones.


Estadística descriptiva multivariante

#Matriz4x4 gráfica de diagramas de dispersión (4 variables cuantitativas) y una Matriz4x4 gráfica de correlación (las mismas 4 variables cuantitativas)

Primero, instalé las librerías GGally y corrplot si no estaban ya en mi entorno de trabajo, para poder crear visualizaciones avanzadas y matrices de correlación. Luego, cargué estas librerías y la base de datos de abulones desde la URL proporcionada, renombrando las columnas para facilitar su uso.

Para asegurarme de que los datos estuvieran limpios, eliminé cualquier fila con valores faltantes en las variables cuantitativas seleccionadas (Length, Diameter, Height, Whole_weight). Posteriormente, seleccioné estas cuatro variables para realizar un análisis más detallado.

Creé una matriz de diagramas de dispersión de 4x4 utilizando ggpairs de la librería GGally. Este gráfico muestra las relaciones entre cada par de variables, con puntos en la parte superior para observar la dispersión y suavizado en la parte inferior para identificar tendencias. Esta matriz ayuda a visualizar cómo se relacionan entre sí las variables seleccionadas.

Luego, calculé la matriz de correlación para estas cuatro variables y utilicé corrplot para crear un gráfico de correlación. Este gráfico muestra las correlaciones entre las variables, con colores representando la fuerza de la relación y los coeficientes de correlación visibles en la gráfica. Esto me permitió evaluar rápidamente las relaciones y la fuerza de asociación entre las variables cuantitativas en mi análisis.

# Instalar las librerías necesarias si no están ya instaladas
if (!requireNamespace("GGally", quietly = TRUE)) {
  install.packages("GGally")
}
## Registered S3 method overwritten by 'GGally':
##   method from   
##   +.gg   ggplot2
if (!requireNamespace("corrplot", quietly = TRUE)) {
  install.packages("corrplot")
}

# Cargar las librerías
library(GGally)
## Cargando paquete requerido: ggplot2
library(corrplot)
## corrplot 0.92 loaded
# Cargar los datos
data <- read.csv("https://raw.githubusercontent.com/geovannychoez/prueba/master/abalone.data", header = FALSE)
names(data) <- c('Sex', 'Length', 'Diameter', 'Height', 'Whole_weight', 'Shucked_weight', 'Viscera_weight', 'Shell_weight', 'Rings')

# Limpiar los datos para asegurarse de que no haya NA
data_clean <- na.omit(data[, c('Length', 'Diameter', 'Height', 'Whole_weight', 'Shucked_weight', 'Viscera_weight', 'Shell_weight')])

# Seleccionar las cuatro variables cuantitativas de interés
vars <- data_clean[, c('Length', 'Diameter', 'Height', 'Whole_weight')]
  
# Crear una matriz de diagramas de dispersión (4x4)
ggpairs(vars, 
        title = "Matriz de Diagramas de Dispersión de 4 Variables",
        upper = list(continuous = "points"),
        lower = list(continuous = "smooth"))

# Calcular la matriz de correlación
cor_matrix <- cor(vars)

# Crear una matriz de correlación (4x4)
corrplot(cor_matrix, 
         method = "color", 
         type = "upper", 
         tl.col = "black", 
         tl.srt = 45, 
         title = "Matriz de Correlación de 4 Variables",
         addCoef.col = "black")  # Añadir los coeficientes de correlación a la gráfica

Analisis del Diagrama

Al analizar la matriz de diagramas de dispersión, observé las relaciones entre Length, Diameter, Height, y Whole_weight. Noté que el diagrama de dispersión de Length vs. Diameter muestra una clara relación positiva, lo que indica que los abulones más largos suelen tener un diámetro mayor. El gráfico de Length vs. Whole_weight revela una fuerte correlación positiva, lo que sugiere que los abulones más largos tienden a pesar más, como era de esperar.

La relación entre Diameter y Whole_weight también es fuerte y positiva, confirmando que un diámetro mayor se asocia con un mayor peso total. El diagrama de Height vs. Whole_weight muestra una correlación positiva, pero menos pronunciada, indicando que los abulones más altos tienen un peso mayor, aunque no tanto como con la longitud y el diámetro.

Al calcular la matriz de correlación, vi que estas relaciones se reflejan en los coeficientes de correlación. Las altas correlaciones entre longitud y peso total, y diámetro y peso total, refuerzan la idea de que estas variables están estrechamente relacionadas. Estos análisis me ayudan a comprender mejor cómo se interrelacionan las características físicas de los abulones.

4) Concluciones

  1. Al analizar los diagramas de dispersión, observé que la longitud y el diámetro de los abulones están fuertemente correlacionados con su peso total. Esto indica que los abulones más largos y más anchos tienden a pesar más, lo cual es una observación esperada. Esta relación me ayuda a comprender cómo el tamaño físico de los abulones se traduce en un mayor peso, lo que puede ser crucial para estudios sobre su crecimiento y desarrollo.

  2. La matriz de correlación y los diagramas de dispersión mostraron que el diámetro y la longitud tienen una fuerte influencia en el peso total, mientras que la altura tiene una influencia moderada. Estas observaciones destacan que el peso de los abulones está más relacionado con sus dimensiones físicas principales, como la longitud y el diámetro. Este conocimiento es útil para modelar y predecir el peso de los abulones basándonos en estas variables clave.