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:
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()
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")
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()
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()
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")
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()
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()
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")
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()
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")
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()
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")
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()
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.
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()
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")
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()
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()
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")
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()
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()
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")
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()
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")
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()
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")
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.
# 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