Punto 1: Analisis univariado y multivariado poblacional.

Se tomo una poblacion de 1000 estudiantes y se construyo una base de datos con el fin de estudiar los habitos generales y condiciones de vida de los mismos, y como estos afectaban su desempeño academico, reflejado en las notas de sus examenes finales.

A continuacion se realizara el analizis univariado y multivariado de los datos obtenidos:

Analizis univariado:

Edad:

library(moments)  # para skewness y kurtosis
library(ggplot2)

cat("\n----------- ANÁLISIS UNIVARIADO POBLACIONAL DE LA VARIABLE: EDAD -----------\n")
## 
## ----------- ANÁLISIS UNIVARIADO POBLACIONAL DE LA VARIABLE: EDAD -----------
# Asegurar que Age sea numérica
DaAn_1_ $Age_P <- as.numeric(DaAn_1_ $Age_P)

# Resumen básico
summary(DaAn_1_ $Age_P)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   17.00   18.75   20.00   20.50   23.00   24.00
# Media
media_edad_P <- mean(DaAn_1_ $Age_P, na.rm = TRUE)
cat("\nMedia:", round(media_edad_P, 2), "\n")
## 
## Media: 20.5
# Mediana
mediana_edad_P <- median(DaAn_1_ $Age_P, na.rm = TRUE)
cat("Mediana:", mediana_edad_P, "\n")
## Mediana: 20
# Moda
moda <- function(x) {
  ux <- unique(x)
  ux[which.max(tabulate(match(x, ux)))]
}
cat("Moda:", moda(DaAn_1_ $Age_P), "\n")
## Moda: 20
# Desviación estándar y varianza
cat("Desviación estándar:", round(sd(DaAn_1_ $Age_P, na.rm = TRUE), 2), "\n")
## Desviación estándar: 2.31
cat("Varianza:", round(var(DaAn_1_ $Age_P, na.rm = TRUE), 2), "\n")
## Varianza: 5.33
# Rango y IQR
cat("Rango:", paste(range(DaAn_1_ $Age_P, na.rm = TRUE), collapse = " - "), "\n")
## Rango: 17 - 24
cat("IQR:", IQR(DaAn_1_ $Age_P, na.rm = TRUE), "\n")
## IQR: 4.25
# Coeficiente de variación
cve_edad_P <- 100 * sd(DaAn_1_ $Age_P, na.rm = TRUE) / mean(DaAn_1_ $Age_P, na.rm = TRUE)
cat("Coeficiente de variación (CVE):", round(cve_edad_P, 2), "%\n")
## Coeficiente de variación (CVE): 11.26 %
# MAD
MAD_edad_P <- mad(DaAn_1_ $Age_P, na.rm = TRUE)
cat("MAD:", MAD_edad_P, "\n")
## MAD: 2.9652
# Cuantiles
cat("Cuantiles (Q1, Q2, Q3):\n")
## Cuantiles (Q1, Q2, Q3):
print(quantile(DaAn_1_ $Age_P, probs = c(0.25, 0.5, 0.75), na.rm = TRUE))
##   25%   50%   75% 
## 18.75 20.00 23.00
# Medidas de forma
cat("Asimetría (skewness):", round(skewness(DaAn_1_ $Age_P, na.rm = TRUE), 2), "\n")
## Asimetría (skewness): 0.01
cat("Curtosis:", round(kurtosis(DaAn_1_ $Age_P, na.rm = TRUE), 2), "\n")
## Curtosis: 1.78
# Detección de outliers (basado en IQR)
Q1 <- quantile(DaAn_1_ $Age_P, 0.25, na.rm = TRUE)
Q3 <- quantile(DaAn_1_ $Age_P, 0.75, na.rm = TRUE)
IQR_val_P <- Q3 - Q1

lim_inf_P <- Q1 - 1.5 * IQR_val_P
lim_sup_P <- Q3 + 1.5 * IQR_val_P

outliers <- DaAn_1_ $Age_P[DaAn_1_ $Age_P < lim_inf_P | DaAn_1_ $Age_P > lim_sup_P]
cat("Valores atípicos detectados (outliers):\n")
## Valores atípicos detectados (outliers):
print(outliers)
## numeric(0)
# -------------------
# Visualizaciones
# -------------------

# Histograma
ggplot(DaAn_1_ , aes(x = Age_P)) +
  geom_histogram(binwidth = 1, fill = "skyblue", color = "black") +
  labs(title = "Histograma de Edad", x = "Edad", y = "Frecuencia") +
  theme_minimal()

# Densidad
ggplot(DaAn_1_ , aes(x = Age_P)) +
  geom_density(fill = "lightgreen") +
  labs(title = "Densidad de Edad", x = "Edad") +
  theme_minimal()

# Boxplot
ggplot(DaAn_1_ , aes(y = Age_P)) +
  geom_boxplot(fill = "salmon", color = "black") +
  labs(title = "Boxplot de Edad", y = "Edad") +
  theme_minimal()

Genero:

install.packages("plotrix") 
library(plotrix)

# Tabla de frecuencias
sex_table <- table(DaAn_1_$Sex_P)  
sex_prop <- prop.table(sex_table) * 100

cat("\nFrecuencias absolutas:\n")
## 
## Frecuencias absolutas:
print(sex_table)
## 
## Female   Male  Other 
##    481    477     42
cat("\nFrecuencias relativas (%):\n")
## 
## Frecuencias relativas (%):
print(round(sex_prop, 2))
## 
## Female   Male  Other 
##   48.1   47.7    4.2
# Preparar etiquetas para el gráfico de pastel
sex_percent <- round(prop.table(sex_table) * 100, 1)
labels <- paste(names(sex_table), "-", sex_percent, "%")

# Gráfico de barras
y_lim <- c(0, max(sex_table) + 20) 
bp <- barplot(sex_table,
              main = "Distribución por género (Población)",
              col = c("lightpink", "lightblue", "lightgreen"),
              ylab = "Frecuencia",
              xlab = "Sexo",
              border = "black",
              names.arg = names(sex_table),
              ylim = y_lim,
              cex.names = 1.1)

# Añadir valores encima de las barras
text(x = bp, 
     y = sex_table + 10,
     labels = sex_table,
     cex = 1.1)

# Gráfico de pastel 3D
pie3D(sex_table,
      radius = 1.0,
      main = "Porcentaje de personas por género (Población)",
      labels = labels,
      labelcex = 0.8,
      explode = 0.1,
      col = topo.colors(length(sex_table)),
      border = "white")

Horas de estudio:

library(moments)  # para skewness y kurtosis
library(ggplot2)

cat("\n----------- ANÁLISIS UNIVARIADO POBLACIONAL DE LA VARIABLE: HORAS DE ESTUDIO -----------\n")
## 
## ----------- ANÁLISIS UNIVARIADO POBLACIONAL DE LA VARIABLE: HORAS DE ESTUDIO -----------
# Asegurar que Study_Hours_P sea numérica
DaAn_1_$Study_Hours_P <- as.numeric(DaAn_1_$Study_Hours_P)

# Resumen básico
summary(DaAn_1_$Study_Hours_P)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    0.00    2.60    3.50    3.55    4.50    8.30
# Media
media_estudio_P <- mean(DaAn_1_$Study_Hours_P, na.rm = TRUE)
cat("\nMedia:", round(media_estudio_P, 2), "\n")
## 
## Media: 3.55
# Mediana
mediana_estudio_P <- median(DaAn_1_$Study_Hours_P, na.rm = TRUE)
cat("Mediana:", mediana_estudio_P, "\n")
## Mediana: 3.5
# Moda
moda <- function(x) {
  ux <- unique(x)
  ux[which.max(tabulate(match(x, ux)))]
}
cat("Moda:", moda(DaAn_1_$Study_Hours_P), "\n")
## Moda: 3.5
# Desviación estándar y varianza
cat("Desviación estándar:", round(sd(DaAn_1_$Study_Hours_P, na.rm = TRUE), 2), "\n")
## Desviación estándar: 1.47
cat("Varianza:", round(var(DaAn_1_$Study_Hours_P, na.rm = TRUE), 2), "\n")
## Varianza: 2.16
# Rango e IQR
cat("Rango:", paste(range(DaAn_1_$Study_Hours_P, na.rm = TRUE), collapse = " - "), "\n")
## Rango: 0 - 8.3
cat("IQR:", IQR(DaAn_1_$Study_Hours_P, na.rm = TRUE), "\n")
## IQR: 1.9
# Coeficiente de variación
cve_estudio_P <- 100 * sd(DaAn_1_$Study_Hours_P, na.rm = TRUE) / mean(DaAn_1_$Study_Hours_P, na.rm = TRUE)
cat("Coeficiente de variación (CVE):", round(cve_estudio_P, 2), "%\n")
## Coeficiente de variación (CVE): 41.38 %
# MAD
MAD_estudio_P <- mad(DaAn_1_$Study_Hours_P, na.rm = TRUE)
cat("MAD:", MAD_estudio_P, "\n")
## MAD: 1.4826
# Cuantiles
cat("Cuantiles (Q1, Q2, Q3):\n")
## Cuantiles (Q1, Q2, Q3):
print(quantile(DaAn_1_$Study_Hours_P, probs = c(0.25, 0.5, 0.75), na.rm = TRUE))
## 25% 50% 75% 
## 2.6 3.5 4.5
# Medidas de forma
cat("Asimetría (skewness):", round(skewness(DaAn_1_$Study_Hours_P, na.rm = TRUE), 2), "\n")
## Asimetría (skewness): 0.05
cat("Curtosis:", round(kurtosis(DaAn_1_$Study_Hours_P, na.rm = TRUE), 2), "\n")
## Curtosis: 2.94
# Detección de outliers (basado en IQR)
Q1 <- quantile(DaAn_1_$Study_Hours_P, 0.25, na.rm = TRUE)
Q3 <- quantile(DaAn_1_$Study_Hours_P, 0.75, na.rm = TRUE)
IQR_val_P <- Q3 - Q1

lim_inf_P <- Q1 - 1.5 * IQR_val_P
lim_sup_P <- Q3 + 1.5 * IQR_val_P

outliers <- DaAn_1_$Study_Hours_P[DaAn_1_$Study_Hours_P < lim_inf_P | DaAn_1_$Study_Hours_P > lim_sup_P]
cat("Valores atípicos detectados (outliers):\n")
## Valores atípicos detectados (outliers):
print(outliers)
## [1] 7.4 7.4 8.3 7.4 7.5 8.2 7.6
cat("\n ANALISIS DATOS ATIPICOS: \n")
## 
##  ANALISIS DATOS ATIPICOS:
cat("\nNo necesariamente se deben considerar los datos atipicos mostrados como errores. Estos pueden, en cambio, reflejar que algunos estudiantes dedican mayor cantidad de tiempo en su estudio, llegando a un periodo intensivo que se sale de los datos comunes de la poblacion \n")
## 
## No necesariamente se deben considerar los datos atipicos mostrados como errores. Estos pueden, en cambio, reflejar que algunos estudiantes dedican mayor cantidad de tiempo en su estudio, llegando a un periodo intensivo que se sale de los datos comunes de la poblacion
# -------------------
# Visualizaciones
# -------------------

# Histograma
ggplot(DaAn_1_, aes(x = Study_Hours_P)) +
  geom_histogram(binwidth = 1, fill = "skyblue", color = "black") +
  labs(title = "Histograma de Horas de Estudio", x = "Horas de Estudio", y = "Frecuencia") +
  theme_minimal()

# Densidad
ggplot(DaAn_1_, aes(x = Study_Hours_P)) +
  geom_density(fill = "lightgreen") +
  labs(title = "Densidad de Horas de Estudio", x = "Horas de Estudio") +
  theme_minimal()

# Boxplot
ggplot(DaAn_1_, aes(y = Study_Hours_P)) +
  geom_boxplot(fill = "salmon", color = "black") +
  labs(title = "Boxplot de Horas de Estudio", y = "Horas de Estudio") +
  theme_minimal()

Horas en redes Sociales:

library(moments)  # para skewness y kurtosis
library(ggplot2)

cat("\n----------- ANÁLISIS UNIVARIADO POBLACIONAL DE LA VARIABLE: HORAS EN REDES SOCIALES -----------\n")
## 
## ----------- ANÁLISIS UNIVARIADO POBLACIONAL DE LA VARIABLE: HORAS EN REDES SOCIALES -----------
# Asegurar que Social_Media_Hours_P sea numérica
DaAn_1_$Social_Media_Hours_P <- as.numeric(DaAn_1_$Social_Media_Hours_P)

