CARGA DE LA BASE DE DATOS

abalone1=read.csv("https://raw.githubusercontent.com/geovannychoez/prueba/master/abalone.data", header = FALSE)

names(abalone1)=c('Sex','Length','Diameter','Height','Whole_weight','Shucked_weight','Viscera_weight','Shell_weight','Rings')

ANALISIS DESCRIPTIVO DE DATOS DE LA BASE DE DATOS ABALONE

# Cargar el paquete ggplot2
library(ggplot2)

# Resumen estadístico básico
summary(abalone1)
##      Sex                Length         Diameter          Height      
##  Length:4177        Min.   :0.075   Min.   :0.0550   Min.   :0.0000  
##  Class :character   1st Qu.:0.450   1st Qu.:0.3500   1st Qu.:0.1150  
##  Mode  :character   Median :0.545   Median :0.4250   Median :0.1400  
##                     Mean   :0.524   Mean   :0.4079   Mean   :0.1395  
##                     3rd Qu.:0.615   3rd Qu.:0.4800   3rd Qu.:0.1650  
##                     Max.   :0.815   Max.   :0.6500   Max.   :1.1300  
##   Whole_weight    Shucked_weight   Viscera_weight    Shell_weight   
##  Min.   :0.0020   Min.   :0.0010   Min.   :0.0005   Min.   :0.0015  
##  1st Qu.:0.4415   1st Qu.:0.1860   1st Qu.:0.0935   1st Qu.:0.1300  
##  Median :0.7995   Median :0.3360   Median :0.1710   Median :0.2340  
##  Mean   :0.8287   Mean   :0.3594   Mean   :0.1806   Mean   :0.2388  
##  3rd Qu.:1.1530   3rd Qu.:0.5020   3rd Qu.:0.2530   3rd Qu.:0.3290  
##  Max.   :2.8255   Max.   :1.4880   Max.   :0.7600   Max.   :1.0050  
##      Rings       
##  Min.   : 1.000  
##  1st Qu.: 8.000  
##  Median : 9.000  
##  Mean   : 9.934  
##  3rd Qu.:11.000  
##  Max.   :29.000
# Estructura del dataset
str(abalone1)
## 'data.frame':    4177 obs. of  9 variables:
##  $ Sex           : chr  "M" "M" "F" "M" ...
##  $ Length        : num  0.455 0.35 0.53 0.44 0.33 0.425 0.53 0.545 0.475 0.55 ...
##  $ Diameter      : num  0.365 0.265 0.42 0.365 0.255 0.3 0.415 0.425 0.37 0.44 ...
##  $ Height        : num  0.095 0.09 0.135 0.125 0.08 0.095 0.15 0.125 0.125 0.15 ...
##  $ Whole_weight  : num  0.514 0.226 0.677 0.516 0.205 ...
##  $ Shucked_weight: num  0.2245 0.0995 0.2565 0.2155 0.0895 ...
##  $ Viscera_weight: num  0.101 0.0485 0.1415 0.114 0.0395 ...
##  $ Shell_weight  : num  0.15 0.07 0.21 0.155 0.055 0.12 0.33 0.26 0.165 0.32 ...
##  $ Rings         : int  15 7 9 10 7 8 20 16 9 19 ...
# Gráfico de barras para la variable cualitativa 'Sex' 
#Al analizar el gráfico de barras que muestra la distribución de los abulones según la variable `Sex`, observamos tres categorías: 'M' (macho), 'F' (hembra) e 'I' (inmaduro). De acuerdo con los datos, la categoría más frecuente es la de machos, seguida de las hembras, y con una menor cantidad de inmaduros. Este gráfico permite ver claramente que hay una mayor proporción de abulones machos en comparación con los otros sexos, lo cual podría tener implicaciones en el análisis del crecimiento y la distribución de las características físicas en función del sexo.

ggplot(abalone1, aes(x = Sex)) +
  geom_bar(fill = "lightblue") +
  labs(title = "Distribución por Sexo", x = "Sexo", y = "Frecuencia") +
  theme_minimal()

# Histogramas para las variables cuantitativas

