knitr::opts_chunk$set(echo = TRUE)
library(ggplot2)
library(dplyr)
library(plotly)

Primer problema

1. Introducción

El conjunto de datos Abalone proviene de investigaciones marinas llevadas a cabo por el Departamento de Industria Primaria y Pesca de Tasmania (Australia). Su objetivo principal es predecir la edad de los abalones (un tipo de molusco marino) a partir de mediciones físicas. La edad de un abalone se determina contando el número de anillos en su concha.

Se registraron los siguientes datos para cada individuo:

Sexo : M (macho), F (hembra), I (indeterminado/infante).

Longitud: en mm (la longitud máxima sin la concha).

Diámetro: en mm (medida perpendicular a la longitud).

Altura: en mm (con el abalone extendido).

Peso total: en gramos.

Peso de la carne limpia: en gramos.

Peso de las vísceras: en gramos.

Peso de la concha : en gramos.

Número de anillos: variable entera que representa la edad estimada.entre el sexo de los abalones con el peso, el diametro o la longitud de los abalones

El propósito del análisis es encontrar si existe una relación entre el sexo de los abalones con el peso, el diametro o la longitud

2. Preparación de los datos

En este paso ajustamos la base de datos para que al realizar los analisis se omitan los valores que estan vacios, ademas volvemos la caracteristica sexo un factor para realizar el analisis deseado.

abalone=read.csv("C:/Users/sebas/Downloads/abalone.data", header = FALSE, 
                    col.names = c("Sexo", "Longitud", "Diametro", "Altura", 
                                  "Peso_total_sin_visceras", "Peso_Sin_Concha", 
                                  "Peso_visceras", "Peso_cascara", "Anillos"))

abalone=na.omit(abalone)
abalone$Sexo=as.factor(abalone$Sexo)

3. Comprensión de los datos

ggplotly(ggplot(abalone, aes(x = Longitud, y = Peso_total_sin_visceras, color = Sexo)) +
  geom_point(alpha = 0.5) +
  geom_smooth(method = "lm", se = FALSE) +
  labs(title = "Relación entre Longitud y Peso por Sexo", y = "Peso sin vísceras") +
  theme_minimal())

Se observa una relación lineal positiva entre la longitud y el peso sin vísceras para todos los sexos, las líneas de regresión para cada sexo muestran pendientes similares, lo que significa que el peso aumenta con la longitud de forma comparable en los tres grupos. Los puntos de los machos y hembras se ven más dispersos que en los de infantes, lo que puede indicar mas variabilidad en machos y hembras. El grupo de infantes tiene valores menores que es lo que se espera.

ggplotly(ggplot(abalone, aes(x = Diametro, y = Peso_total_sin_visceras, color = Sexo)) +
  geom_point(alpha = 0.5) +
  geom_smooth(method = "lm", se = FALSE) +
  labs(title = "Relación entre Diámetro y Peso por Sexo", y = "Peso sin vísceras") +
  theme_minimal())

Hay una correlación positiva entre el diámetro y el peso sin vísceras. Las líneas de regresión por sexo indican tendencias similares entre los machos y las hembras. Los infantes vuelven a presentar valores menores que los machos y las hembras. Se puede observar que tanto el diámetro como la longitud influyen de forma significativa en el peso, independientemente del sexo.

ggplotly(ggplot(abalone, aes(x = Sexo, y = Peso_total_sin_visceras, fill = Sexo)) +
  geom_boxplot() +
  labs(title = "Distribución del Peso sin Vísceras por Sexo", y = "Peso sin vísceras") +
  theme_minimal())

Los machos y las hembras tienen distribuiciones de peso similares, aunque con ligeras diferencias en la meidana. Los infantes tienen significativamente menor peso. Hay presencia de datos atípicos, especialmente en machos y hembras. La dispersión es mayor en adultos.

ggplotly(ggplot(abalone, aes(x = Sexo, y = Longitud, fill = Sexo)) +
  geom_boxplot() +
  labs(title = "Distribución de la Longitud por Sexo", y = "Longitud") +
  theme_minimal())