# Resumen básico
summary(DaAn_1_$Social_Media_Hours_P)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   0.000   1.700   2.500   2.506   3.300   7.200
# Media
media_redes_P <- mean(DaAn_1_$Social_Media_Hours_P, na.rm = TRUE)
cat("\nMedia:", round(media_redes_P, 2), "\n")
## 
## Media: 2.51
# Mediana
mediana_redes_P <- median(DaAn_1_$Social_Media_Hours_P, na.rm = TRUE)
cat("Mediana:", mediana_redes_P, "\n")
## Mediana: 2.5
# Moda
moda <- function(x) {
  ux <- unique(x)
  ux[which.max(tabulate(match(x, ux)))]
}
cat("Moda:", moda(DaAn_1_$Social_Media_Hours_P), "\n")
## Moda: 3.1
# Desviación estándar y varianza
cat("Desviación estándar:", round(sd(DaAn_1_$Social_Media_Hours_P, na.rm = TRUE), 2), "\n")
## Desviación estándar: 1.17
cat("Varianza:", round(var(DaAn_1_$Social_Media_Hours_P, na.rm = TRUE), 2), "\n")
## Varianza: 1.37
# Rango e IQR
cat("Rango:", paste(range(DaAn_1_$Social_Media_Hours_P, na.rm = TRUE), collapse = " - "), "\n")
## Rango: 0 - 7.2
cat("IQR:", IQR(DaAn_1_$Social_Media_Hours_P, na.rm = TRUE), "\n")
## IQR: 1.6
# Coeficiente de variación
cve_redes_P <- 100 * sd(DaAn_1_$Social_Media_Hours_P, na.rm = TRUE) / mean(DaAn_1_$Social_Media_Hours_P, na.rm = TRUE)
cat("Coeficiente de variación (CVE):", round(cve_redes_P, 2), "%\n")
## Coeficiente de variación (CVE): 46.79 %
# MAD
MAD_redes_P <- mad(DaAn_1_$Social_Media_Hours_P, na.rm = TRUE)
cat("MAD:", MAD_redes_P, "\n")
## MAD: 1.18608
# Cuantiles
cat("Cuantiles (Q1, Q2, Q3):\n")
## Cuantiles (Q1, Q2, Q3):
print(quantile(DaAn_1_$Social_Media_Hours_P, probs = c(0.25, 0.5, 0.75), na.rm = TRUE))
## 25% 50% 75% 
## 1.7 2.5 3.3
# Medidas de forma
cat("Asimetría (skewness):", round(skewness(DaAn_1_$Social_Media_Hours_P, na.rm = TRUE), 2), "\n")
## Asimetría (skewness): 0.12
cat("Curtosis:", round(kurtosis(DaAn_1_$Social_Media_Hours_P, na.rm = TRUE), 2), "\n")
## Curtosis: 2.9
# Detección de outliers (basado en IQR)
Q1 <- quantile(DaAn_1_$Social_Media_Hours_P, 0.25, na.rm = TRUE)
Q3 <- quantile(DaAn_1_$Social_Media_Hours_P, 0.75, na.rm = TRUE)
IQR_val_P <- Q3 - Q1

lim_inf_P <- Q1 - 1.5 * IQR_val_P
lim_sup_P <- Q3 + 1.5 * IQR_val_P

outliers <- DaAn_1_$Social_Media_Hours_P[DaAn_1_$Social_Media_Hours_P < lim_inf_P | DaAn_1_$Social_Media_Hours_P > lim_sup_P]
cat("Valores atípicos detectados (outliers):\n")
## Valores atípicos detectados (outliers):
print(outliers)
## [1] 6.2 6.0 6.1 5.7 7.2
cat("\n ANALISIS DATOS ATIPICOS: \n")
## 
##  ANALISIS DATOS ATIPICOS:
cat("\nEstos datos atipicos pueden mostrar la presencia de estudiantes cuyo uso de las redes sociales es excesivo en comparacion a la media de uso. Estos datos pueden relacionarse observando el comportamiento de los otros datos en la tabla de manera comparativa para determinar si el tiempo en pantalla afecta las variables del tipo concentracion, rendimiento academico o salud mental, manifestadas respectivamente como horas de estudio, resultados del examen final y estado de salud mental. \n")
## 
## Estos datos atipicos pueden mostrar la presencia de estudiantes cuyo uso de las redes sociales es excesivo en comparacion a la media de uso. Estos datos pueden relacionarse observando el comportamiento de los otros datos en la tabla de manera comparativa para determinar si el tiempo en pantalla afecta las variables del tipo concentracion, rendimiento academico o salud mental, manifestadas respectivamente como horas de estudio, resultados del examen final y estado de salud mental.
# -------------------
# Visualizaciones
# -------------------

# Histograma
ggplot(DaAn_1_, aes(x = Social_Media_Hours_P)) +
  geom_histogram(binwidth = 1, fill = "skyblue", color = "black") +
  labs(title = "Histograma de Horas en Redes Sociales", x = "Horas en Redes Sociales", y = "Frecuencia") +
  theme_minimal()

# Densidad
ggplot(DaAn_1_, aes(x = Social_Media_Hours_P)) +
  geom_density(fill = "lightgreen") +
  labs(title = "Densidad de Horas en Redes Sociales", x = "Horas en Redes Sociales") +
  theme_minimal()

# Boxplot
ggplot(DaAn_1_, aes(y = Social_Media_Hours_P)) +
  geom_boxplot(fill = "salmon", color = "black") +
  labs(title = "Boxplot de Horas en Redes Sociales", y = "Horas en Redes Sociales") +
  theme_minimal()

Horas de Netflix:

library(moments)  # para skewness y kurtosis
library(ggplot2)

cat("\n----------- ANÁLISIS UNIVARIADO POBLACIONAL DE LA VARIABLE: TIEMPO VIENDO NETFLIX -----------\n")
## 
## ----------- ANÁLISIS UNIVARIADO POBLACIONAL DE LA VARIABLE: TIEMPO VIENDO NETFLIX -----------
# Asegurar que Netflix_Time sea numérica
DaAn_1_$Netflix_Time <- as.numeric(DaAn_1_$Netflix_Time)

# Resumen básico
summary(DaAn_1_$Netflix_Time)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   0.000   1.000   1.800   1.820   2.525   5.400
# Media
media_netflix <- mean(DaAn_1_$Netflix_Time, na.rm = TRUE)
cat("\nMedia:", round(media_netflix, 2), "\n")
## 
## Media: 1.82
# Mediana
mediana_netflix <- median(DaAn_1_$Netflix_Time, na.rm = TRUE)
cat("Mediana:", mediana_netflix, "\n")
## Mediana: 1.8
# Moda
moda <- function(x) {
  ux <- unique(x)
  ux[which.max(tabulate(match(x, ux)))]
}
cat("Moda:", moda(DaAn_1_$Netflix_Time), "\n")
## Moda: 0
# Desviación estándar y varianza
cat("Desviación estándar:", round(sd(DaAn_1_$Netflix_Time, na.rm = TRUE), 2), "\n")
## Desviación estándar: 1.08
cat("Varianza:", round(var(DaAn_1_$Netflix_Time, na.rm = TRUE), 2), "\n")
## Varianza: 1.16
# Rango e IQR
cat("Rango:", paste(range(DaAn_1_$Netflix_Time, na.rm = TRUE), collapse = " - "), "\n")
## Rango: 0 - 5.4
cat("IQR:", IQR(DaAn_1_$Netflix_Time, na.rm = TRUE), "\n")
## IQR: 1.525
# Coeficiente de variación
cve_netflix <- 100 * sd(DaAn_1_$Netflix_Time, na.rm = TRUE) / mean(DaAn_1_$Netflix_Time, na.rm = TRUE)
cat("Coeficiente de variación (CVE):", round(cve_netflix, 2), "%\n")
## Coeficiente de variación (CVE): 59.08 %
# MAD
MAD_netflix <- mad(DaAn_1_$Netflix_Time, na.rm = TRUE)
cat("MAD:", MAD_netflix, "\n")
## MAD: 1.18608
# Cuantiles
cat("Cuantiles (Q1, Q2, Q3):\n")
## Cuantiles (Q1, Q2, Q3):
print(quantile(DaAn_1_$Netflix_Time, probs = c(0.25, 0.5, 0.75), na.rm = TRUE))
##   25%   50%   75% 
## 1.000 1.800 2.525
# Medidas de forma
cat("Asimetría (skewness):", round(skewness(DaAn_1_$Netflix_Time, na.rm = TRUE), 2), "\n")
## Asimetría (skewness): 0.24
cat("Curtosis:", round(kurtosis(DaAn_1_$Netflix_Time, na.rm = TRUE), 2), "\n")
## Curtosis: 2.56
# Detección de outliers (basado en IQR)
Q1 <- quantile(DaAn_1_$Netflix_Time, 0.25, na.rm = TRUE)
Q3 <- quantile(DaAn_1_$Netflix_Time, 0.75, na.rm = TRUE)
IQR_val <- Q3 - Q1

lim_inf <- Q1 - 1.5 * IQR_val
lim_sup <- Q3 + 1.5 * IQR_val

outliers <- DaAn_1_$Netflix_Time[DaAn_1_$Netflix_Time < lim_inf | DaAn_1_$Netflix_Time > lim_sup]
cat("Valores atípicos detectados (outliers):\n")
## Valores atípicos detectados (outliers):
print(outliers)
## [1] 5.0 5.4 5.3 4.9
cat("\n ANALISIS DATOS ATIPICOS: \n")
## 
##  ANALISIS DATOS ATIPICOS:
cat("\nEstos datos atipicos pueden analizarse de la misma manera que los datos de tiempo en las redes sociales, comparando las estadisticas de como los estudiantes con muchas horas consumidas en Netflix, y como este tiempo afecta las variables del tipo concentracion, rendimiento academico o salud mental, manifestadas respectivamente como horas de estudio, resultados del examen final y estado de salud mental. \n")
## 
## Estos datos atipicos pueden analizarse de la misma manera que los datos de tiempo en las redes sociales, comparando las estadisticas de como los estudiantes con muchas horas consumidas en Netflix, y como este tiempo afecta las variables del tipo concentracion, rendimiento academico o salud mental, manifestadas respectivamente como horas de estudio, resultados del examen final y estado de salud mental.
# -------------------
# Visualizaciones
# -------------------

# Histograma
ggplot(DaAn_1_, aes(x = Netflix_Time)) +
  geom_histogram(binwidth = 1, fill = "skyblue", color = "black") +
  labs(title = "Histograma de Tiempo Viendo Netflix", x = "Horas Viendo Netflix", y = "Frecuencia") +
  theme_minimal()

# Densidad
ggplot(DaAn_1_, aes(x = Netflix_Time)) +
  geom_density(fill = "lightgreen") +
  labs(title = "Densidad de Tiempo Viendo Netflix", x = "Horas Viendo Netflix") +
  theme_minimal()

# Boxplot
ggplot(DaAn_1_, aes(y = Netflix_Time)) +
  geom_boxplot(fill = "salmon", color = "black") +
  labs(title = "Boxplot de Tiempo Viendo Netflix", y = "Horas Viendo Netflix") +
  theme_minimal()

Trabajo de Medio Tiempo:

install.packages("plotrix") 
library(plotrix)

# Tabla de frecuencias
part_time_table <- table(DaAn_1_$Part_time_job_P)  
part_time_prop <- prop.table(part_time_table) * 100

cat("\nFrecuencias absolutas:\n")
## 
## Frecuencias absolutas:
print(part_time_table)
## 
##  No Yes 
## 785 215
cat("\nFrecuencias relativas (%):\n")
## 
## Frecuencias relativas (%):
print(round(part_time_prop, 2))
## 
##   No  Yes 
## 78.5 21.5
# Preparar etiquetas para el gráfico de pastel
part_time_percent <- round(prop.table(part_time_table) * 100, 1)
labels <- paste(names(part_time_table), "-", part_time_percent, "%")

# Gráfico de barras
y_lim <- c(0, max(part_time_table) + 30) 
bp <- barplot(part_time_table,
              main = "Distribución por Trabajo de Medio Tiempo (Población)",
              col = c("lightblue", "lightcoral", "lightgreen"),
              ylab = "Frecuencia",
              xlab = "¿Tiene trabajo de medio tiempo?",
              border = "black",
              names.arg = names(part_time_table),
              ylim = y_lim,
              cex.names = 0.9)

# Añadir valores encima de las barras
text(x = bp, 
     y = part_time_table + 13,
     labels = part_time_table,
     cex = 0.9)

# Gráfico de pastel 3D
pie3D(part_time_table,
      radius = 1.0,
      main = "Porcentaje de personas con trabajo de medio tiempo",
      labels = labels,
      labelcex = 0.8,
      explode = 0.1,
      col = topo.colors(length(part_time_table)),
      border = "white")

Porcentaje de asistencia:

library(moments)  # para skewness y kurtosis
library(ggplot2)

cat("\n----------- ANÁLISIS UNIVARIADO POBLACIONAL DE LA VARIABLE: PORCENTAJE DE ASISTENCIA -----------\n")
## 
## ----------- ANÁLISIS UNIVARIADO POBLACIONAL DE LA VARIABLE: PORCENTAJE DE ASISTENCIA -----------
# Asegurar que la variable sea numérica
DaAn_1_$Attendance_percentage_P <- as.numeric(DaAn_1_$Attendance_percentage_P)