# Longitud (Length)
#Al generar el histograma de la variable cuantitativa `Length` (Longitud), analizo cómo se distribuyen los valores de longitud de los abulones en el conjunto de datos. El gráfico muestra que la mayoría de las longitudes se concentran en un rango específico, con un pico en torno a los 0.5. Esto sugiere que la longitud de los abulones sigue una distribución relativamente sesgada hacia valores menores, con pocas observaciones en los extremos (muy cortos o muy largos). El histograma utiliza un color azul claro con bordes negros y un estilo minimalista para facilitar la interpretación. Este análisis ayuda a entender la variabilidad y la tendencia central de la longitud en la muestra.

ggplot(abalone1, aes(x = Length)) +
  geom_histogram(binwidth = 0.05, fill = "lightblue", color = "black") +
  labs(title = "Histograma de Longitud", x = "Longitud", y = "Frecuencia") +
  theme_minimal()

# Diámetro (Diameter)
#Al analizar el histograma de la variable cuantitativa `Diameter` (Diámetro), observo la distribución de los diámetros de los abulones. El gráfico revela que la mayoría de los diámetros se agrupan en un rango intermedio, con una mayor frecuencia alrededor de 0.35. Esto indica que la mayoría de los abulones tienen diámetros cercanos a este valor. El histograma, presentado en color verde claro con bordes negros y un diseño minimalista, facilita la visualización de cómo se distribuyen los diámetros en el conjunto de datos, permitiendo identificar la tendencia central y la variabilidad de esta característica en la muestra.

ggplot(abalone1, aes(x = Diameter)) +
  geom_histogram(binwidth = 0.05, fill = "lightgreen", color = "black") +
  labs(title = "Histograma de Diámetro", x = "Diámetro", y = "Frecuencia") +
  theme_minimal()

# Altura (Height)
# Al examinar el histograma de la variable `Height` (Altura), se observa la distribución de las alturas de los abulones. El gráfico muestra que las alturas están concentradas en valores bajos, con una mayor frecuencia en torno a 0.1. La mayoría de los abulones tienen alturas cercanas a este valor, indicando que las alturas de los abulones tienden a ser pequeñas. El histograma, presentado en color coral claro con bordes negros y un diseño minimalista, permite una visualización clara de la distribución y la concentración de las alturas, destacando la tendencia predominante en la muestra.

ggplot(abalone1, aes(x = Height)) +
  geom_histogram(binwidth = 0.01, fill = "lightcoral", color = "black") +
  labs(title = "Histograma de Altura", x = "Altura", y = "Frecuencia") +
  theme_minimal()

# Peso total (Whole_weight)
# Al analizar el histograma de la variable `Whole_weight` (Peso Total), se observa cómo se distribuyen los pesos totales de los abulones. El gráfico revela que los pesos tienden a concentrarse en un rango medio, con una mayor frecuencia alrededor de 0.5 a 1.0. La mayoría de los abulones tienen pesos en este intervalo, sugiriendo que el peso total de los abulones muestra una distribución sesgada hacia los valores menores. El histograma, con un color dorado claro y bordes negros, presenta una visualización clara de la distribución del peso total en la muestra, destacando las concentraciones predominantes en el conjunto de datos.

ggplot(abalone1, aes(x = Whole_weight)) +
  geom_histogram(binwidth = 0.1, fill = "lightgoldenrod", color = "black") +
  labs(title = "Histograma de Peso Total", x = "Peso Total", y = "Frecuencia") +
  theme_minimal()

# Peso desmenuzado (Shucked_weight)
#Al examinar el histograma de la variable `Shucked_weight` (Peso Desmenuzado), se observa la distribución del peso de la parte desmenuzada de los abulones. El gráfico muestra que la mayoría de los abulones tienen pesos desmenuzados en el rango de aproximadamente 0.1 a 0.3, con una frecuencia mayor en este intervalo. Esto indica que la mayoría de los abulones tienen pesos desmenuzados en este rango. El histograma, presentado en color rosa claro con bordes negros y un diseño minimalista, facilita la visualización de cómo se distribuyen los pesos desmenuzados en la muestra, revelando la tendencia predominante y la variabilidad en esta característica.

ggplot(abalone1, aes(x = Shucked_weight)) +
  geom_histogram(binwidth = 0.05, fill = "lightpink", color = "black") +
  labs(title = "Histograma de Peso Desmenuzado", x = "Peso Desmenuzado", y = "Frecuencia") +
  theme_minimal()