Los machos y las hembras presentan valores mayores, los infantes tienen los menores valores. Las medianas de machos y hembras son cercanas, aunque los machos parecen tener ligeramente mayor longitud en promedio. Hay más valores atípicos en los adultos.

ggplotly(ggplot(abalone, aes(x = Sexo, y = Diametro, fill = Sexo)) +
  geom_boxplot() +
  labs(title = "Distribución del Diámetro por Sexo", y = "Diámetro") +
  theme_minimal())

Los machos y las hembras presentan valores más altos en comparación con los infantes. Las diferencias entres machos y hembras son pequeñas pero existen. En machos y hembras hay una mayor variedad de tamaños.

4. Modelado

Se hacen modelos para cada uno de los sexos (Machos, Hembras, Infantes) en los cuales se relaciona el peso con la longitud y el diamatro.

modelo_M <- lm(Peso_total_sin_visceras ~ Longitud + Diametro, data = filter(abalone, Sexo == "M"))
summary(modelo_M)
## 
## Call:
## lm(formula = Peso_total_sin_visceras ~ Longitud + Diametro, data = filter(abalone, 
##     Sexo == "M"))
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.46983 -0.12002 -0.03950  0.07074  1.08957 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -1.34633    0.02651 -50.783  < 2e-16 ***
## Longitud     2.77109    0.24244  11.430  < 2e-16 ***
## Diametro     1.78045    0.29501   6.035 1.99e-09 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.1842 on 1525 degrees of freedom
## Multiple R-squared:  0.8469, Adjusted R-squared:  0.8467 
## F-statistic:  4218 on 2 and 1525 DF,  p-value: < 2.2e-16

Tanto longitud como diámetro suelen ser altamente significativos. El R2 indica que que una proporción de la variabilidad del peso se explica por longitud y diámetro. El modelo indica que a mayor longitud y diámetro mayor peso, el peso crece más con la longitud que con el diámetro.

modelo_F <- lm(Peso_total_sin_visceras ~ Longitud + Diametro, data = filter(abalone, Sexo == "F"))
summary(modelo_F)
## 
## Call:
## lm(formula = Peso_total_sin_visceras ~ Longitud + Diametro, data = filter(abalone, 
##     Sexo == "F"))
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.40127 -0.09893 -0.02071  0.06894  0.81476 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -1.61985    0.02895 -55.955   <2e-16 ***
## Longitud     2.64991    0.20656  12.829   <2e-16 ***
## Diametro     2.48902    0.25082   9.923   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.1536 on 1304 degrees of freedom
## Multiple R-squared:  0.8729, Adjusted R-squared:  0.8727 
## F-statistic:  4476 on 2 and 1304 DF,  p-value: < 2.2e-16

Tanto longitud como diámetro suelen ser altamente significativos. El R2 indica que que una proporción de la variabilidad del peso se explica por longitud y diámetro. El modelo indica que a mayor longitud.

modelo_I <- lm(Peso_total_sin_visceras ~ Longitud + Diametro, data = filter(abalone, Sexo == "I"))
summary(modelo_I)
## 
## Call:
## lm(formula = Peso_total_sin_visceras ~ Longitud + Diametro, data = filter(abalone, 
##     Sexo == "I"))
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.41576 -0.06635 -0.02852  0.03534  0.92326 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -0.57745    0.01237 -46.678  < 2e-16 ***
## Longitud     0.96569    0.16368   5.900  4.6e-09 ***
## Diametro     1.82466    0.20222   9.023  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.1084 on 1339 degrees of freedom
## Multiple R-squared:  0.8569, Adjusted R-squared:  0.8567 
## F-statistic:  4010 on 2 and 1339 DF,  p-value: < 2.2e-16

Tanto longitud como diámetro suelen ser altamente significativos. El R2 es más bajo. El modelo indica que a mayor longitud y diámetro mayor peso, pero de una manera más moderada que en los machos y las hembras.