# Resumen básico
summary(DaAn_1_$Attendance_percentage_P)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   56.00   78.00   84.40   84.13   91.03  100.00
# Media
media_asistencia <- mean(DaAn_1_$Attendance_percentage_P, na.rm = TRUE)
cat("\nMedia:", round(media_asistencia, 2), "\n")
## 
## Media: 84.13
# Mediana
mediana_asistencia <- median(DaAn_1_$Attendance_percentage_P, na.rm = TRUE)
cat("Mediana:", mediana_asistencia, "\n")
## Mediana: 84.4
# Moda
moda <- function(x) {
  ux <- unique(x)
  ux[which.max(tabulate(match(x, ux)))]
}
cat("Moda:", moda(DaAn_1_$Attendance_percentage_P), "\n")
## Moda: 100
# Desviación estándar y varianza
cat("Desviación estándar:", round(sd(DaAn_1_$Attendance_percentage_P, na.rm = TRUE), 2), "\n")
## Desviación estándar: 9.4
cat("Varianza:", round(var(DaAn_1_$Attendance_percentage_P, na.rm = TRUE), 2), "\n")
## Varianza: 88.35
# Rango e IQR
cat("Rango:", paste(range(DaAn_1_$Attendance_percentage_P, na.rm = TRUE), collapse = " - "), "\n")
## Rango: 56 - 100
cat("IQR:", IQR(DaAn_1_$Attendance_percentage_P, na.rm = TRUE), "\n")
## IQR: 13.025
# Coeficiente de variación
cve_asistencia <- 100 * sd(DaAn_1_$Attendance_percentage_P, na.rm = TRUE) / mean(DaAn_1_$Attendance_percentage_P, na.rm = TRUE)
cat("Coeficiente de variación (CVE):", round(cve_asistencia, 2), "%\n")
## Coeficiente de variación (CVE): 11.17 %
# MAD
MAD_asistencia <- mad(DaAn_1_$Attendance_percentage_P, na.rm = TRUE)
cat("MAD:", MAD_asistencia, "\n")
## MAD: 9.6369
# Cuantiles
cat("Cuantiles (Q1, Q2, Q3):\n")
## Cuantiles (Q1, Q2, Q3):
print(quantile(DaAn_1_$Attendance_percentage_P, probs = c(0.25, 0.5, 0.75), na.rm = TRUE))
##    25%    50%    75% 
## 78.000 84.400 91.025
# Medidas de forma
cat("Asimetría (skewness):", round(skewness(DaAn_1_$Attendance_percentage_P, na.rm = TRUE), 2), "\n")
## Asimetría (skewness): -0.24
cat("Curtosis:", round(kurtosis(DaAn_1_$Attendance_percentage_P, na.rm = TRUE), 2), "\n")
## Curtosis: 2.61
# Detección de outliers (basado en IQR)
Q1 <- quantile(DaAn_1_$Attendance_percentage_P, 0.25, na.rm = TRUE)
Q3 <- quantile(DaAn_1_$Attendance_percentage_P, 0.75, na.rm = TRUE)
IQR_val <- Q3 - Q1

lim_inf <- Q1 - 1.5 * IQR_val
lim_sup <- Q3 + 1.5 * IQR_val

outliers <- DaAn_1_$Attendance_percentage_P[DaAn_1_$Attendance_percentage_P < lim_inf | DaAn_1_$Attendance_percentage_P > lim_sup]
cat("Valores atípicos detectados (outliers):\n")
## Valores atípicos detectados (outliers):
print(outliers)
## [1] 57.6 56.7 56.0
cat("\n ANALISIS DATOS ATIPICOS: \n")
## 
##  ANALISIS DATOS ATIPICOS:
cat("\nLo que nos reflejan estos datos atipicos es que determinados estudiantes tienen un porcentaje de asistencia mucho menor al promedio, lo cual, al analizar las estadisticas, puede determinar si influye necesariamente en la disminucion del rendimiento academico. \n")
## 
## Lo que nos reflejan estos datos atipicos es que determinados estudiantes tienen un porcentaje de asistencia mucho menor al promedio, lo cual, al analizar las estadisticas, puede determinar si influye necesariamente en la disminucion del rendimiento academico.
# -------------------
# Visualizaciones
# -------------------

# Histograma
ggplot(DaAn_1_, aes(x = Attendance_percentage_P)) +
  geom_histogram(binwidth = 5, fill = "skyblue", color = "black") +
  labs(title = "Histograma de Porcentaje de Asistencia", x = "Porcentaje de Asistencia", y = "Frecuencia") +
  theme_minimal()

# Densidad
ggplot(DaAn_1_, aes(x = Attendance_percentage_P)) +
  geom_density(fill = "lightgreen") +
  labs(title = "Densidad de Porcentaje de Asistencia", x = "Porcentaje de Asistencia") +
  theme_minimal()

# Boxplot
ggplot(DaAn_1_, aes(y = Attendance_percentage_P)) +
  geom_boxplot(fill = "salmon", color = "black") +
  labs(title = "Boxplot de Porcentaje de Asistencia", y = "Porcentaje de Asistencia") +
  theme_minimal()

Horas de sueño:

library(moments)  # para skewness y kurtosis
library(ggplot2)

cat("\n----------- ANÁLISIS UNIVARIADO POBLACIONAL DE LA VARIABLE: HORAS DE SUEÑO -----------\n")
## 
## ----------- ANÁLISIS UNIVARIADO POBLACIONAL DE LA VARIABLE: HORAS DE SUEÑO -----------
# Asegurar que la variable sea numérica
DaAn_1_$Sleep_Hours_P <- as.numeric(DaAn_1_$Sleep_Hours_P)

# Resumen básico
summary(DaAn_1_$Sleep_Hours_P)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    3.20    5.60    6.50    6.47    7.30   10.00
# Media
media_sueno <- mean(DaAn_1_$Sleep_Hours_P, na.rm = TRUE)
cat("\nMedia:", round(media_sueno, 2), "\n")
## 
## Media: 6.47
# Mediana
mediana_sueno <- median(DaAn_1_$Sleep_Hours_P, na.rm = TRUE)
cat("Mediana:", mediana_sueno, "\n")
## Mediana: 6.5
# Moda
moda <- function(x) {
  ux <- unique(x)
  ux[which.max(tabulate(match(x, ux)))]
}
cat("Moda:", moda(DaAn_1_$Sleep_Hours_P), "\n")
## Moda: 6.5
# Desviación estándar y varianza
cat("Desviación estándar:", round(sd(DaAn_1_$Sleep_Hours_P, na.rm = TRUE), 2), "\n")
## Desviación estándar: 1.23
cat("Varianza:", round(var(DaAn_1_$Sleep_Hours_P, na.rm = TRUE), 2), "\n")
## Varianza: 1.5
# Rango e IQR
cat("Rango:", paste(range(DaAn_1_$Sleep_Hours_P, na.rm = TRUE), collapse = " - "), "\n")
## Rango: 3.2 - 10
cat("IQR:", IQR(DaAn_1_$Sleep_Hours_P, na.rm = TRUE), "\n")
## IQR: 1.7
# Coeficiente de variación
cve_sueno <- 100 * sd(DaAn_1_$Sleep_Hours_P, na.rm = TRUE) / mean(DaAn_1_$Sleep_Hours_P, na.rm = TRUE)
cat("Coeficiente de variación (CVE):", round(cve_sueno, 2), "%\n")
## Coeficiente de variación (CVE): 18.95 %
# MAD
MAD_sueno <- mad(DaAn_1_$Sleep_Hours_P, na.rm = TRUE)
cat("MAD:", MAD_sueno, "\n")
## MAD: 1.33434
# Cuantiles
cat("Cuantiles (Q1, Q2, Q3):\n")
## Cuantiles (Q1, Q2, Q3):
print(quantile(DaAn_1_$Sleep_Hours_P, probs = c(0.25, 0.5, 0.75), na.rm = TRUE))
## 25% 50% 75% 
## 5.6 6.5 7.3
# Medidas de forma
cat("Asimetría (skewness):", round(skewness(DaAn_1_$Sleep_Hours_P, na.rm = TRUE), 2), "\n")
## Asimetría (skewness): 0.09
cat("Curtosis:", round(kurtosis(DaAn_1_$Sleep_Hours_P, na.rm = TRUE), 2), "\n")
## Curtosis: 2.78
# Detección de outliers (basado en IQR)
Q1 <- quantile(DaAn_1_$Sleep_Hours_P, 0.25, na.rm = TRUE)
Q3 <- quantile(DaAn_1_$Sleep_Hours_P, 0.75, na.rm = TRUE)
IQR_val <- Q3 - Q1

lim_inf <- Q1 - 1.5 * IQR_val
lim_sup <- Q3 + 1.5 * IQR_val

outliers <- DaAn_1_$Sleep_Hours_P[DaAn_1_$Sleep_Hours_P < lim_inf | DaAn_1_$Sleep_Hours_P > lim_sup]
cat("Valores atípicos detectados (outliers):\n")
## Valores atípicos detectados (outliers):
print(outliers)
## [1] 10 10
cat("\n ANALISIS DATOS ATIPICOS: \n")
## 
##  ANALISIS DATOS ATIPICOS:
cat("\nDos estudiantes (el 0.002%) dedican 10 horas de sueño en promedio para dormir. Estos datos no son necesariamente extraños, biologicamente hablando, pero si reflejan una mayor cantidad dedicada que el promedio de estudiantes (Los cuales duermen en promedio 6.4 horas). Evaluar como puede afectar un sueño de tal cantidad de tiempo en el desempeño academico es util para realizar un analizis de rendimiento. \n")
## 
## Dos estudiantes (el 0.002%) dedican 10 horas de sueño en promedio para dormir. Estos datos no son necesariamente extraños, biologicamente hablando, pero si reflejan una mayor cantidad dedicada que el promedio de estudiantes (Los cuales duermen en promedio 6.4 horas). Evaluar como puede afectar un sueño de tal cantidad de tiempo en el desempeño academico es util para realizar un analizis de rendimiento.
# -------------------
# Visualizaciones
# -------------------

# Histograma
ggplot(DaAn_1_, aes(x = Sleep_Hours_P)) +
  geom_histogram(binwidth = 1, fill = "skyblue", color = "black") +
  labs(title = "Histograma de Horas de Sueño", x = "Horas de Sueño", y = "Frecuencia") +
  theme_minimal()

# Densidad
ggplot(DaAn_1_, aes(x = Sleep_Hours_P)) +
  geom_density(fill = "lightgreen") +
  labs(title = "Densidad de Horas de Sueño", x = "Horas de Sueño") +
  theme_minimal()

# Boxplot
ggplot(DaAn_1_, aes(y = Sleep_Hours_P)) +
  geom_boxplot(fill = "salmon", color = "black") +
  labs(title = "Boxplot de Horas de Sueño", y = "Horas de Sueño") +
  theme_minimal()

Calidad de dieta:

install.packages("plotrix") 
library(plotrix)

# Tabla de frecuencias
diet_table <- table(DaAn_1_$Diet_Quality_P)  
diet_prop <- prop.table(diet_table) * 100

cat("\nFrecuencias absolutas:\n")
## 
## Frecuencias absolutas:
print(diet_table)
## 
## Fair Good Poor 
##  437  378  185
cat("\nFrecuencias relativas (%):\n")
## 
## Frecuencias relativas (%):
print(round(diet_prop, 2))
## 
## Fair Good Poor 
## 43.7 37.8 18.5
# Preparar etiquetas para el gráfico de pastel
diet_percent <- round(prop.table(diet_table) * 100, 1)
labels <- paste(names(diet_table), "-", diet_percent, "%")

# Gráfico de barras
y_lim <- c(0, max(diet_table) + 70) 
bp <- barplot(diet_table,
              main = "Distribución por Calidad de la Dieta (Población)",
              col = c("lightgreen", "khaki", "tomato", "skyblue", "orchid"),
              ylab = "Frecuencia",
              xlab = "Calidad de la Dieta",
              border = "black",
              names.arg = names(diet_table),
              ylim = y_lim,
              cex.names = 0.9)

# Añadir valores encima de las barras
text(x = bp, 
     y = diet_table + 1.5,
     labels = diet_table,
     cex = 0.9)

# Gráfico de pastel 3D
pie3D(diet_table,
      radius = 1.0,
      main = "Porcentaje por Calidad de la Dieta",
      labels = labels,
      labelcex = 0.8,
      explode = 0.1,
      col = topo.colors(length(diet_table)),
      border = "white")

Dias de ejercicio:

library(moments)  # para skewness y kurtosis
library(ggplot2)

cat("\n----------- ANÁLISIS UNIVARIADO POBLACIONAL DE LA VARIABLE: DÍAS DE EJERCICIO -----------\n")
## 
## ----------- ANÁLISIS UNIVARIADO POBLACIONAL DE LA VARIABLE: DÍAS DE EJERCICIO -----------
# Asegurar que la variable sea numérica
DaAn_1_$Workout_Days_P <- as.numeric(DaAn_1_$Workout_Days_P)

# Resumen básico
summary(DaAn_1_$Workout_Days_P)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   0.000   1.000   3.000   3.042   5.000   6.000
# Media
media_ejercicio <- mean(DaAn_1_$Workout_Days_P, na.rm = TRUE)
cat("\nMedia:", round(media_ejercicio, 2), "\n")
## 
## Media: 3.04
# Mediana
mediana_ejercicio <- median(DaAn_1_$Workout_Days_P, na.rm = TRUE)
cat("Mediana:", mediana_ejercicio, "\n")
## Mediana: 3
# Moda
moda <- function(x) {
  ux <- unique(x)
  ux[which.max(tabulate(match(x, ux)))]
}
cat("Moda:", moda(DaAn_1_$Workout_Days_P), "\n")
## Moda: 3
# Desviación estándar y varianza
cat("Desviación estándar:", round(sd(DaAn_1_$Workout_Days_P, na.rm = TRUE), 2), "\n")
## Desviación estándar: 2.03
cat("Varianza:", round(var(DaAn_1_$Workout_Days_P, na.rm = TRUE), 2), "\n")
## Varianza: 4.1
# Rango e IQR
cat("Rango:", paste(range(DaAn_1_$Workout_Days_P, na.rm = TRUE), collapse = " - "), "\n")
## Rango: 0 - 6
cat("IQR:", IQR(DaAn_1_$Workout_Days_P, na.rm = TRUE), "\n")
## IQR: 4
# Coeficiente de variación
cve_ejercicio <- 100 * sd(DaAn_1_$Workout_Days_P, na.rm = TRUE) / mean(DaAn_1_$Workout_Days_P, na.rm = TRUE)
cat("Coeficiente de variación (CVE):", round(cve_ejercicio, 2), "%\n")
## Coeficiente de variación (CVE): 66.58 %
# MAD
MAD_ejercicio <- mad(DaAn_1_$Workout_Days_P, na.rm = TRUE)
cat("MAD:", MAD_ejercicio, "\n")
## MAD: 2.9652
# Cuantiles
cat("Cuantiles (Q1, Q2, Q3):\n")
## Cuantiles (Q1, Q2, Q3):
print(quantile(DaAn_1_$Workout_Days_P, probs = c(0.25, 0.5, 0.75), na.rm = TRUE))
## 25% 50% 75% 
##   1   3   5
# Medidas de forma
cat("Asimetría (skewness):", round(skewness(DaAn_1_$Workout_Days_P, na.rm = TRUE), 2), "\n")
## Asimetría (skewness): -0.03
cat("Curtosis:", round(kurtosis(DaAn_1_$Workout_Days_P, na.rm = TRUE), 2), "\n")
## Curtosis: 1.72
# Detección de outliers (basado en IQR)
Q1 <- quantile(DaAn_1_$Workout_Days_P, 0.25, na.rm = TRUE)
Q3 <- quantile(DaAn_1_$Workout_Days_P, 0.75, na.rm = TRUE)
IQR_val <- Q3 - Q1