# Peso de víscera (Viscera_weight)
#Al analizar el histograma de la variable Viscera_weight (Peso del Víscera), se observa la distribución del peso de la víscera en los abulones. El gráfico revela que los pesos de la víscera se concentran en un rango bajo, con una frecuencia alta en valores cercanos a 0.1. Esto sugiere que la mayoría de los abulones tienen pesos de víscera en este intervalo, indicando una distribución sesgada hacia valores menores. El histograma, con un color azul claro y bordes negros, presenta una visualización clara y sencilla de la distribución del peso de la víscera, ayudando a identificar la tendencia central y la variabilidad de esta característica en el conjunto de datos.

ggplot(abalone1, aes(x = Viscera_weight)) +
  geom_histogram(binwidth = 0.01, fill = "lightblue", color = "black") +
  labs(title = "Histograma de Peso del Víscera", x = "Peso del Víscera", y = "Frecuencia") +
  theme_minimal()

# Peso de la cáscara (Shell_weight)
#Al analizar el histograma de la variable Shell_weight (Peso de la Cáscara), se observa la distribución del peso de la cáscara en los abulones. El gráfico indica que la mayoría de los pesos de cáscara se concentran en un rango intermedio, con una mayor frecuencia en torno a valores entre 0.1 y 0.3. Esto sugiere que los abulones tienen pesos de cáscara predominantes en este intervalo. El histograma, con un color verde claro y bordes negros, proporciona una visualización clara de cómo se distribuyen los pesos de la cáscara, destacando la tendencia central y la variabilidad dentro del conjunto de datos.

ggplot(abalone1, aes(x = Shell_weight)) +
  geom_histogram(binwidth = 0.05, fill = "lightgreen", color = "black") +
  labs(title = "Histograma de Peso de la Cáscara", x = "Peso de la Cáscara", y = "Frecuencia") +
  theme_minimal()

# Anillos (Rings)
#Al examinar el histograma de la variable Rings (Anillos), se observa la distribución del número de anillos en los abulones. El gráfico revela que la mayoría de los abulones tienen entre 8 y 12 anillos, con una mayor frecuencia en torno a los 9 y 10 anillos. Esto sugiere que la edad de los abulones, medida por el número de anillos, tiende a concentrarse en un rango medio. El histograma, presentado en color coral claro con bordes negros y un diseño minimalista, facilita la visualización de la distribución y ayuda a identificar la tendencia central y la variabilidad en el número de anillos dentro de la muestra.

ggplot(abalone1, aes(x = Rings)) +
  geom_histogram(binwidth = 1, fill = "lightcoral", color = "black") +
  labs(title = "Histograma de Anillos", x = "Anillos", y = "Frecuencia") +
  theme_minimal()

Resumen del analisis individual por variable

Al analizar el dataset de abulones (abalone1), comienzo observando las variables que lo componen. La variable cualitativa Sex muestra tres categorías: macho, hembra y juvenil, que describen el sexo de los abulones. El resto de las variables son cuantitativas, relacionadas con las medidas físicas y pesos del abulón, como Length, Diameter, Height, y varios pesos (Whole_weight, Shucked_weight, etc.), junto con Rings, una variable discreta que indica los anillos de crecimiento, utilizada para inferir la edad.

Mi primer paso es el análisis de la distribución de cada variable. Al observar los histogramas de las variables cuantitativas, noto que las distribuciones varían: algunas, como el peso total (Whole_weight), parecen tener una distribución sesgada hacia la izquierda, mientras que variables como la longitud (Length) parecen más simétricas.

En cuanto a Rings, veo que los valores están mayormente concentrados entre 5 y 15 anillos, lo que sugiere que la mayoría de los abulones tienen una edad joven a media. Al revisar el gráfico de barras para Sex, noto una mayor cantidad de abulones machos, seguida por juveniles y hembras.

con esta información del análisis descriptivo de la base de datos procederemos a realizar un análisis de regresión lineal múltiple separando una variable Y como dependiente y tres variables que tengan mayo relación con la dependente para ello se utilizara el grafico de correlación lineal el cual nos ayudara a interpretar y seleccionar lo mencionado.


ANÁLISIS DE REGRESIÓN LINEAL MÚLTIPLE

# Configurar el repositorio de CRAN
options(repos = c(CRAN = "https://cloud.r-project.org/"))