5. Evaluación

nuevo <- data.frame(Longitud = c(0.5, 0.6), Diametro = c(0.4, 0.45))

predict(modelo_M, newdata = nuevo)
##         1         2 
## 0.7513923 1.1175239
predict(modelo_F, newdata = nuevo)
##         1         2 
## 0.7007126 1.0901543
predict(modelo_I, newdata = nuevo)
##         1         2 
## 0.6352607 0.8230626

Como se espera, el peso predicho aumenta con la longitud y el diámetro en los tres grupos. Esto confirma que los modelos estan captando correctamente la relación positiva.

6. Conclusión

Peso, longitud y diámetro están todos relacionados positivamente entre sí, y esas relaciones se mantienen dentro de cada grupo de sexo.

Las relaciones son positivas y significativas para todas las categorías.

Los tres modelos funcionan como se esperaba, prediciendo un mayor peso con mayor longitud y diámetro.

Sí, existe una relación significativa entre el sexo de los abalones y algunas de sus características físicas, especialmente el peso, longitud y diámetro.

Segundo problema

1. Introducción

La base de datos utilizada en este análisis corresponde al Iris Plants Database, una de las bases de datos más reconocidas en el ámbito de la estadística, minería de datos y aprendizaje automático. Fue originalmente introducida por el estadístico británico Ronald A. Fisher en 1936 en su artículo “The use of multiple measurements in taxonomic problems”.

El conjunto contiene un total de 150 observaciones, cada una representando una flor del género Iris, con mediciones morfológicas de sus partes principales. Se incluyen tres especies de Iris: Iris setosa, Iris versicolor, Iris virginica. Para cada flor, se registraron las siguientes cuatro variables numéricas: longitud del sépalo (en cm), ancho del sépalo (en cm), longitud del pétalo (en cm) y ancho del pétalo (en cm).

El proposito del análisis es ncontrar si existe una relacion entre longitud y ancho de pétalo y sépalo con la especie.

2. Preparación de datos

En este paso ajustamos la base de datos para que al realizar los analisis se omitan los valores que estan vacios.

datos = read.csv("C:/Users/sebas/Downloads/iris.data", header = FALSE)
colnames(datos) = c("Longitud.Sepalo", "Ancho.Sepalo", "Longitud.Petalo", "Ancho.Petalo", "Especie")
datos = na.omit(datos)

3. Comprensión de datos

plot(datos$Ancho.Sepalo, datos$Longitud.Sepalo, 
     main = "Longitud del sépalo ~ Ancho del sépalo", 
     col = "blue", pch = 19)

El gráfico muestra una correlación leve entre el ancho del sepalo y su longitud. La relación que se observa es baja.

plot(datos$Ancho.Petalo, datos$Longitud.Petalo, 
     main = "Longitud del pétalo ~ Ancho del pétalo", 
     col = "green", pch = 19)

El gráfico muestra una correlación positiva es decir a mayor ancho del pétalo mayor longitud. La relación que se observa es buena.

plot(datos$Longitud.Petalo, datos$Longitud.Sepalo, 
     main = "Longitud del sépalo ~ Longitud del pétalo", 
     col = "purple", pch = 19)

El gráfico muestra una correlación moderada. La relación no es tan fuerte como en el anterior pero existe una tendencia ascendente.

plot(datos$Ancho.Petalo, datos$Ancho.Sepalo, 
     main = "Ancho del sépalo ~ Ancho del pétalo", 
     col = "orange", pch = 19)

El gráfico muestra una correlación negativa con una tendencia para abajo. La relación que se observa es baja ya que se presenta una gran dispersión de los datos.

ggplotly(ggplot(datos, aes(x = Especie, y = Longitud.Sepalo, fill = Especie)) +
  geom_boxplot() +
  labs(title = "Longitud del Sépalo", x = "Especie", y = "Longitud del Sépalo") +
  scale_fill_manual(values = c("setosa" = "blue", "versicolor" = "blue", "virginica" = "blue")) +
  theme_minimal())