lim_inf <- Q1 - 1.5 * IQR_val
lim_sup <- Q3 + 1.5 * IQR_val

outliers <- DaAn_1_$Workout_Days_P[DaAn_1_$Workout_Days_P < lim_inf | DaAn_1_$Workout_Days_P > lim_sup]
cat("Valores atípicos detectados (outliers):\n")
## Valores atípicos detectados (outliers):
print(outliers)
## numeric(0)
# -------------------
# Visualizaciones
# -------------------

# Histograma
ggplot(DaAn_1_, aes(x = Workout_Days_P)) +
  geom_histogram(binwidth = 1, fill = "skyblue", color = "black") +
  labs(title = "Histograma de Días de Ejercicio", x = "Días de Ejercicio", y = "Frecuencia") +
  theme_minimal()

# Densidad
ggplot(DaAn_1_, aes(x = Workout_Days_P)) +
  geom_density(fill = "lightgreen") +
  labs(title = "Densidad de Días de Ejercicio", x = "Días de Ejercicio") +
  theme_minimal()

# Boxplot
ggplot(DaAn_1_, aes(y = Workout_Days_P)) +
  geom_boxplot(fill = "salmon", color = "black") +
  labs(title = "Boxplot de Días de Ejercicio", y = "Días de Ejercicio") +
  theme_minimal()

Calidad de internet:

install.packages("plotrix") 
library(plotrix)

# Tabla de frecuencias
internet_table <- table(DaAn_1_$Internet_Quality_P)  
internet_prop <- prop.table(internet_table) * 100

cat("\nFrecuencias absolutas:\n")
## 
## Frecuencias absolutas:
print(internet_table)
## 
## Average    Good    Poor 
##     391     447     162
cat("\nFrecuencias relativas (%):\n")
## 
## Frecuencias relativas (%):
print(round(internet_prop, 2))
## 
## Average    Good    Poor 
##    39.1    44.7    16.2
# Preparar etiquetas para el gráfico de pastel
internet_percent <- round(prop.table(internet_table) * 100, 1)
labels <- paste(names(internet_table), "-", internet_percent, "%")

# Gráfico de barras
y_lim <- c(0, max(internet_table) + 70) 
bp <- barplot(internet_table,
              main = "Distribución por Calidad del Internet (Población)",
              col = c("gold", "lightskyblue", "lightcoral", "mediumseagreen", "plum"),
              ylab = "Frecuencia",
              xlab = "Calidad del Internet",
              border = "black",
              names.arg = names(internet_table),
              ylim = y_lim,
              cex.names = 0.9)

# Añadir valores encima de las barras
text(x = bp, 
     y = internet_table + 1.5,
     labels = internet_table,
     cex = 0.9)

# Gráfico de pastel 3D
pie3D(internet_table,
      radius = 1.0,
      main = "Porcentaje por Calidad del Internet",
      labels = labels,
      labelcex = 0.8,
      explode = 0.1,
      col = topo.colors(length(internet_table)),
      border = "white")

Estado de salud mental:

library(moments)  # para skewness y kurtosis
library(ggplot2)

cat("\n----------- ANÁLISIS UNIVARIADO POBLACIONAL DE LA VARIABLE: SALUD MENTAL -----------\n")
## 
## ----------- ANÁLISIS UNIVARIADO POBLACIONAL DE LA VARIABLE: SALUD MENTAL -----------
# Asegurar que la variable sea numérica
DaAn_1_$Mind_Health_Quality_P <- as.numeric(DaAn_1_$Mind_Health_Quality_P)

# Resumen básico
summary(DaAn_1_$Mind_Health_Quality_P)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   1.000   3.000   5.000   5.438   8.000  10.000
# Media
media_salud_mental <- mean(DaAn_1_$Mind_Health_Quality_P, na.rm = TRUE)
cat("\nMedia:", round(media_salud_mental, 2), "\n")
## 
## Media: 5.44
# Mediana
mediana_salud_mental <- median(DaAn_1_$Mind_Health_Quality_P, na.rm = TRUE)
cat("Mediana:", mediana_salud_mental, "\n")
## Mediana: 5
# Moda
moda <- function(x) {
  ux <- unique(x)
  ux[which.max(tabulate(match(x, ux)))]
}
cat("Moda:", moda(DaAn_1_$Mind_Health_Quality_P), "\n")
## Moda: 4
# Desviación estándar y varianza
cat("Desviación estándar:", round(sd(DaAn_1_$Mind_Health_Quality_P, na.rm = TRUE), 2), "\n")
## Desviación estándar: 2.85
cat("Varianza:", round(var(DaAn_1_$Mind_Health_Quality_P, na.rm = TRUE), 2), "\n")
## Varianza: 8.11
# Rango e IQR
cat("Rango:", paste(range(DaAn_1_$Mind_Health_Quality_P, na.rm = TRUE), collapse = " - "), "\n")
## Rango: 1 - 10
cat("IQR:", IQR(DaAn_1_$Mind_Health_Quality_P, na.rm = TRUE), "\n")
## IQR: 5
# Coeficiente de variación
cve_salud_mental <- 100 * sd(DaAn_1_$Mind_Health_Quality_P, na.rm = TRUE) / mean(DaAn_1_$Mind_Health_Quality_P, na.rm = TRUE)
cat("Coeficiente de variación (CVE):", round(cve_salud_mental, 2), "%\n")
## Coeficiente de variación (CVE): 52.36 %
# MAD
MAD_salud_mental <- mad(DaAn_1_$Mind_Health_Quality_P, na.rm = TRUE)
cat("MAD:", MAD_salud_mental, "\n")
## MAD: 2.9652
# Cuantiles
cat("Cuantiles (Q1, Q2, Q3):\n")
## Cuantiles (Q1, Q2, Q3):
print(quantile(DaAn_1_$Mind_Health_Quality_P, probs = c(0.25, 0.5, 0.75), na.rm = TRUE))
## 25% 50% 75% 
##   3   5   8
# Medidas de forma
cat("Asimetría (skewness):", round(skewness(DaAn_1_$Mind_Health_Quality_P, na.rm = TRUE), 2), "\n")
## Asimetría (skewness): 0.04
cat("Curtosis:", round(kurtosis(DaAn_1_$Mind_Health_Quality_P, na.rm = TRUE), 2), "\n")
## Curtosis: 1.81
# Detección de outliers (basado en IQR)
Q1 <- quantile(DaAn_1_$Mind_Health_Quality_P, 0.25, na.rm = TRUE)
Q3 <- quantile(DaAn_1_$Mind_Health_Quality_P, 0.75, na.rm = TRUE)
IQR_val <- Q3 - Q1

lim_inf <- Q1 - 1.5 * IQR_val
lim_sup <- Q3 + 1.5 * IQR_val

outliers <- DaAn_1_$Mind_Health_Quality_P[DaAn_1_$Mind_Health_Quality_P < lim_inf | DaAn_1_$Mind_Health_Quality_P > lim_sup]
cat("Valores atípicos detectados (outliers):\n")
## Valores atípicos detectados (outliers):
print(outliers)
## numeric(0)
# -------------------
# Visualizaciones
# -------------------

# Histograma
ggplot(DaAn_1_, aes(x = Mind_Health_Quality_P)) +
  geom_histogram(binwidth = 1, fill = "skyblue", color = "black") +
  labs(title = "Histograma de Salud Mental", x = "Salud Mental Percibida", y = "Frecuencia") +
  theme_minimal()

# Densidad
ggplot(DaAn_1_, aes(x = Mind_Health_Quality_P)) +
  geom_density(fill = "lightgreen") +
  labs(title = "Densidad de Salud Mental", x = "Salud Mental Percibida") +
  theme_minimal()

# Boxplot
ggplot(DaAn_1_, aes(y = Mind_Health_Quality_P)) +
  geom_boxplot(fill = "salmon", color = "black") +
  labs(title = "Boxplot de Salud Mental", y = "Salud Mental Percibida") +
  theme_minimal()

Participacion extracurricular:

install.packages("plotrix") 
library(plotrix)

# Tabla de frecuencias
extra_table <- table(DaAn_1_$Extracurricular_Participation_P)  
extra_prop <- prop.table(extra_table) * 100

cat("\nFrecuencias absolutas:\n")
## 
## Frecuencias absolutas:
print(extra_table)
## 
##  No Yes 
## 682 318
cat("\nFrecuencias relativas (%):\n")
## 
## Frecuencias relativas (%):
print(round(extra_prop, 2))
## 
##   No  Yes 
## 68.2 31.8
# Preparar etiquetas para el gráfico de pastel
extra_percent <- round(prop.table(extra_table) * 100, 1)
labels <- paste(names(extra_table), "-", extra_percent, "%")

# Gráfico de barras
y_lim <- c(0, max(extra_table) + 90) 
bp <- barplot(extra_table,
              main = "Participación en Actividades Extracurriculares (Población)",
              col = c("skyblue", "lightgreen", "lightcoral", "plum"),
              ylab = "Frecuencia",
              xlab = "Participación Extracurricular",
              border = "black",
              names.arg = names(extra_table),
              ylim = y_lim,
              cex.names = 0.9)

# Añadir valores encima de las barras
text(x = bp, 
     y = extra_table + 1.5,
     labels = extra_table,
     cex = 0.9)

# Gráfico de pastel 3D
pie3D(extra_table,
      radius = 1.0,
      main = "Porcentaje por Participación Extracurricular",
      labels = labels,
      labelcex = 0.8,
      explode = 0.1,
      col = topo.colors(length(extra_table)),
      border = "white")

Notas en el examen final:

library(moments)  # para skewness y kurtosis
library(ggplot2)

cat("\n----------- ANÁLISIS UNIVARIADO POBLACIONAL DE LA VARIABLE: RESULTADOS DEL EXAMEN FINAL -----------\n")
## 
## ----------- ANÁLISIS UNIVARIADO POBLACIONAL DE LA VARIABLE: RESULTADOS DEL EXAMEN FINAL -----------
# Asegurar que la variable sea numérica
DaAn_1_$Test_Grade_P <- as.numeric(DaAn_1_$Test_Grade_P)

# Resumen básico
summary(DaAn_1_$Test_Grade_P)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   18.40   58.48   70.50   69.60   81.33  100.00
# Media
media_examen <- mean(DaAn_1_$Test_Grade_P, na.rm = TRUE)
cat("\nMedia:", round(media_examen, 2), "\n")
## 
## Media: 69.6
# Mediana
mediana_examen <- median(DaAn_1_$Test_Grade_P, na.rm = TRUE)
cat("Mediana:", mediana_examen, "\n")
## Mediana: 70.5
# Moda
moda <- function(x) {
  ux <- unique(x)
  ux[which.max(tabulate(match(x, ux)))]
}
cat("Moda:", moda(DaAn_1_$Test_Grade_P), "\n")
## Moda: 100
# Desviación estándar y varianza
cat("Desviación estándar:", round(sd(DaAn_1_$Test_Grade_P, na.rm = TRUE), 2), "\n")
## Desviación estándar: 16.89
cat("Varianza:", round(var(DaAn_1_$Test_Grade_P, na.rm = TRUE), 2), "\n")
## Varianza: 285.22
# Rango e IQR
cat("Rango:", paste(range(DaAn_1_$Test_Grade_P, na.rm = TRUE), collapse = " - "), "\n")
## Rango: 18.4 - 100
cat("IQR:", IQR(DaAn_1_$Test_Grade_P, na.rm = TRUE), "\n")
## IQR: 22.85
# Coeficiente de variación
cve_examen <- 100 * sd(DaAn_1_$Test_Grade_P, na.rm = TRUE) / mean(DaAn_1_$Test_Grade_P, na.rm = TRUE)
cat("Coeficiente de variación (CVE):", round(cve_examen, 2), "%\n")
## Coeficiente de variación (CVE): 24.26 %
# MAD
MAD_examen <- mad(DaAn_1_$Test_Grade_P, na.rm = TRUE)
cat("MAD:", MAD_examen, "\n")
## MAD: 17.19816
# Cuantiles
cat("Cuantiles (Q1, Q2, Q3):\n")
## Cuantiles (Q1, Q2, Q3):
print(quantile(DaAn_1_$Test_Grade_P, probs = c(0.25, 0.5, 0.75), na.rm = TRUE))
##    25%    50%    75% 
## 58.475 70.500 81.325
# Medidas de forma
cat("Asimetría (skewness):", round(skewness(DaAn_1_$Test_Grade_P, na.rm = TRUE), 2), "\n")
## Asimetría (skewness): -0.16
cat("Curtosis:", round(kurtosis(DaAn_1_$Test_Grade_P, na.rm = TRUE), 2), "\n")
## Curtosis: 2.58
# Detección de outliers (basado en IQR)
Q1 <- quantile(DaAn_1_$Test_Grade_P, 0.25, na.rm = TRUE)
Q3 <- quantile(DaAn_1_$Test_Grade_P, 0.75, na.rm = TRUE)
IQR_val <- Q3 - Q1