# Instalar y cargar librerías necesarias
install.packages("corrplot")
## Installing package into 'C:/Users/DATAPRO/AppData/Local/R/win-library/4.4'
## (as 'lib' is unspecified)
## package 'corrplot' successfully unpacked and MD5 sums checked
## 
## The downloaded binary packages are in
##  C:\Users\DATAPRO\AppData\Local\Temp\RtmpghKHRn\downloaded_packages
library(corrplot)
## corrplot 0.94 loaded
# Seleccionar todas las variables cuantitativas del dataset abalone1
variables_cuantitativas <- abalone1[, c('Rings', 'Length', 'Diameter', 'Height', 
                                        'Whole_weight', 'Shucked_weight', 
                                        'Viscera_weight', 'Shell_weight')]

# Calcular la matriz de correlación de Pearson
matriz_correlacion <- cor(variables_cuantitativas)

# Mostrar la matriz de correlación
print(matriz_correlacion)
##                    Rings    Length  Diameter    Height Whole_weight
## Rings          1.0000000 0.5567196 0.5746599 0.5574673    0.5403897
## Length         0.5567196 1.0000000 0.9868116 0.8275536    0.9252612
## Diameter       0.5746599 0.9868116 1.0000000 0.8336837    0.9254521
## Height         0.5574673 0.8275536 0.8336837 1.0000000    0.8192208
## Whole_weight   0.5403897 0.9252612 0.9254521 0.8192208    1.0000000
## Shucked_weight 0.4208837 0.8979137 0.8931625 0.7749723    0.9694055
## Viscera_weight 0.5038192 0.9030177 0.8997244 0.7983193    0.9663751
## Shell_weight   0.6275740 0.8977056 0.9053298 0.8173380    0.9553554
##                Shucked_weight Viscera_weight Shell_weight
## Rings               0.4208837      0.5038192    0.6275740
## Length              0.8979137      0.9030177    0.8977056
## Diameter            0.8931625      0.8997244    0.9053298
## Height              0.7749723      0.7983193    0.8173380
## Whole_weight        0.9694055      0.9663751    0.9553554
## Shucked_weight      1.0000000      0.9319613    0.8826171
## Viscera_weight      0.9319613      1.0000000    0.9076563
## Shell_weight        0.8826171      0.9076563    1.0000000
# Visualizar la matriz de correlación con un gráfico
corrplot(matriz_correlacion, method = "color", 
         type = "upper", tl.col = "black", tl.srt = 45, 
         addCoef.col = "black", number.cex = 0.7)

En este análisis del grafico de correlación lineal previo, mi objetivo es identificar las relaciones más fuertes entre las variables cuantitativas del dataset de abulones y la variable dependiente, Rings, que representa la edad estimada del abulón. Utilizo la correlación de Pearson para medir la fuerza y la dirección de estas relaciones, donde: - 1 indica una correlación positiva perfecta, - -1 una correlación negativa perfecta, - 0 ninguna correlación.

La variable dependiente Y es Rings, y quiero determinar cuáles son las tres variables que tienen mayor relación con ella para utilizarlas como variables predictoras. Analizo todas las variables cuantitativas: Length, Diameter, Height, Whole_weight, Shucked_weight, Viscera_weight, y Shell_weight. donde el grafico me indica que al calcular la matriz de correlación, notamos que las variables más relacionadas con Rings son:

Con estos resultados, determino que las tres variables predictoras más importantes para estimar la edad del abulón son Whole_weight, Diameter, y Length. Estas tienen la mayor correlación positiva con la variable dependiente Rings, lo que me confirma que las características físicas del abulón están estrechamente relacionadas con su edad.

Análisis de Regresión Lineal Múltiple

Con base en el análisis de correlación previo, se ha identificado que las tres variables con mayor relación con la variable dependiente Rings (edad del abulón) son: - Whole_weight (peso total) - Diameter (diámetro) - Length (longitud)

El modelo de regresión lineal múltiple a utilizar se puede expresar mediante la siguiente fórmula matemática:

\[ Rings = \beta_0 + \beta_1 \cdot Whole\_weight + \beta_2 \cdot Diameter + \beta_3 \cdot Length + \epsilon \]

Donde: - \(\beta_0\) es el intercepto, que indica el valor esperado de Rings cuando todas las variables predictoras son iguales a cero. - \(\beta_1, \beta_2, \beta_3\) son los coeficientes de regresión, que indican cuánto cambia la variable dependiente Rings por cada unidad de cambio en las variables Whole_weight, Diameter y Length, respectivamente. - \(\epsilon\) es el término de error o residuo, que captura la variabilidad no explicada por el modelo.