En el gráfico se observa que Iris setosa es la especie con menor longitud del sépalo e Iris virginica es la especie que presenta mayor longitud de sépalo.

ggplotly(ggplot(datos, aes(x = Especie, y = Ancho.Sepalo, fill = Especie)) +
  geom_boxplot() +
  labs(title = "Ancho del Sépalo", x = "Especie", y = "Ancho del Sépalo") +
  scale_fill_manual(values = c("setosa" = "lightgreen", "versicolor" = "lightgreen", "virginica" = "lightgreen")) +
  theme_minimal())

En el gráfico se observa que Iris setosa es la especie con menor ancho del sépalo e Iris virginica es la especie que presenta mayor ancho de sépalo.

ggplotly(ggplot(datos, aes(x = Especie, y = Longitud.Petalo, fill = Especie)) +
  geom_boxplot() +
  labs(title = "Longitud del Pétalo", x = "Especie", y = "Longitud del Pétalo") +
  scale_fill_manual(values = c("setosa" = "lightpink", "versicolor" = "lightpink", "virginica" = "lightpink")) +
  theme_minimal())

En el gráfico se observa que Iris setosa es la especie con menor longitud del pétalo e Iris virginica es la especie que presenta mayor longitud de pétalo.

ggplotly(ggplot(datos, aes(x = Especie, y = Ancho.Petalo, fill = Especie)) +
  geom_boxplot() +
  labs(title = "Ancho del Pétalo", x = "Especie", y = "Ancho del Pétalo") +
  scale_fill_manual(values = c("setosa" = "lightgray", "versicolor" = "lightgray", "virginica" = "lightgray")) +
  theme_minimal())

En el gráfico se observa que Iris setosa es la especie con menor ancho del pétalo e Iris virginica es la especie que presenta mayor acho de pétalo.

4. Modelado

modelo_LS=lm(Longitud.Sepalo ~ Especie, data = datos)
summary(modelo_LS)
## 
## Call:
## lm(formula = Longitud.Sepalo ~ Especie, data = datos)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -1.6880 -0.3285 -0.0060  0.3120  1.3120 
## 
## Coefficients:
##                        Estimate Std. Error t value Pr(>|t|)    
## (Intercept)              5.0060     0.0728  68.762  < 2e-16 ***
## EspecieIris-versicolor   0.9300     0.1030   9.033 8.77e-16 ***
## EspecieIris-virginica    1.5820     0.1030  15.366  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.5148 on 147 degrees of freedom
## Multiple R-squared:  0.6187, Adjusted R-squared:  0.6135 
## F-statistic: 119.3 on 2 and 147 DF,  p-value: < 2.2e-16

La relación entre las especies y la longitud del sépalo es significativa. El R2 demuestra que el hay una buena relación con el modelo pero podria mejorar.

modelo_AS=lm(Ancho.Sepalo ~ Especie, data = datos)
summary(modelo_AS)
## 
## Call:
## lm(formula = Ancho.Sepalo ~ Especie, data = datos)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -1.118 -0.218  0.026  0.226  0.982 
## 
## Coefficients:
##                        Estimate Std. Error t value Pr(>|t|)    
## (Intercept)             3.41800    0.04814  70.998  < 2e-16 ***
## EspecieIris-versicolor -0.64800    0.06808  -9.518  < 2e-16 ***
## EspecieIris-virginica  -0.44400    0.06808  -6.521 1.05e-09 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.3404 on 147 degrees of freedom
## Multiple R-squared:  0.3919, Adjusted R-squared:  0.3836 
## F-statistic: 47.36 on 2 and 147 DF,  p-value: < 2.2e-16

La relación entre las especies y el ancho del sépalo es significativa. El R2 demuestra que el hay una baja relación del modelo con los datos.