lim_inf <- Q1 - 1.5 * IQR_val
lim_sup <- Q3 + 1.5 * IQR_val

outliers <- DaAn_1_$Test_Grade_P[DaAn_1_$Test_Grade_P < lim_inf | DaAn_1_$Test_Grade_P > lim_sup]
cat("Valores atípicos detectados (outliers):\n")
## Valores atípicos detectados (outliers):
print(outliers)
## [1] 18.4 23.1
cat("\n ANALISIS DATOS ATIPICOS: \n")
## 
##  ANALISIS DATOS ATIPICOS:
cat("\nDos estudiantes tienen notas excepcionalmente bajas en comparacion con el promedio. El analizis de estas mismas, y ubicar a que estudiantes corresponde, podria ayudar a generar una comparacion con el resto de estadisticas que poseen y aclarar alguna coorelacion \n")
## 
## Dos estudiantes tienen notas excepcionalmente bajas en comparacion con el promedio. El analizis de estas mismas, y ubicar a que estudiantes corresponde, podria ayudar a generar una comparacion con el resto de estadisticas que poseen y aclarar alguna coorelacion
# -------------------
# Visualizaciones
# -------------------

# Histograma
ggplot(DaAn_1_, aes(x = Test_Grade_P)) +
  geom_histogram(binwidth = 5, fill = "skyblue", color = "black") +
  labs(title = "Histograma de Resultados del Examen Final", x = "Nota del Examen Final", y = "Frecuencia") +
  theme_minimal()

# Densidad
ggplot(DaAn_1_, aes(x = Test_Grade_P)) +
  geom_density(fill = "lightgreen") +
  labs(title = "Densidad de Resultados del Examen Final", x = "Nota del Examen Final") +
  theme_minimal()

# Boxplot
ggplot(DaAn_1_, aes(y = Test_Grade_P)) +
  geom_boxplot(fill = "salmon", color = "black") +
  labs(title = "Boxplot de Resultados del Examen Final", y = "Nota del Examen Final") +
  theme_minimal()

Punto 2: Analizis univariado y multivariado de muestra. Comparacion con resultados poblacionales.

Se tomo una muestra de 50 datos aleatorios del conjunto de datos anteriormente presentado, y se les ha realizado su respectivo analizis univariable y multivariable, que se mostrara ahora.

Edad:

library(moments)  # para skewness y kurtosis
library(ggplot2)

cat("\n----------- ANÁLISIS UNIVARIADO DE LA VARIABLE: EDAD -----------\n")
## 
## ----------- ANÁLISIS UNIVARIADO DE LA VARIABLE: EDAD -----------
# Asegurar que Age sea numérica
HVSP_3_$Age <- as.numeric(HVSP_3_$Age)

# Resumen básico
summary(HVSP_3_$Age)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   17.00   19.00   21.00   20.72   23.00   24.00
# Media
media_edad <- mean(HVSP_3_$Age, na.rm = TRUE)
cat("\nMedia:", round(media_edad, 2), "\n")
## 
## Media: 20.72
# Mediana
mediana_edad <- median(HVSP_3_$Age, na.rm = TRUE)
cat("Mediana:", mediana_edad, "\n")
## Mediana: 21
# Moda
moda <- function(x) {
  ux <- unique(x)
  ux[which.max(tabulate(match(x, ux)))]
}
cat("Moda:", moda(HVSP_3_$Age), "\n")
## Moda: 21
# Desviación estándar y varianza
cat("Desviación estándar:", round(sd(HVSP_3_$Age, na.rm = TRUE), 2), "\n")
## Desviación estándar: 2.37
cat("Varianza:", round(var(HVSP_3_$Age, na.rm = TRUE), 2), "\n")
## Varianza: 5.63
# Rango y IQR
cat("Rango:", paste(range(HVSP_3_$Age, na.rm = TRUE), collapse = " - "), "\n")
## Rango: 17 - 24
cat("IQR:", IQR(HVSP_3_$Age, na.rm = TRUE), "\n")
## IQR: 4
# Coeficiente de variación
cve_edad <- 100 * sd(HVSP_3_$Age, na.rm = TRUE) / mean(HVSP_3_$Age, na.rm = TRUE)
cat("Coeficiente de variación (CVE):", round(cve_edad, 2), "%\n")
## Coeficiente de variación (CVE): 11.46 %
# MAD
MAD_edad <- mad(HVSP_3_$Age, na.rm = TRUE)
cat("MAD:", MAD_edad, "\n")
## MAD: 2.9652
# Cuantiles
cat("Cuantiles (Q1, Q2, Q3):\n")
## Cuantiles (Q1, Q2, Q3):
print(quantile(HVSP_3_$Age, probs = c(0.25, 0.5, 0.75), na.rm = TRUE))
## 25% 50% 75% 
##  19  21  23
# Medidas de forma
cat("Asimetría (skewness):", round(skewness(HVSP_3_$Age, na.rm = TRUE), 2), "\n")
## Asimetría (skewness): -0.02
cat("Curtosis:", round(kurtosis(HVSP_3_$Age, na.rm = TRUE), 2), "\n")
## Curtosis: 1.89
# Detección de outliers (basado en IQR)
Q1 <- quantile(HVSP_3_$Age, 0.25, na.rm = TRUE)
Q3 <- quantile(HVSP_3_$Age, 0.75, na.rm = TRUE)
IQR_val <- Q3 - Q1

lim_inf <- Q1 - 1.5 * IQR_val
lim_sup <- Q3 + 1.5 * IQR_val

outliers <- HVSP_3_$Age[HVSP_3_$Age < lim_inf | HVSP_3_$Age > lim_sup]
cat("Valores atípicos detectados (outliers):\n")
## Valores atípicos detectados (outliers):
print(outliers)
## numeric(0)
# -------------------
# Visualizaciones
# -------------------

# Histograma
ggplot(HVSP_3_, aes(x = Age)) +
  geom_histogram(binwidth = 1, fill = "skyblue", color = "black") +
  labs(title = "Histograma de Edad", x = "Edad", y = "Frecuencia") +
  theme_minimal()

# Densidad
ggplot(HVSP_3_, aes(x = Age)) +
  geom_density(fill = "lightgreen") +
  labs(title = "Densidad de Edad", x = "Edad") +
  theme_minimal()

# Boxplot
ggplot(HVSP_3_, aes(y = Age)) +
  geom_boxplot(fill = "salmon", color = "black") +
  labs(title = "Boxplot de Edad", y = "Edad") +
  theme_minimal()

Genero:

install.packages("plotrix")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.4'
## (as 'lib' is unspecified)
library(plotrix)

sex_table <- table(HVSP_3_$Sex)  
sex_prop <- prop.table(sex_table) * 100

cat("\nFrecuencias absolutas:\n")
## 
## Frecuencias absolutas:
print(sex_table)
## 
## Female   Male  Other 
##     24     21      5
cat("\nFrecuencias relativas (%):\n")
## 
## Frecuencias relativas (%):
print(round(sex_prop, 2))
## 
## Female   Male  Other 
##     48     42     10
sex_percent <- round(prop.table(sex_table) * 100, 1)
labels <- paste(names(sex_table), "-", sex_percent, "%")

y_lim <- c(0, max(sex_table) + 10) 
bp <- barplot(sex_table,
              main = "Distribución por genero",
              col = c("lightpink", "lightblue", "lightgreen"),
              ylab = "Frecuencia",
              xlab = "Sexo",
              border = "black",
              names.arg = names(sex_table),
              ylim = y_lim,
              cex.names = 1.1)

text(x = bp, 
     y = sex_table + 2,
     labels = sex_table,
     cex = 1.1)

pie3D(sex_table,
      radius = 1.0,
      main = "Porcentaje de personas por género",
      labels = labels,
      labelcex = 0.8,
      explode = 0.1,
      col = topo.colors(length(sex_table)),
      border = "white")

Horas de estudio:

HVSP_3_$Study_Hours <- as.numeric(as.character(HVSP_3_$Study_Hours))
cat("\n-------- ANÁLISIS UNIVARIADO DE LA VARIABLE: HORAS DE ESTUDIO -----------\n")
## 
## -------- ANÁLISIS UNIVARIADO DE LA VARIABLE: HORAS DE ESTUDIO -----------
# Resumen básico
summary(HVSP_3_$Study_Hours)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   0.000   2.325   3.400   3.262   4.275   6.500
# Media
media_estudio <- mean(HVSP_3_$Study_Hours, na.rm = TRUE)
cat("\nMedia:", round(media_estudio, 2), "\n")
## 
## Media: 3.26
# Mediana
mediana_estudio <- median(HVSP_3_$Study_Hours, na.rm = TRUE)
cat("Mediana:", mediana_estudio, "\n")
## Mediana: 3.4
# Moda
moda <- function(x) {
  ux <- unique(x)
  ux[which.max(tabulate(match(x, ux)))]
}
cat("Moda:", moda(HVSP_3_$Study_Hours), "\n")
## Moda: 3.7
# Desviación estándar y varianza
cat("Desviación estándar:", round(sd(HVSP_3_$Study_Hours, na.rm = TRUE), 2), "\n")
## Desviación estándar: 1.41
cat("Varianza:", round(var(HVSP_3_$Study_Hours, na.rm = TRUE), 2), "\n")
## Varianza: 1.99
# Rango y IQR
cat("Rango:", paste(range(HVSP_3_$Study_Hours, na.rm = TRUE), collapse = " - "), "\n")
## Rango: 0 - 6.5
cat("IQR:", IQR(HVSP_3_$Study_Hours, na.rm = TRUE), "\n")
## IQR: 1.95
# Coeficiente de variación
cve_estudio <- 100 * sd(HVSP_3_$Study_Hours, na.rm = TRUE) / mean(HVSP_3_$Study_Hours, na.rm = TRUE)
cat("Coeficiente de variación (CVE):", round(cve_estudio, 2), "%\n")
## Coeficiente de variación (CVE): 43.27 %
# MAD
MAD_estudio <- mad(HVSP_3_$Study_Hours, na.rm = TRUE)
cat("MAD:", MAD_estudio, "\n")
## MAD: 1.4826
# Cuantiles
cat("Cuantiles (Q1, Q2, Q3):\n")
## Cuantiles (Q1, Q2, Q3):
print(quantile(HVSP_3_$Study_Hours, probs = c(0.25, 0.5, 0.75), na.rm = TRUE))
##   25%   50%   75% 
## 2.325 3.400 4.275
# Medidas de forma
cat("Asimetría (skewness):", round(skewness(HVSP_3_$Study_Hours, na.rm = TRUE), 2), "\n")
## Asimetría (skewness): -0.16
cat("Curtosis:", round(kurtosis(HVSP_3_$Study_Hours, na.rm = TRUE), 2), "\n")
## Curtosis: 2.83
# Detección de outliers (basado en IQR)
Q1 <- quantile(HVSP_3_$Study_Hours, 0.25, na.rm = TRUE)
Q3 <- quantile(HVSP_3_$Study_Hours, 0.75, na.rm = TRUE)
IQR_val <- Q3 - Q1

lim_inf <- Q1 - 1.5 * IQR_val
lim_sup <- Q3 + 1.5 * IQR_val

outliers <- HVSP_3_$Study_Hours[HVSP_3_$Study_Hours < lim_inf | HVSP_3_$Study_Hours > lim_sup]
cat("Valores atípicos detectados (outliers):\n")
## Valores atípicos detectados (outliers):
print(outliers)
## numeric(0)
# -------------------
# Visualizaciones
# -------------------

# Histograma
ggplot(HVSP_3_, aes(x = Study_Hours)) +
  geom_histogram(binwidth = 1, fill = "skyblue", color = "black") +
  labs(title = "Histograma de Horas de Estudio", x = "Horas de Estudio", y = "Frecuencia") +
  theme_minimal()

# Densidad
ggplot(HVSP_3_, aes(x = Study_Hours)) +
  geom_density(fill = "lightgreen") +
  labs(title = "Densidad de Horas de Estudio", x = "Horas de Estudio") +
  theme_minimal()

# Boxplot
ggplot(HVSP_3_, aes(y = Study_Hours)) +
  geom_boxplot(fill = "salmon", color = "black") +
  labs(title = "Boxplot de Horas de Estudio", y = "Horas de Estudio") +
  theme_minimal()

Horas en redes Sociales:

HVSP_3_$Social_Media_Hours <- as.numeric(as.character(HVSP_3_$Social_Media_Hours))
cat("\n------ ANÁLISIS UNIVARIADO DE LA VARIABLE: HORAS EN REDES SOCIALES ------\n")
## 
## ------ ANÁLISIS UNIVARIADO DE LA VARIABLE: HORAS EN REDES SOCIALES ------
# Resumen básico
summary(HVSP_3_$Social_Media_Hours)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   0.400   1.900   2.500   2.594   3.375   5.400
# Media
media_redes <- mean(HVSP_3_$Social_Media_Hours, na.rm = TRUE)
cat("\nMedia:", round(media_redes, 2), "\n")
## 
## Media: 2.59
# Mediana
mediana_redes <- median(HVSP_3_$Social_Media_Hours, na.rm = TRUE)
cat("Mediana:", mediana_redes, "\n")
## Mediana: 2.5
# Moda
moda <- function(x) {
  ux <- unique(x)
  ux[which.max(tabulate(match(x, ux)))]
}
cat("Moda:", moda(HVSP_3_$Social_Media_Hours), "\n")
## Moda: 2.9
# Desviación estándar y varianza
cat("Desviación estándar:", round(sd(HVSP_3_$Social_Media_Hours, na.rm = TRUE), 2), "\n")
## Desviación estándar: 1.19
cat("Varianza:", round(var(HVSP_3_$Social_Media_Hours, na.rm = TRUE), 2), "\n")
## Varianza: 1.42
# Rango y IQR
cat("Rango:", paste(range(HVSP_3_$Social_Media_Hours, na.rm = TRUE), collapse = " - "), "\n")
## Rango: 0.4 - 5.4
cat("IQR:", IQR(HVSP_3_$Social_Media_Hours, na.rm = TRUE), "\n")
## IQR: 1.475
# Coeficiente de variación
cve_redes <- 100 * sd(HVSP_3_$Social_Media_Hours, na.rm = TRUE) / mean(HVSP_3_$Social_Media_Hours, na.rm = TRUE)
cat("Coeficiente de variación (CVE):", round(cve_redes, 2), "%\n")
## Coeficiente de variación (CVE): 45.99 %
# MAD
MAD_redes <- mad(HVSP_3_$Social_Media_Hours, na.rm = TRUE)
cat("MAD:", MAD_redes, "\n")
## MAD: 1.26021
# Cuantiles
cat("Cuantiles (Q1, Q2, Q3):\n")
## Cuantiles (Q1, Q2, Q3):
print(quantile(HVSP_3_$Social_Media_Hours, probs = c(0.25, 0.5, 0.75), na.rm = TRUE))
##   25%   50%   75% 
## 1.900 2.500 3.375
# Medidas de forma
cat("Asimetría (skewness):", round(skewness(HVSP_3_$Social_Media_Hours, na.rm = TRUE), 2), "\n")
## Asimetría (skewness): 0.21
cat("Curtosis:", round(kurtosis(HVSP_3_$Social_Media_Hours, na.rm = TRUE), 2), "\n")
## Curtosis: 2.37
# Detección de outliers (basado en IQR)
Q1 <- quantile(HVSP_3_$Social_Media_Hours, 0.25, na.rm = TRUE)
Q3 <- quantile(HVSP_3_$Social_Media_Hours, 0.75, na.rm = TRUE)
IQR_val <- Q3 - Q1

lim_inf <- Q1 - 1.5 * IQR_val
lim_sup <- Q3 + 1.5 * IQR_val

outliers <- HVSP_3_$Social_Media_Hours[HVSP_3_$Social_Media_Hours < lim_inf | HVSP_3_$Social_Media_Hours > lim_sup]
cat("Valores atípicos detectados (outliers):\n")
## Valores atípicos detectados (outliers):
print(outliers)
## numeric(0)
# -------------------
# Visualizaciones
# -------------------

# Histograma
ggplot(HVSP_3_, aes(x = Social_Media_Hours)) +
  geom_histogram(binwidth = 1, fill = "skyblue", color = "black") +
  labs(title = "Histograma de Horas en Redes Sociales", x = "Horas en Redes Sociales", y = "Frecuencia") +
  theme_minimal()

# Densidad
ggplot(HVSP_3_, aes(x = Social_Media_Hours)) +
  geom_density(fill = "lightgreen") +
  labs(title = "Densidad de Horas en Redes Sociales", x = "Horas en Redes Sociales") +
  theme_minimal()

# Boxplot
ggplot(HVSP_3_, aes(y = Social_Media_Hours)) +
  geom_boxplot(fill = "salmon", color = "black") +
  labs(title = "Boxplot de Horas en Redes Sociales", y = "Horas en Redes Sociales") +
  theme_minimal()

Horas de Netflix:

HVSP_3_$Netflix_Hours <- as.numeric(as.character(HVSP_3_$Netflix_Hours))
cat("\n-------- ANÁLISIS UNIVARIADO DE LA VARIABLE: HORAS EN NETFLIX -----------\n")
## 
## -------- ANÁLISIS UNIVARIADO DE LA VARIABLE: HORAS EN NETFLIX -----------
# Resumen básico
summary(HVSP_3_$Netflix_Hours)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   0.000   0.725   1.900   1.716   2.600   3.500
# Media
media_netflix <- mean(HVSP_3_$Netflix_Hours, na.rm = TRUE)
cat("\nMedia:", round(media_netflix, 2), "\n")
## 
## Media: 1.72
# Mediana
mediana_netflix <- median(HVSP_3_$Netflix_Hours, na.rm = TRUE)
cat("Mediana:", mediana_netflix, "\n")
## Mediana: 1.9
# Moda
moda <- function(x) {
  ux <- unique(x)
  ux[which.max(tabulate(match(x, ux)))]
}
cat("Moda:", moda(HVSP_3_$Netflix_Hours), "\n")
## Moda: 0
# Desviación estándar y varianza
cat("Desviación estándar:", round(sd(HVSP_3_$Netflix_Hours, na.rm = TRUE), 2), "\n")
## Desviación estándar: 1.08
cat("Varianza:", round(var(HVSP_3_$Netflix_Hours, na.rm = TRUE), 2), "\n")
## Varianza: 1.16
# Rango y IQR
cat("Rango:", paste(range(HVSP_3_$Netflix_Hours, na.rm = TRUE), collapse = " - "), "\n")
## Rango: 0 - 3.5
cat("IQR:", IQR(HVSP_3_$Netflix_Hours, na.rm = TRUE), "\n")
## IQR: 1.875
# Coeficiente de variación
cve_netflix <- 100 * sd(HVSP_3_$Netflix_Hours, na.rm = TRUE) / mean(HVSP_3_$Netflix_Hours, na.rm = TRUE)
cat("Coeficiente de variación (CVE):", round(cve_netflix, 2), "%\n")
## Coeficiente de variación (CVE): 62.74 %
# MAD
MAD_netflix <- mad(HVSP_3_$Netflix_Hours, na.rm = TRUE)
cat("MAD:", MAD_netflix, "\n")
## MAD: 1.33434
# Cuantiles
cat("Cuantiles (Q1, Q2, Q3):\n")
## Cuantiles (Q1, Q2, Q3):
print(quantile(HVSP_3_$Netflix_Hours, probs = c(0.25, 0.5, 0.75), na.rm = TRUE))
##   25%   50%   75% 
## 0.725 1.900 2.600
# Medidas de forma
cat("Asimetría (skewness):", round(skewness(HVSP_3_$Netflix_Hours, na.rm = TRUE), 2), "\n")
## Asimetría (skewness): -0.24
cat("Curtosis:", round(kurtosis(HVSP_3_$Netflix_Hours, na.rm = TRUE), 2), "\n")
## Curtosis: 1.81
# Detección de outliers (basado en IQR)
Q1 <- quantile(HVSP_3_$Netflix_Hours, 0.25, na.rm = TRUE)
Q3 <- quantile(HVSP_3_$Netflix_Hours, 0.75, na.rm = TRUE)
IQR_val <- Q3 - Q1

lim_inf <- Q1 - 1.5 * IQR_val
lim_sup <- Q3 + 1.5 * IQR_val

outliers <- HVSP_3_$Netflix_Hours[HVSP_3_$Netflix_Hours < lim_inf | HVSP_3_$Netflix_Hours > lim_sup]
cat("Valores atípicos detectados (outliers):\n")
## Valores atípicos detectados (outliers):
print(outliers)
## numeric(0)
# -------------------
# Visualizaciones
# -------------------

# Histograma
ggplot(HVSP_3_, aes(x = Netflix_Hours)) +
  geom_histogram(binwidth = 1, fill = "skyblue", color = "black") +
  labs(title = "Histograma de Horas en Netflix", x = "Horas en Netflix", y = "Frecuencia") +
  theme_minimal()

# Densidad
ggplot(HVSP_3_, aes(x = Netflix_Hours)) +
  geom_density(fill = "lightgreen") +
  labs(title = "Densidad de Horas en Netflix", x = "Horas en Netflix") +
  theme_minimal()

# Boxplot
ggplot(HVSP_3_, aes(y = Netflix_Hours)) +
  geom_boxplot(fill = "salmon", color = "black") +
  labs(title = "Boxplot de Horas en Netflix", y = "Horas en Netflix") +
  theme_minimal()

Trabajo de Medio Tiempo:

install.packages("plotrix")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.4'
## (as 'lib' is unspecified)
library(plotrix)

# Crear tabla de frecuencias
PTJ_table <- table(HVSP_3_$Part_time_job)
PTJ_prop <- prop.table(PTJ_table) * 100  # <- Corrección aquí

cat("\nFrecuencias absolutas:\n")
## 
## Frecuencias absolutas:
print(PTJ_table)
## 
##  No Yes 
##  40  10
cat("\nFrecuencias relativas (%):\n")
## 
## Frecuencias relativas (%):
print(round(PTJ_prop, 2))
## 
##  No Yes 
##  80  20
# Calcular porcentajes para etiquetas
PTJ_percent <- round(PTJ_prop, 1)
labels <- paste(names(PTJ_table), "-", PTJ_percent, "%")

# Gráfico de barras
y_lim <- c(0, max(PTJ_table) + 10)
bp <- barplot(PTJ_table,
              main = "Trabajo de medio tiempo",
              col = c("lightpink", "lightblue", "lightgreen"),
              ylab = "Frecuencia",
              xlab = "Trabajo de medio tiempo",
              border = "black",
              names.arg = names(PTJ_table),
              ylim = y_lim,
              cex.names = 1.1)

# Agregar números encima de cada barra
text(x = bp, 
     y = PTJ_table + 4,  # <- Corrección aquí
     labels = PTJ_table,
     cex = 1.1)

# Gráfico de pastel 3D
pie3D(PTJ_table,  # <- Corrección aquí
      radius = 1.0,
      main = "Porcentaje de personas por trabajo",
      labels = labels,
      labelcex = 0.8,
      explode = 0.1,
      col = topo.colors(length(PTJ_table)),
      border = "white")

Porcentaje de asistencia:

HVSP_3_$Attendance_percentage <- as.numeric(as.character(HVSP_3_$Attendance_percentage))
cat("\n---- ANÁLISIS UNIVARIADO DE LA VARIABLE: PORCENTAJE DE ASISTENCIA ----\n")
## 
## ---- ANÁLISIS UNIVARIADO DE LA VARIABLE: PORCENTAJE DE ASISTENCIA ----
# Resumen básico
summary(HVSP_3_$Attendance_percentage)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   66.00   78.55   86.40   85.61   92.15  100.00
# Media
media_asistencia <- mean(HVSP_3_$Attendance_percentage, na.rm = TRUE)
cat("\nMedia:", round(media_asistencia, 2), "\n")
## 
## Media: 85.61
# Mediana
mediana_asistencia <- median(HVSP_3_$Attendance_percentage, na.rm = TRUE)
cat("Mediana:", mediana_asistencia, "\n")
## Mediana: 86.4
# Moda
moda <- function(x) {
  ux <- unique(x)
  ux[which.max(tabulate(match(x, ux)))]
}
cat("Moda:", moda(HVSP_3_$Attendance_percentage), "\n")
## Moda: 100
# Desviación estándar y varianza
cat("Desviación estándar:", round(sd(HVSP_3_$Attendance_percentage, na.rm = TRUE), 2), "\n")
## Desviación estándar: 9.34
cat("Varianza:", round(var(HVSP_3_$Attendance_percentage, na.rm = TRUE), 2), "\n")
## Varianza: 87.2
# Rango y IQR
cat("Rango:", paste(range(HVSP_3_$Attendance_percentage, na.rm = TRUE), collapse = " - "), "\n")
## Rango: 66 - 100
cat("IQR:", IQR(HVSP_3_$Attendance_percentage, na.rm = TRUE), "\n")
## IQR: 13.6
# Coeficiente de variación
cve_asistencia <- 100 * sd(HVSP_3_$Attendance_percentage, na.rm = TRUE) / mean(HVSP_3_$Attendance_percentage, na.rm = TRUE)
cat("Coeficiente de variación (CVE):", round(cve_asistencia, 2), "%\n")
## Coeficiente de variación (CVE): 10.91 %
# MAD
MAD_asistencia <- mad(HVSP_3_$Attendance_percentage, na.rm = TRUE)
cat("MAD:", MAD_asistencia, "\n")
## MAD: 9.85929
# Cuantiles
cat("Cuantiles (Q1, Q2, Q3):\n")
## Cuantiles (Q1, Q2, Q3):
print(quantile(HVSP_3_$Attendance_percentage, probs = c(0.25, 0.5, 0.75), na.rm = TRUE))
##   25%   50%   75% 
## 78.55 86.40 92.15
# Medidas de forma
cat("Asimetría (skewness):", round(skewness(HVSP_3_$Attendance_percentage, na.rm = TRUE), 2), "\n")
## Asimetría (skewness): -0.12
cat("Curtosis:", round(kurtosis(HVSP_3_$Attendance_percentage, na.rm = TRUE), 2), "\n")
## Curtosis: 2.08
# Detección de outliers (basado en IQR)
Q1 <- quantile(HVSP_3_$Attendance_percentage, 0.25, na.rm = TRUE)
Q3 <- quantile(HVSP_3_$Attendance_percentage, 0.75, na.rm = TRUE)
IQR_val <- Q3 - Q1

lim_inf <- Q1 - 1.5 * IQR_val
lim_sup <- Q3 + 1.5 * IQR_val

outliers <- HVSP_3_$Attendance_percentage[HVSP_3_$Attendance_percentage < lim_inf | HVSP_3_$Attendance_percentage > lim_sup]
cat("Valores atípicos detectados (outliers):\n")
## Valores atípicos detectados (outliers):
print(outliers)
## numeric(0)
# -------------------
# Visualizaciones
# -------------------