El análisis de regresión lineal múltiple permite: - Estimación de parámetros: Se obtienen los coeficientes \(\beta_1, \beta_2, \beta_3\), que indican la relación entre las variables predictoras y la variable dependiente. - Coeficiente de determinación (\(R^2\)): Este valor mide qué proporción de la variabilidad en Rings puede ser explicada por el conjunto de variables independientes. Cuanto más cercano esté el valor de \(R^2\) a 1, mejor será el ajuste del modelo. - Pruebas de hipótesis: Evaluamos las hipótesis individuales de los coeficientes de regresión:

Este enfoque permitirá generar predicciones sobre la edad del abulón a partir de sus características físicas, validando la importancia de cada predictor en el modelo.

# Cargar las librerías necesarias
library(ggplot2)
library(dplyr)
## 
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
# Aumentar el tiempo de espera para la conexión
options(timeout = 120)

# Cargar el dataset desde la URL
abalone1 <- read.csv('https://raw.githubusercontent.com/geovannychoez/prueba/master/abalone.data', 
                     header = FALSE, 
                     col.names = c('Sex', 'Length', 'Diameter', 'Height', 
                                   'Whole_weight', 'Shucked_weight', 
                                   'Viscera_weight', 'Shell_weight', 'Rings'))

# Construcción del modelo de regresión lineal múltiple
modelo <- lm(Rings ~ Length + Diameter + Whole_weight, data = abalone1)

# Resumen del modelo
summary(modelo)
## 
## Call:
## lm(formula = Rings ~ Length + Diameter + Whole_weight, data = abalone1)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -6.7221 -1.6740 -0.6754  0.9279 15.4240 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept)    3.4120     0.3107  10.982  < 2e-16 ***
## Length       -11.8042     2.1341  -5.531 3.37e-08 ***
## Diameter      29.8645     2.5857  11.550  < 2e-16 ***
## Whole_weight   0.6345     0.2233   2.841  0.00451 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2.629 on 4173 degrees of freedom
## Multiple R-squared:  0.3356, Adjusted R-squared:  0.3351 
## F-statistic: 702.7 on 3 and 4173 DF,  p-value: < 2.2e-16
# Ecuación del modelo (en formato LaTeX para RMarkdown)
intercepto <- round(coef(modelo)[1], 4)
coef_length <- round(coef(modelo)[2], 4)
coef_diameter <- round(coef(modelo)[3], 4)
coef_whole_weight <- round(coef(modelo)[4], 4)

# Mostrar la ecuación usando LaTeX en RMarkdown
cat("La ecuación del modelo es: \\[ \\text{Rings} = ", 
    intercepto, 
    " + ", coef_length, "\\times \\text{Length}",
    " + ", coef_diameter, "\\times \\text{Diameter}",
    " + ", coef_whole_weight, "\\times \\text{Whole_weight} \\]\n")