modelo_LP=lm(Longitud.Petalo ~ Especie, data = datos)
summary(modelo_LP)
## 
## Call:
## lm(formula = Longitud.Petalo ~ Especie, data = datos)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -1.260 -0.258  0.036  0.240  1.348 
## 
## Coefficients:
##                        Estimate Std. Error t value Pr(>|t|)    
## (Intercept)             1.46400    0.06086   24.06   <2e-16 ***
## EspecieIris-versicolor  2.79600    0.08606   32.49   <2e-16 ***
## EspecieIris-virginica   4.08800    0.08606   47.50   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.4303 on 147 degrees of freedom
## Multiple R-squared:  0.9413, Adjusted R-squared:  0.9405 
## F-statistic:  1179 on 2 and 147 DF,  p-value: < 2.2e-16

La relación entre las especies y el longitud del pétalo es significativa. El R2 demuestra que el hay una alta relación del modelo con los datos.

modelo_AP=lm(Ancho.Petalo ~ Especie, data = datos)
summary(modelo_AP)
## 
## Call:
## lm(formula = Ancho.Petalo ~ Especie, data = datos)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -0.626 -0.126 -0.026  0.156  0.474 
## 
## Coefficients:
##                        Estimate Std. Error t value Pr(>|t|)    
## (Intercept)             0.24400    0.02899   8.418 3.15e-14 ***
## EspecieIris-versicolor  1.08200    0.04099  26.395  < 2e-16 ***
## EspecieIris-virginica   1.78200    0.04099  43.471  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.205 on 147 degrees of freedom
## Multiple R-squared:  0.9288, Adjusted R-squared:  0.9279 
## F-statistic: 959.3 on 2 and 147 DF,  p-value: < 2.2e-16

La relación entre las especies y el ancho del pétalo es significativa. El R2 demuestra que el hay una alta relación del modelo con los datos.

5. Evaluación

# 1. Cargar el dataset de ejemplo
datos <- iris

# 2. Asegúrate de que Especie es un factor
datos$Especie <- factor(datos$Species)  # Species es el nombre real en iris

# 3. Crear modelos lineales
modelo_AP <- lm(Petal.Width ~ Especie, data = datos)
modelo_LP <- lm(Petal.Length ~ Especie, data = datos)
modelo_AS <- lm(Sepal.Width ~ Especie, data = datos)
modelo_LS <- lm(Sepal.Length ~ Especie, data = datos)

# 4. Crear nuevo data frame para predecir
nuevos_datos <- data.frame(
  Especie = factor(c("setosa", "versicolor", "virginica"), 
                   levels = levels(datos$Especie))
)

# 5. Hacer predicciones
pred_AP <- predict(modelo_AP, newdata = nuevos_datos)
pred_LP <- predict(modelo_LP, newdata = nuevos_datos)
pred_AS <- predict(modelo_AS, newdata = nuevos_datos)
pred_LS <- predict(modelo_LS, newdata = nuevos_datos)

# 6. Combinar predicciones en tabla
resultados <- data.frame(
  Especie = nuevos_datos$Especie,
  Ancho_Petalo = pred_AP,
  Longitud_Petalo = pred_LP,
  Ancho_Sepalo = pred_AS,
  Longitud_Sepalo = pred_LS
)

print(resultados)
##      Especie Ancho_Petalo Longitud_Petalo Ancho_Sepalo Longitud_Sepalo
## 1     setosa        0.246           1.462        3.428           5.006
## 2 versicolor        1.326           4.260        2.770           5.936
## 3  virginica        2.026           5.552        2.974           6.588

Las variables del pétalo (ancho y longitud) muestran diferencias marcadas entre las especies, especialmente entre setosa y las otras dos. Las variables del sépalo muestran diferencias más sutiles, pero también siguen una tendencia que ayuda a diferenciar especies.

6. Conclusión

Sí, existe una relación significativa entre la especie de flor y las dimensiones del pétalo y sépalo. Especialmente el ancho y longitud del pétalo son altamente discriminantes entre especies, lo que se refleja tanto en los modelos como en las predicciones.