# Histograma
ggplot(HVSP_3_, aes(x = Attendance_percentage)) +
  geom_histogram(binwidth = 5, fill = "skyblue", color = "black") +
  labs(title = "Histograma de Porcentaje de Asistencia", x = "Porcentaje de Asistencia", y = "Frecuencia") +
  theme_minimal()

# Densidad
ggplot(HVSP_3_, aes(x = Attendance_percentage)) +
  geom_density(fill = "lightgreen") +
  labs(title = "Densidad de Porcentaje de Asistencia", x = "Porcentaje de Asistencia") +
  theme_minimal()

# Boxplot
ggplot(HVSP_3_, aes(y = Attendance_percentage)) +
  geom_boxplot(fill = "salmon", color = "black") +
  labs(title = "Boxplot de Porcentaje de Asistencia", y = "Porcentaje de Asistencia") +
  theme_minimal()

Horas de sueño:

HVSP_3_$Sleep_Hours <- as.numeric(as.character(HVSP_3_$Sleep_Hours))
cat("\n---------- ANÁLISIS UNIVARIADO DE LA VARIABLE: HORAS DE SUEÑO -----------\n")
## 
## ---------- ANÁLISIS UNIVARIADO DE LA VARIABLE: HORAS DE SUEÑO -----------
# Resumen básico
summary(HVSP_3_$Sleep_Hours)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   3.600   5.750   6.600   6.762   7.575   9.700
# Media
media_sueno <- mean(HVSP_3_$Sleep_Hours, na.rm = TRUE)
cat("\nMedia:", round(media_sueno, 2), "\n")
## 
## Media: 6.76
# Mediana
mediana_sueno <- median(HVSP_3_$Sleep_Hours, na.rm = TRUE)
cat("Mediana:", mediana_sueno, "\n")
## Mediana: 6.6
# Moda
moda <- function(x) {
  ux <- unique(x)
  ux[which.max(tabulate(match(x, ux)))]
}
cat("Moda:", moda(HVSP_3_$Sleep_Hours), "\n")
## Moda: 7.1
# Desviación estándar y varianza
cat("Desviación estándar:", round(sd(HVSP_3_$Sleep_Hours, na.rm = TRUE), 2), "\n")
## Desviación estándar: 1.39
cat("Varianza:", round(var(HVSP_3_$Sleep_Hours, na.rm = TRUE), 2), "\n")
## Varianza: 1.93
# Rango y IQR
cat("Rango:", paste(range(HVSP_3_$Sleep_Hours, na.rm = TRUE), collapse = " - "), "\n")
## Rango: 3.6 - 9.7
cat("IQR:", IQR(HVSP_3_$Sleep_Hours, na.rm = TRUE), "\n")
## IQR: 1.825
# Coeficiente de variación
cve_sueno <- 100 * sd(HVSP_3_$Sleep_Hours, na.rm = TRUE) / mean(HVSP_3_$Sleep_Hours, na.rm = TRUE)
cat("Coeficiente de variación (CVE):", round(cve_sueno, 2), "%\n")
## Coeficiente de variación (CVE): 20.53 %
# MAD
MAD_sueno <- mad(HVSP_3_$Sleep_Hours, na.rm = TRUE)
cat("MAD:", MAD_sueno, "\n")
## MAD: 1.40847
# Cuantiles
cat("Cuantiles (Q1, Q2, Q3):\n")
## Cuantiles (Q1, Q2, Q3):
print(quantile(HVSP_3_$Sleep_Hours, probs = c(0.25, 0.5, 0.75), na.rm = TRUE))
##   25%   50%   75% 
## 5.750 6.600 7.575
# Medidas de forma
cat("Asimetría (skewness):", round(skewness(HVSP_3_$Sleep_Hours, na.rm = TRUE), 2), "\n")
## Asimetría (skewness): 0.06
cat("Curtosis:", round(kurtosis(HVSP_3_$Sleep_Hours, na.rm = TRUE), 2), "\n")
## Curtosis: 2.84
# Detección de outliers (basado en IQR)
Q1 <- quantile(HVSP_3_$Sleep_Hours, 0.25, na.rm = TRUE)
Q3 <- quantile(HVSP_3_$Sleep_Hours, 0.75, na.rm = TRUE)
IQR_val <- Q3 - Q1

lim_inf <- Q1 - 1.5 * IQR_val
lim_sup <- Q3 + 1.5 * IQR_val

outliers <- HVSP_3_$Sleep_Hours[HVSP_3_$Sleep_Hours < lim_inf | HVSP_3_$Sleep_Hours > lim_sup]
cat("Valores atípicos detectados (outliers):\n")
## Valores atípicos detectados (outliers):
print(outliers)
## numeric(0)
# -------------------
# Visualizaciones
# -------------------

# Histograma
ggplot(HVSP_3_, aes(x = Sleep_Hours)) +
  geom_histogram(binwidth = 1, fill = "skyblue", color = "black") +
  labs(title = "Histograma de Horas de Sueño", x = "Horas de Sueño", y = "Frecuencia") +
  theme_minimal()

# Densidad
ggplot(HVSP_3_, aes(x = Sleep_Hours)) +
  geom_density(fill = "lightgreen") +
  labs(title = "Densidad de Horas de Sueño", x = "Horas de Sueño") +
  theme_minimal()

# Boxplot
ggplot(HVSP_3_, aes(y = Sleep_Hours)) +
  geom_boxplot(fill = "salmon", color = "black") +
  labs(title = "Boxplot de Horas de Sueño", y = "Horas de Sueño") +
  theme_minimal()

Calidad de dieta:

install.packages("plotrix")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.4'
## (as 'lib' is unspecified)
library(plotrix)

# Crear tabla de frecuencias
CD_table <- table(HVSP_3_$Diet_Quality)
CD_prop <- prop.table(CD_table) * 100 

cat("\nFrecuencias absolutas:\n")
## 
## Frecuencias absolutas:
print(CD_table)
## 
## Fair Good Poor 
##   20   17   13
cat("\nFrecuencias relativas (%):\n")
## 
## Frecuencias relativas (%):
print(round(CD_prop, 2))
## 
## Fair Good Poor 
##   40   34   26
# Calcular porcentajes para etiquetas
CD_percent <- round(CD_prop, 1)
labels <- paste(names(CD_table), "-", CD_percent, "%")

# Gráfico de barras
y_lim <- c(0, max(CD_table) + 10)
bp <- barplot(CD_table,
              main = "Grafica Calidad de Dieta",
              col = c("lightpink", "lightblue", "lightgreen"),
              ylab = "Frecuencia",
              xlab = "Calidad Dieta",
              border = "black",
              names.arg = names(CD_table),
              ylim = y_lim,
              cex.names = 1.1)

# Agregar números encima de cada barra
text(x = bp, 
     y = CD_table + 2,  # <- Corrección aquí
     labels = CD_table,
     cex = 1.1)

# Gráfico de pastel 3D
pie3D(CD_table,  # <- Corrección aquí
      radius = 1.0,
      main = "Porcentaje Con Determinada Calidad de Dieta",
      labels = labels,
      labelcex = 0.8,
      explode = 0.1,
      col = topo.colors(length(CD_table)),
      border = "white")

Dias de ejercicio:

cat("\n--------- ANÁLISIS UNIVARIADO DE LA VARIABLE: DÍAS DE EJERCICIO ---------\n")
## 
## --------- ANÁLISIS UNIVARIADO DE LA VARIABLE: DÍAS DE EJERCICIO ---------
# Resumen básico
summary(HVSP_3_$Workout_Days)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    0.00    1.00    2.50    2.68    5.00    6.00
# Media
media_ejercicio <- mean(HVSP_3_$Workout_Days, na.rm = TRUE)
cat("\nMedia:", round(media_ejercicio, 2), "\n")
## 
## Media: 2.68
# Mediana
mediana_ejercicio <- median(HVSP_3_$Workout_Days, na.rm = TRUE)
cat("Mediana:", mediana_ejercicio, "\n")
## Mediana: 2.5
# Moda
moda <- function(x) {
  ux <- unique(x)
  ux[which.max(tabulate(match(x, ux)))]
}
cat("Moda:", moda(HVSP_3_$Workout_Days), "\n")
## Moda: 0
# Desviación estándar y varianza
cat("Desviación estándar:", round(sd(HVSP_3_$Workout_Days, na.rm = TRUE), 2), "\n")
## Desviación estándar: 2.2
cat("Varianza:", round(var(HVSP_3_$Workout_Days, na.rm = TRUE), 2), "\n")
## Varianza: 4.83
# Rango e IQR
cat("Rango:", paste(range(HVSP_3_$Workout_Days, na.rm = TRUE), collapse = " - "), "\n")
## Rango: 0 - 6
cat("IQR:", IQR(HVSP_3_$Workout_Days, na.rm = TRUE), "\n")
## IQR: 4
# Coeficiente de variación
cve_ejercicio <- 100 * sd(HVSP_3_$Workout_Days, na.rm = TRUE) / mean(HVSP_3_$Workout_Days, na.rm = TRUE)
cat("Coeficiente de variación (CVE):", round(cve_ejercicio, 2), "%\n")
## Coeficiente de variación (CVE): 82.04 %
# MAD
MAD_ejercicio <- mad(HVSP_3_$Workout_Days, na.rm = TRUE)
cat("MAD:", MAD_ejercicio, "\n")
## MAD: 3.7065
# Cuantiles
cat("Cuantiles (Q1, Q2, Q3):\n")
## Cuantiles (Q1, Q2, Q3):
print(quantile(HVSP_3_$Workout_Days, probs = c(0.25, 0.5, 0.75), na.rm = TRUE))
## 25% 50% 75% 
## 1.0 2.5 5.0
# Medidas de forma
cat("Asimetría (skewness):", round(skewness(HVSP_3_$Workout_Days, na.rm = TRUE), 2), "\n")
## Asimetría (skewness): 0.25
cat("Curtosis:", round(kurtosis(HVSP_3_$Workout_Days, na.rm = TRUE), 2), "\n")
## Curtosis: 1.62
# Detección de outliers (basado en IQR)
Q1 <- quantile(HVSP_3_$Workout_Days, 0.25, na.rm = TRUE)
Q3 <- quantile(HVSP_3_$Workout_Days, 0.75, na.rm = TRUE)
IQR_val <- Q3 - Q1

lim_inf <- Q1 - 1.5 * IQR_val
lim_sup <- Q3 + 1.5 * IQR_val

outliers <- HVSP_3_$Workout_Days[HVSP_3_$Workout_Days < lim_inf | HVSP_3_$Workout_Days > lim_sup]
cat("Valores atípicos detectados (outliers):\n")
## Valores atípicos detectados (outliers):
print(outliers)
## numeric(0)
# -------------------
# Visualizaciones
# -------------------

# Histograma
ggplot(HVSP_3_, aes(x = Workout_Days)) +
  geom_histogram(binwidth = 1, fill = "skyblue", color = "black") +
  labs(title = "Histograma de Días de Ejercicio", x = "Días de Ejercicio", y = "Frecuencia") +
  theme_minimal()

# Densidad
ggplot(HVSP_3_, aes(x = Workout_Days)) +
  geom_density(fill = "lightgreen") +
  labs(title = "Densidad de Días de Ejercicio", x = "Días de Ejercicio") +
  theme_minimal()

# Boxplot
ggplot(HVSP_3_, aes(y = Workout_Days)) +
  geom_boxplot(fill = "salmon", color = "black") +
  labs(title = "Boxplot de Días de Ejercicio", y = "Días de Ejercicio") +
  theme_minimal()

Calidad de internet:

install.packages("plotrix")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.4'
## (as 'lib' is unspecified)
library(plotrix)

# Crear tabla de frecuencias
IQ_table <- table(HVSP_3_$Internet_Quality)
IQ_prop <- prop.table(IQ_table) * 100 

cat("\nFrecuencias absolutas:\n")
## 
## Frecuencias absolutas:
print(IQ_table)
## 
## Average    Good    Poor 
##      19      25       6
cat("\nFrecuencias relativas (%):\n")
## 
## Frecuencias relativas (%):
print(round(IQ_prop, 2))
## 
## Average    Good    Poor 
##      38      50      12
# Calcular porcentajes para etiquetas
IQ_percent <- round(IQ_prop, 1)
labels <- paste(names(IQ_table), "-", IQ_percent, "%")

# Gráfico de barras
y_lim <- c(0, max(IQ_table) + 10)
bp <- barplot(IQ_table,
              main = "Grafica Calidad de Internet",
              col = c("lightpink", "lightblue", "lightgreen"),
              ylab = "Frecuencia",
              xlab = "Calidad Internet",
              border = "black",
              names.arg = names(IQ_table),
              ylim = y_lim,
              cex.names = 1.1)

# Agregar números encima de cada barra
text(x = bp, 
     y = IQ_table + 4,
     labels = IQ_table,
     cex = 1.1)

# Gráfico de pastel 3D
pie3D(IQ_table,  # <- Corrección aquí
      radius = 1.0,
      main = "Porcentaje Con Determinada Calidad de Internet",
      labels = labels,
      labelcex = 0.8,
      explode = 0.1,
      col = topo.colors(length(IQ_table)),
      border = "white")

Estado de salud mental:

cat("\n--- ANÁLISIS UNIVARIADO DE LA VARIABLE: ESTADO DE SALUD MENTAL (1-10) ---\n")
## 
## --- ANÁLISIS UNIVARIADO DE LA VARIABLE: ESTADO DE SALUD MENTAL (1-10) ---
# Resumen básico
summary(HVSP_3_$Mind_Health_Quality)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    1.00    4.25    6.00    5.82    8.00   10.00
# Media
media_salud_mental <- mean(HVSP_3_$Mind_Health_Quality, na.rm = TRUE)
cat("\nMedia:", round(media_salud_mental, 2), "\n")
## 
## Media: 5.82
# Mediana
mediana_salud_mental <- median(HVSP_3_$Mind_Health_Quality, na.rm = TRUE)
cat("Mediana:", mediana_salud_mental, "\n")
## Mediana: 6
# Moda
moda <- function(x) {
  ux <- unique(x)
  ux[which.max(tabulate(match(x, ux)))]
}
cat("Moda:", moda(HVSP_3_$Mind_Health_Quality), "\n")
## Moda: 5
# Desviación estándar y varianza
cat("Desviación estándar:", round(sd(HVSP_3_$Mind_Health_Quality, na.rm = TRUE), 2), "\n")
## Desviación estándar: 2.63
cat("Varianza:", round(var(HVSP_3_$Mind_Health_Quality, na.rm = TRUE), 2), "\n")
## Varianza: 6.93
# Rango e IQR
cat("Rango:", paste(range(HVSP_3_$Mind_Health_Quality, na.rm = TRUE), collapse = " - "), "\n")
## Rango: 1 - 10
cat("IQR:", IQR(HVSP_3_$Mind_Health_Quality, na.rm = TRUE), "\n")
## IQR: 3.75
# Coeficiente de variación
cve_salud_mental <- 100 * sd(HVSP_3_$Mind_Health_Quality, na.rm = TRUE) / mean(HVSP_3_$Mind_Health_Quality, na.rm = TRUE)
cat("Coeficiente de variación (CVE):", round(cve_salud_mental, 2), "%\n")
## Coeficiente de variación (CVE): 45.22 %
# MAD
MAD_salud_mental <- mad(HVSP_3_$Mind_Health_Quality, na.rm = TRUE)
cat("MAD:", MAD_salud_mental, "\n")
## MAD: 2.9652
# Cuantiles
cat("Cuantiles (Q1, Q2, Q3):\n")
## Cuantiles (Q1, Q2, Q3):
print(quantile(HVSP_3_$Mind_Health_Quality, probs = c(0.25, 0.5, 0.75), na.rm = TRUE))
##  25%  50%  75% 
## 4.25 6.00 8.00
# Medidas de forma
cat("Asimetría (skewness):", round(skewness(HVSP_3_$Mind_Health_Quality, na.rm = TRUE), 2), "\n")
## Asimetría (skewness): -0.2
cat("Curtosis:", round(kurtosis(HVSP_3_$Mind_Health_Quality, na.rm = TRUE), 2), "\n")
## Curtosis: 2.08
# Detección de outliers (basado en IQR)
Q1 <- quantile(HVSP_3_$Mind_Health_Quality, 0.25, na.rm = TRUE)
Q3 <- quantile(HVSP_3_$Mind_Health_Quality, 0.75, na.rm = TRUE)
IQR_val <- Q3 - Q1

lim_inf <- Q1 - 1.5 * IQR_val
lim_sup <- Q3 + 1.5 * IQR_val

outliers <- HVSP_3_$Mind_Health_Quality[HVSP_3_$Mind_Health_Quality < lim_inf | HVSP_3_$Mind_Health_Quality > lim_sup]
cat("Valores atípicos detectados (outliers):\n")
## Valores atípicos detectados (outliers):
print(outliers)
## numeric(0)
# -------------------
# Visualizaciones
# -------------------

# Histograma
ggplot(HVSP_3_, aes(x = Mind_Health_Quality)) +
  geom_histogram(binwidth = 1, fill = "skyblue", color = "black") +
  labs(title = "Histograma de Estado de Salud Mental", x = "Estado de Salud Mental", y = "Frecuencia") +
  theme_minimal()

# Densidad
ggplot(HVSP_3_, aes(x = Mind_Health_Quality)) +
  geom_density(fill = "lightgreen") +
  labs(title = "Densidad de Estado de Salud Mental", x = "Estado de Salud Mental") +
  theme_minimal()

# Boxplot
ggplot(HVSP_3_, aes(y = Mind_Health_Quality)) +
  geom_boxplot(fill = "salmon", color = "black") +
  labs(title = "Boxplot de Estado de Salud Mental", y = "Estado de Salud Mental") +
  theme_minimal()

Participacion extracurricular:

install.packages("plotrix")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.4'
## (as 'lib' is unspecified)
library(plotrix)

# Crear tabla de frecuencias
EP_table <- table(HVSP_3_$Extracurricular_Participation)
EP_prop <- prop.table(EP_table) * 100  # ← corregido aquí

cat("\nFrecuencias absolutas:\n")
## 
## Frecuencias absolutas:
print(EP_table)
## 
##  No Yes 
##  34  16
cat("\nFrecuencias relativas (%):\n")
## 
## Frecuencias relativas (%):
print(round(EP_prop, 2))
## 
##  No Yes 
##  68  32
# Calcular porcentajes para etiquetas
EP_percent <- round(EP_prop, 1)
labels <- paste(names(EP_table), "-", EP_percent, "%")

# Gráfico de barras
y_lim <- c(0, max(EP_table) + 10)
bp <- barplot(EP_table,
              main = "Grafica Participación en Actividades Extracurriculares",
              col = c("lightpink", "lightblue", "lightgreen"),
              ylab = "Frecuencia",
              xlab = "Participación",  # ← coma agregada aquí
              names.arg = names(EP_table),
              ylim = y_lim,
              cex.names = 1.1)

# Agregar números encima de cada barra
text(x = bp, 
     y = EP_table + 3,
     labels = EP_table,
     cex = 1.1)

# Gráfico de pastel 3D
pie3D(EP_table,  
      radius = 1.0,
      main = "Porcentaje de Participación Extracurricular",
      labels = labels,
      labelcex = 0.8,
      explode = 0.1,
      col = topo.colors(length(EP_table)),
      border = "white")

Notas en el examen final:

cat("\n--- ANÁLISIS UNIVARIADO DE LA VARIABLE: RESULTADOS DEL EXAMEN FINAL ---\n")
## 
## --- ANÁLISIS UNIVARIADO DE LA VARIABLE: RESULTADOS DEL EXAMEN FINAL ---
# Resumen básico
summary(HVSP_3_$Test_Grade)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   30.50   54.05   68.15   67.59   81.62  100.00
# Media
media_examen <- mean(HVSP_3_$Test_Grade, na.rm = TRUE)
cat("\nMedia:", round(media_examen, 2), "\n")
## 
## Media: 67.59
# Mediana
mediana_examen <- median(HVSP_3_$Test_Grade, na.rm = TRUE)
cat("Mediana:", mediana_examen, "\n")
## Mediana: 68.15
# Moda
moda <- function(x) {
  ux <- unique(x)
  ux[which.max(tabulate(match(x, ux)))]
}
cat("Moda:", moda(HVSP_3_$Test_Grade), "\n")
## Moda: 66.7
# Desviación estándar y varianza
cat("Desviación estándar:", round(sd(HVSP_3_$Test_Grade, na.rm = TRUE), 2), "\n")
## Desviación estándar: 18.06
cat("Varianza:", round(var(HVSP_3_$Test_Grade, na.rm = TRUE), 2), "\n")
## Varianza: 326.27
# Rango e IQR
cat("Rango:", paste(range(HVSP_3_$Test_Grade, na.rm = TRUE), collapse = " - "), "\n")
## Rango: 30.5 - 100
cat("IQR:", IQR(HVSP_3_$Test_Grade, na.rm = TRUE), "\n")
## IQR: 27.575
# Coeficiente de variación
cve_examen <- 100 * sd(HVSP_3_$Test_Grade, na.rm = TRUE) / mean(HVSP_3_$Test_Grade, na.rm = TRUE)
cat("Coeficiente de variación (CVE):", round(cve_examen, 2), "%\n")
## Coeficiente de variación (CVE): 26.72 %
# MAD
MAD_examen <- mad(HVSP_3_$Test_Grade, na.rm = TRUE)
cat("MAD:", MAD_examen, "\n")
## MAD: 21.12705
# Cuantiles
cat("Cuantiles (Q1, Q2, Q3):\n")
## Cuantiles (Q1, Q2, Q3):
print(quantile(HVSP_3_$Test_Grade, probs = c(0.25, 0.5, 0.75), na.rm = TRUE))
##    25%    50%    75% 
## 54.050 68.150 81.625
# Medidas de forma
cat("Asimetría (skewness):", round(skewness(HVSP_3_$Test_Grade, na.rm = TRUE), 2), "\n")
## Asimetría (skewness): -0.06
cat("Curtosis:", round(kurtosis(HVSP_3_$Test_Grade, na.rm = TRUE), 2), "\n")
## Curtosis: 2.16
# Detección de outliers (basado en IQR)
Q1 <- quantile(HVSP_3_$Test_Grade, 0.25, na.rm = TRUE)
Q3 <- quantile(HVSP_3_$Test_Grade, 0.75, na.rm = TRUE)
IQR_val <- Q3 - Q1

lim_inf <- Q1 - 1.5 * IQR_val
lim_sup <- Q3 + 1.5 * IQR_val

outliers <- HVSP_3_$Test_Grade[HVSP_3_$Test_Grade < lim_inf | HVSP_3_$Test_Grade > lim_sup]
cat("Valores atípicos detectados (outliers):\n")
## Valores atípicos detectados (outliers):
print(outliers)
## numeric(0)
# -------------------
# Visualizaciones
# -------------------

# Histograma
ggplot(HVSP_3_, aes(x = Test_Grade)) +
  geom_histogram(binwidth = 5, fill = "skyblue", color = "black") +
  labs(title = "Histograma de Resultados del Examen Final", x = "Resultado del Examen", y = "Frecuencia") +
  theme_minimal()

# Densidad
ggplot(HVSP_3_, aes(x = Test_Grade)) +
  geom_density(fill = "lightgreen") +
  labs(title = "Densidad de Resultados del Examen Final", x = "Resultado del Examen") +
  theme_minimal()

# Boxplot
ggplot(HVSP_3_, aes(y = Test_Grade)) +
  geom_boxplot(fill = "salmon", color = "black") +
  labs(title = "Boxplot de Resultados del Examen Final", y = "Resultado del Examen") +
  theme_minimal()

A partir de estas conclusiones presentadas, se realiza la siguiente comparacion con el conjunto de datos poblacional.

Punto 3: Estimaciones de Densidad de Kernel.

# Cargar librería
library(ggplot2)


vars_numericas <- c("Age_P", "Study_Hours_P", "Sleep_Hours_P", "Workout_Days_P",
                    "Mind_Health_Quality_P", "Netflix_Time", "Attendance_percentage_P",
                    "Test_Grade_P", "Social_Media_Hours_P")

# Filtro del registro 15
registro_15 <- DaAn_1_[15, ]

# Tipos de kernel
tipos_kernel <- c("rectangular", "triangular", "gaussian")

# Inicializar lista para resultados
resultados_kernel <- list()

# Iterar por variable
for (var in vars_numericas) {
  valores_var <- as.numeric(DaAn_1_[[var]])
  valor_15 <- as.numeric(registro_15[[var]])
  
  resultados_kernel[[var]] <- list()
  
  for (k in tipos_kernel) {
    # Estimación de densidad con kernel específico
    dens <- density(valores_var, kernel = k, na.rm = TRUE)
    
    # Interpolación del valor estimado en el punto del registro 15
    valor_estimado <- approx(dens$x, dens$y, xout = valor_15)$y
    resultados_kernel[[var]][[k]] <- valor_estimado
    
    # Graficar densidad con marca del valor 15
    plot_df <- data.frame(x = dens$x, y = dens$y)
    g <- ggplot(plot_df, aes(x = x, y = y)) +
      geom_line(color = "steelblue", size = 1) +
      geom_vline(xintercept = valor_15, color = "red", linetype = "dashed") +
      geom_point(aes(x = valor_15, y = valor_estimado), color = "red", size = 2) +
      labs(title = paste("Densidad -", var, "con kernel", k),
           x = var,
           y = "Densidad") +
      theme_minimal()
    
    print(g)
  }
}

# Mostrar valores estimados
for (var in names(resultados_kernel)) {
  cat("\n---", var, "---\n")
  for (k in tipos_kernel) {
    cat(paste("Kernel", k, ": ", round(resultados_kernel[[var]][[k]], 5), "\n"))
  }
}
## 
## --- Age_P ---
## Kernel rectangular :  0.07413 
## Kernel triangular :  0.12394 
## Kernel gaussian :  0.11696 
## 
## --- Study_Hours_P ---
## Kernel rectangular :  0.19282 
## Kernel triangular :  0.19646 
## Kernel gaussian :  0.1976 
## 
## --- Sleep_Hours_P ---
## Kernel rectangular :  0.29345 
## Kernel triangular :  0.30695 
## Kernel gaussian :  0.30574 
## 
## --- Workout_Days_P ---
## Kernel rectangular :  0.09583 
## Kernel triangular :  0.14907 
## Kernel gaussian :  0.14437 
## 
## --- Mind_Health_Quality_P ---
## Kernel rectangular :  0.1305 
## Kernel triangular :  0.10197 
## Kernel gaussian :  0.0922 
## 
## --- Netflix_Time ---
## Kernel rectangular :  0.24704 
## Kernel triangular :  0.23397 
## Kernel gaussian :  0.23526 
## 
## --- Attendance_percentage_P ---
## Kernel rectangular :  0.03761 
## Kernel triangular :  0.03788 
## Kernel gaussian :  0.03795 
## 
## --- Test_Grade_P ---
## Kernel rectangular :  0.0206 
## Kernel triangular :  0.01958 
## Kernel gaussian :  0.01948 
## 
## --- Social_Media_Hours_P ---
## Kernel rectangular :  0.23199 
## Kernel triangular :  0.23664 
## Kernel gaussian :  0.23564