## La ecuación del modelo es: \[ \text{Rings} =  3.412  +  -11.8042 \times \text{Length}  +  29.8645 \times \text{Diameter}  +  0.6345 \times \text{Whole_weight} \]
# Coeficiente de determinación (R²)
cat("Coeficiente de determinación (\\( R^2 \\)): ", round(summary(modelo)$r.squared, 4), "\n")
## Coeficiente de determinación (\( R^2 \)):  0.3356
# Prueba F para la hipótesis global (ANOVA)
anova_result <- anova(modelo)
print(anova_result)
## Analysis of Variance Table
## 
## Response: Rings
##                Df  Sum Sq Mean Sq  F value    Pr(>F)    
## Length          1 13454.5 13454.5 1946.716 < 2.2e-16 ***
## Diameter        1  1059.0  1059.0  153.222 < 2.2e-16 ***
## Whole_weight    1    55.8    55.8    8.074  0.004512 ** 
## Residuals    4173 28841.3     6.9                       
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Prueba de hipótesis individuales (coeficientes)
coef_test <- summary(modelo)$coefficients
print(coef_test)
##                 Estimate Std. Error   t value     Pr(>|t|)
## (Intercept)    3.4119651  0.3106942 10.981749 1.115520e-27
## Length       -11.8041690  2.1340704 -5.531293 3.373362e-08
## Diameter      29.8645454  2.5856745 11.550002 2.129915e-30
## Whole_weight   0.6344825  0.2232934  2.841474 4.512329e-03
# Conclusión sobre el modelo
cat("Conclusión: El modelo de regresión lineal múltiple muestra que Length, Diameter y Whole_weight son variables predictoras significativas para Rings, con un \\( R^2 \\) de ", round(summary(modelo)$r.squared, 4), ".\n")
## Conclusión: El modelo de regresión lineal múltiple muestra que Length, Diameter y Whole_weight son variables predictoras significativas para Rings, con un \( R^2 \) de  0.3356 .
# Conclusión sobre el modelo basado en ANOVA
if (anova_result$`Pr(>F)`[1] < 0.05) {
  cat("El modelo es estadísticamente significativo en su conjunto.\n")
} else {
  cat("El modelo no es estadísticamente significativo en su conjunto.\n")
}
## El modelo es estadísticamente significativo en su conjunto.
# Conclusiones sobre los coeficientes individuales
if (all(coef_test[,4] < 0.05)) {
  cat("Todos los coeficientes son estadísticamente significativos.\n")
} else {
  cat("No todos los coeficientes son estadísticamente significativos.\n")
}
## Todos los coeficientes son estadísticamente significativos.

Graficas del nalisis

# Graficar relaciones con regresión ajustada
ggplot(abalone1, aes(x = Length, y = Rings)) +
  geom_point(color = "blue", alpha = 0.5) +
  geom_smooth(method = "lm", color = "red", formula = y ~ x) +
  labs(title = "Rings vs Length con ajuste de regresión",
       x = "Length", 
       y = "Rings")

ggplot(abalone1, aes(x = Diameter, y = Rings)) +
  geom_point(color = "blue", alpha = 0.5) +
  geom_smooth(method = "lm", color = "red", formula = y ~ x) +
  labs(title = "Rings vs Diameter con ajuste de regresión",
       x = "Diameter", 
       y = "Rings")

ggplot(abalone1, aes(x = Whole_weight, y = Rings)) +
  geom_point(color = "blue", alpha = 0.5) +
  geom_smooth(method = "lm", color = "red", formula = y ~ x) +
  labs(title = "Rings vs Whole_weight con ajuste de regresión",
       x = "Whole_weight", 
       y = "Rings")

# Predicciones vs Valores Reales
abalone1$predicciones <- predict(modelo)

ggplot(abalone1, aes(x = Rings, y = predicciones)) +
  geom_point(color = "blue", alpha = 0.5) +
  geom_abline(slope = 1, intercept = 0, color = "red", linetype = "dashed") +
  labs(title = "Valores Predichos vs Valores Reales de Rings",
       x = "Rings (Valores Reales)", 
       y = "Rings (Predicciones)")

En los diagramas generados, se observan las relaciones entre Rings y las variables predictoras (Length, Diameter, y Whole_weight) con líneas de regresión ajustadas. Cada gráfico muestra un conjunto de puntos azules que representan las observaciones reales y una línea de regresión en rojo que modela la relación. La línea de regresión indica cómo cambia Rings en función de cada variable predictora.

El último gráfico compara las predicciones del modelo con los valores reales de Rings. Los puntos muestran las predicciones frente a los valores reales, con una línea roja discontinua que representa la igualdad entre los valores predichos y reales.


ANÁLISIS DE COMPONENTES PRINCIPALES (ACP)

# Configurar el repositorio de CRAN
options(repos = c(CRAN = "https://cloud.r-project.org/"))

# Instalar y cargar librerías necesarias
install.packages("factoextra")
## Installing package into 'C:/Users/DATAPRO/AppData/Local/R/win-library/4.4'
## (as 'lib' is unspecified)
## package 'factoextra' successfully unpacked and MD5 sums checked
## 
## The downloaded binary packages are in
##  C:\Users\DATAPRO\AppData\Local\Temp\RtmpghKHRn\downloaded_packages
install.packages("reshape2")
## Installing package into 'C:/Users/DATAPRO/AppData/Local/R/win-library/4.4'
## (as 'lib' is unspecified)
## package 'reshape2' successfully unpacked and MD5 sums checked
## 
## The downloaded binary packages are in
##  C:\Users\DATAPRO\AppData\Local\Temp\RtmpghKHRn\downloaded_packages
library(ggplot2)
library(dplyr)
library(factoextra)  # Para ACP y biplot
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
library(reshape2)    # Para transformar datos

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

# Seleccionar solo las variables cuantitativas para el ACP
datos_cuantitativos <- abalone1[, c('Length', 'Diameter', 'Height', 'Whole_weight', 'Shucked_weight', 'Viscera_weight', 'Shell_weight')]

# Normalizar los datos (recomendado para ACP)
datos_normalizados <- scale(datos_cuantitativos)

# Realizar el Análisis de Componentes Principales
acp <- prcomp(datos_normalizados, center = TRUE, scale. = TRUE)

# Gráfica de los coeficientes de las componentes y variables originales
# Coeficientes (loadings) de las componentes
coeficientes <- acp$rotation
coeficientes_df <- as.data.frame(coeficientes)
coeficientes_df$Variable <- rownames(coeficientes_df)

# Gráfico de coeficientes de las componentes
coeficientes_melted <- melt(coeficientes_df, id.vars = "Variable")

ggplot(coeficientes_melted, aes(x = variable, y = value, fill = Variable)) +
  geom_bar(stat = "identity", position = "dodge") +
  labs(title = "Coeficientes de las Componentes Principales",
       x = "Componente Principal",
       y = "Coeficiente") +
  theme_minimal() +
  scale_fill_manual(values = c("Length" = "steelblue", 
                                "Diameter" = "darkorange",
                                "Height" = "forestgreen",
                                "Whole_weight" = "purple",
                                "Shucked_weight" = "red",
                                "Viscera_weight" = "cyan",
                                "Shell_weight" = "magenta"))

# Gráfico de la varianza explicada por cada componente
varianza_explicada <- acp$sdev^2
proporcion_varianza <- varianza_explicada / sum(varianza_explicada)

ggplot(data.frame(Componente = factor(1:length(proporcion_varianza)),
                  Varianza = proporcion_varianza), aes(x = Componente, y = Varianza)) +
  geom_bar(stat = "identity", fill = "steelblue") +
  labs(title = "Varianza Explicada por Cada Componente",
       x = "Componente Principal",
       y = "Proporción de Varianza") +
  theme_minimal()

# Biplot de las dos primeras componentes
fviz_pca_biplot(acp, 
                 repel = TRUE,
                 col.var = "red",
                 col.ind = "black",
                 title = "Biplot de las Dos Primeras Componentes Principales")

Conclusiones del Análisis de Componentes Principales (ACP)

  1. Gráfico de Coeficientes de Componentes: Al revisar el gráfico de coeficientes, veo que las variables Whole_weight (Peso total), Shucked_weight (Peso de carne), Viscera_weight (Peso de vísceras), y Shell_weight (Peso de concha) tienen coeficientes más altos en las primeras componentes principales. Esto me indica que estas variables son fundamentales para explicar la variabilidad en los datos. En contraste, variables como Height (Altura) presentan coeficientes más bajos, sugiriendo que tienen un menor impacto en las componentes principales.

  2. Varianza Explicada por cada componetes: El gráfico de la varianza explicada me muestra que las dos primeras componentes capturan la mayor parte de la variabilidad en los datos. Esto me sugiere que considerar solo estas dos componentes es crucial para una representación efectiva de los datos, ya que juntas explican una proporción significativa de la variabilidad total.

  3. Biplot de las Dos Primeras Componentes: Al observar el biplot, puedo ver cómo se proyectan las observaciones y las variables en el espacio de las dos primeras componentes principales. Las observaciones están distribuidas de acuerdo con estas componentes, lo que me ayuda a identificar patrones o agrupaciones. Las variables con vectores largos en el biplot, como Whole_weight (Peso total) y Shucked_weight (Peso de carne), son las que más influyen en las componentes principales. Además, la orientación de los vectores me muestra las correlaciones entre las variables.

El ACP revela que las variables relacionadas con el peso son clave para entender la variabilidad en los datos de abulones. Las dos primeras componentes principales son esenciales para explicar la variabilidad del conjunto de datos. Las variables con mayores coeficientes son las más influyentes, proporcionando una visión clara sobre la estructura de los datos y siendo útiles para la reducción de dimensionalidad y la interpretación de modelos predictivos.