4. Análisis por grupos de interés
Grupo A – Estudiantes
# Filtrar solo los registros donde la Ocupación sea "Estudiante"
grupo_a <- datos %>%
filter(Ocupación == "Estudiante")
# Seleccionar solo las variables numéricas (sin ID si se desea omitir)
grupo_a_numericas <- grupo_a %>%
select(where(is.numeric))
# Mostrar resumen estadístico
summary(grupo_a_numericas)
## ID Edad Horas de uso semanal Sesiones semanales
## Min. :227197 Min. :19.00 Min. : 5.60 Min. : 8.00
## 1st Qu.:396184 1st Qu.:22.50 1st Qu.: 7.45 1st Qu.:10.50
## Median :728923 Median :28.00 Median : 9.25 Median :13.50
## Mean :607064 Mean :29.75 Mean : 8.95 Mean :13.75
## 3rd Qu.:785765 3rd Qu.:34.00 3rd Qu.:10.93 3rd Qu.:17.25
## Max. :845700 Max. :47.00 Max. :11.00 Max. :20.00
## Duración promedio por sesión (min) Nivel de satisfacción (1-10)
## Min. : 5.10 Min. : 4.000
## 1st Qu.:10.10 1st Qu.: 4.750
## Median :14.40 Median : 6.500
## Mean :14.04 Mean : 6.375
## 3rd Qu.:17.43 3rd Qu.: 7.250
## Max. :24.30 Max. :10.000
## Nivel de estrés (1-10)
## Min. : 3.000
## 1st Qu.: 4.500
## Median : 5.000
## Mean : 5.625
## 3rd Qu.: 6.500
## Max. :10.000
# Filtrar solo estudiantes
estudiantes <- datos %>%
filter(Ocupación == "Estudiante")
# Seleccionar variables categóricas de interés
categ_estudiantes <- estudiantes %>%
select(Ciudad, Género, `Motivación principal`) %>%
pivot_longer(cols = everything(), names_to = "Variable", values_to = "Categoría")
# Graficar en facetas
ggplot(categ_estudiantes, aes(x = fct_infreq(Categoría), fill = Variable)) +
geom_bar(show.legend = FALSE) +
facet_wrap(~Variable, scales = "free") +
coord_flip() +
labs(
title = "Distribución de variables categóricas – Estudiantes",
x = "",
y = "Frecuencia"
) +
theme_minimal()

# Filtrar solo estudiantes
estudiantes <- datos %>%
filter(Ocupación == "Estudiante")
# Gráfico de dispersión con línea de regresión
ggplot(estudiantes, aes(x = `Nivel de estrés (1-10)`, y = `Nivel de satisfacción (1-10)`)) +
geom_point(color = "purple", size = 3, alpha = 0.7) +
geom_smooth(method = "lm", se = FALSE, color = "darkred", linewidth = 1) +
labs(
title = "Estrés Vs. Satisfacción - Estudiantes",
x = "Estrés",
y = "Satisfacción"
) +
theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'

# Filtrar Grupo A
grupo_a <- datos %>%
filter(Ocupación == "Estudiante")
# Calcular coeficiente de Spearman
cor.test(grupo_a$`Nivel de estrés (1-10)`, grupo_a$`Nivel de satisfacción (1-10)`, method = "spearman")
## Warning in cor.test.default(grupo_a$`Nivel de estrés (1-10)`, grupo_a$`Nivel de
## satisfacción (1-10)`, : Cannot compute exact p-value with ties
##
## Spearman's rank correlation rho
##
## data: grupo_a$`Nivel de estrés (1-10)` and grupo_a$`Nivel de satisfacción (1-10)`
## S = 90.262, p-value = 0.8607
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
## rho
## -0.0745471
# Filtrar solo estudiantes
estudiantes <- datos %>%
filter(Ocupación == "Estudiante")
# Tabla de contingencia
tabla_gc <- table(estudiantes$Género, estudiantes$`Contenido favorito`)
print(tabla_gc)
##
## Diario emocional Listas de tareas Música relajante
## Femenino 1 0 2
## Masculino 0 0 0
## No binario 1 0 0
## Prefiere no decir 0 1 1
##
## Videos educativos
## Femenino 1
## Masculino 1
## No binario 0
## Prefiere no decir 0
# Gráfico de barras apiladas
ggplot(estudiantes, aes(x = `Contenido favorito`, fill = Género)) +
geom_bar(position = "dodge") +
labs(
title = "Género vs Contenido favorito – Estudiantes",
x = "Contenido favorito",
y = "Frecuencia"
) +
theme_minimal()

Grupo B – Alto estrés
# Filtrar usuarios con nivel de estrés >= 8 (Grupo B)
grupo_b <- datos %>%
filter(`Nivel de estrés (1-10)` >= 8)
# Seleccionar variables numéricas
grupo_b_numericas <- grupo_b %>%
select(where(is.numeric))
# Resumen estadístico
summary(grupo_b_numericas)
## ID Edad Horas de uso semanal Sesiones semanales
## Min. :128893 Min. :22.00 Min. : 2.000 Min. : 7.0
## 1st Qu.:244890 1st Qu.:29.00 1st Qu.: 8.325 1st Qu.:11.5
## Median :726937 Median :31.50 Median :10.350 Median :15.0
## Mean :578691 Mean :33.83 Mean : 9.500 Mean :16.5
## 3rd Qu.:812510 3rd Qu.:37.25 3rd Qu.:11.025 3rd Qu.:15.5
## Max. :956881 Max. :54.00 Max. :14.400 Max. :50.0
## Duración promedio por sesión (min) Nivel de satisfacción (1-10)
## Min. : 5.40 Min. : 2.00
## 1st Qu.:13.72 1st Qu.: 4.00
## Median :15.10 Median : 6.00
## Mean :15.27 Mean : 6.25
## 3rd Qu.:17.10 3rd Qu.: 8.25
## Max. :22.70 Max. :10.00
## Nivel de estrés (1-10)
## Min. : 8.000
## 1st Qu.: 8.000
## Median : 9.000
## Mean : 8.917
## 3rd Qu.:10.000
## Max. :10.000
# Filtrar usuarios con alto nivel de estrés (Grupo B)
grupo_b <- datos %>%
filter(`Nivel de estrés (1-10)` >= 8)
# Seleccionar variables categóricas de interés
grupo_b_categoricas <- grupo_b %>%
select(Ocupación, Ciudad, `Motivación principal`)
# Crear gráfico de barras
grupo_b_categoricas %>%
pivot_longer(cols = everything(), names_to = "Variable", values_to = "Categoría") %>%
ggplot(aes(x = fct_infreq(Categoría), fill = Variable)) +
geom_bar(show.legend = FALSE) +
facet_wrap(~Variable, scales = "free") +
coord_flip() +
labs(
title = "Distribución de variables categóricas – Grupo B (Alto Estrés)",
x = "",
y = "Frecuencia"
) +
theme_minimal()

# Filtrar Grupo B (estrés ≥ 8)
grupo_b <- datos %>%
filter(`Nivel de estrés (1-10)` >= 8)
# Gráfico de barras: contenido favorito de usuarios con alto estrés
ggplot(grupo_b, aes(x = fct_infreq(`Contenido favorito`))) +
geom_bar(fill = "steelblue") +
coord_flip() +
labs(
title = "Contenido favorito de usuarios con alto nivel de estrés",
x = "Contenido favorito",
y = "Frecuencia"
) +
theme_minimal()

# Filtrar Grupo B (estrés ≥ 8)
grupo_b <- datos %>%
filter(`Nivel de estrés (1-10)` >= 8)
# Tabla de contingencia
tabla_b <- table(grupo_b$Ocupación, grupo_b$`Motivación principal`)
print(tabla_b)
##
## Ansiedad/Estrés Mejorar sueño Organización personal
## Ama de casa 1 1 1
## Estudiante 1 1 0
## Independiente 1 0 0
## Profesional 0 2 1
##
## Productividad
## Ama de casa 0
## Estudiante 0
## Independiente 1
## Profesional 2
# Gráfico de barras agrupadas
ggplot(grupo_b, aes(x = `Motivación principal`, fill = Ocupación)) +
geom_bar(position = "dodge") +
labs(
title = "Ocupación vs Motivación principal – Grupo B (Alto estrés)",
x = "Motivación principal",
y = "Frecuencia"
) +
theme_minimal()

Grupo C – Alto uso
# Filtrar Grupo C: usuarios con más de 15 horas de uso semanal
grupo_c <- datos %>% filter(`Horas de uso semanal` > 12)
# Seleccionar variables numéricas
grupo_c_numericas <- grupo_c %>%
select(where(is.numeric)) %>%
select(-ID)
# Mostrar resumen estadístico
summary(grupo_c_numericas)
## Edad Horas de uso semanal Sesiones semanales
## Min. :25.00 Min. :12.20 Min. : 3.00
## 1st Qu.:29.00 1st Qu.:12.50 1st Qu.:11.00
## Median :39.00 Median :13.10 Median :13.00
## Mean :38.78 Mean :18.52 Mean :18.11
## 3rd Qu.:51.00 3rd Qu.:14.40 3rd Qu.:17.00
## Max. :54.00 Max. :50.00 Max. :70.00
## Duración promedio por sesión (min) Nivel de satisfacción (1-10)
## Min. : 8.90 Min. : 3
## 1st Qu.: 13.90 1st Qu.: 4
## Median : 15.90 Median : 8
## Mean : 27.06 Mean : 7
## 3rd Qu.: 19.70 3rd Qu.: 9
## Max. :120.00 Max. :10
## Nivel de estrés (1-10)
## Min. : 2.000
## 1st Qu.: 2.000
## Median : 3.000
## Mean : 4.222
## 3rd Qu.: 4.000
## Max. :10.000
grupo_c <- datos %>%
filter(`Horas de uso semanal` > 12)
# Seleccionar variables categóricas relevantes
grupo_c_categoricas <- grupo_c %>%
select(Ocupación, Ciudad, `Contenido favorito`)
# Transformar y graficar
grupo_c_categoricas %>%
pivot_longer(cols = everything(), names_to = "Variable", values_to = "Categoría") %>%
ggplot(aes(x = fct_infreq(Categoría), fill = Variable)) +
geom_bar(show.legend = FALSE) +
facet_wrap(~Variable, scales = "free") +
coord_flip() +
labs(
title = "Distribución de variables categóricas – Grupo C (Uso > 12 horas/semana)",
x = "Categoría",
y = "Frecuencia"
) +
theme_minimal()

# Filtrar Grupo C: usuarios con más de 12 horas de uso semanal
grupo_c <- datos %>% filter(`Horas de uso semanal` > 12)
# Gráfico: Horas de uso semanal vs Nivel de satisfacción
ggplot(grupo_c, aes(x = `Horas de uso semanal`, y = `Nivel de satisfacción (1-10)`)) +
geom_point(color = "darkgreen", size = 3, alpha = 0.7) +
geom_smooth(method = "lm", se = FALSE, color = "orange", linewidth = 1) +
labs(
title = "Relación entre horas de uso semanal y satisfacción – Grupo C",
x = "Horas de uso semanal",
y = "Nivel de satisfacción (1-10)"
) +
theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'

# Filtrar Grupo C
grupo_c <- datos %>% filter(`Horas de uso semanal` > 12)
# Calcular coeficiente de Spearman
cor.test(grupo_c$`Horas de uso semanal`, grupo_c$`Nivel de satisfacción (1-10)`, method = "spearman")
## Warning in cor.test.default(grupo_c$`Horas de uso semanal`, grupo_c$`Nivel de
## satisfacción (1-10)`, : Cannot compute exact p-value with ties
##
## Spearman's rank correlation rho
##
## data: grupo_c$`Horas de uso semanal` and grupo_c$`Nivel de satisfacción (1-10)`
## S = 197.96, p-value = 0.05824
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
## rho
## -0.6496676
# Filtrar Grupo C (uso > 12 horas semanales)
grupo_c <- datos %>% filter(`Horas de uso semanal` > 12)
# Tabla de contingencia
table(grupo_c$Género, grupo_c$`Frecuencia uso herramientas`)
##
## Alta Baja Media
## Femenino 1 0 1
## Masculino 0 2 0
## No binario 3 0 0
## Prefiere no decir 0 0 2
# Gráfico de barras
ggplot(grupo_c, aes(x = `Frecuencia uso herramientas`, fill = Género)) +
geom_bar(position = "dodge") +
labs(
title = "Frecuencia de uso de herramientas por género – Grupo C",
x = "Frecuencia de uso",
y = "Cantidad de usuarios"
) +
theme_minimal()

Matriz de covarianza
# Seleccionar variables numéricas relevantes
vars <- c("Edad",
"Horas de uso semanal",
"Sesiones semanales",
"Duración promedio por sesión (min)",
"Nivel de satisfacción (1-10)",
"Nivel de estrés (1-10)")
# Subconjunto con las variables
datos_numericos <- datos[vars]
# Asegurar que todas sean numéricas
datos_numericos <- as.data.frame(lapply(datos_numericos, as.numeric))
# Calcular matriz de covarianza
matriz_covarianza <- cov(datos_numericos, use = "complete.obs")
# Mostrar
print(matriz_covarianza)
## Edad Horas.de.uso.semanal
## Edad 109.930204 -1.658041
## Horas.de.uso.semanal -1.658041 46.191004
## Sesiones.semanales -25.643673 38.197388
## Duración.promedio.por.sesión..min. 10.601429 29.933551
## Nivel.de.satisfacción..1.10. 4.263673 -3.323592
## Nivel.de.estrés..1.10. -2.433469 -3.601388
## Sesiones.semanales
## Edad -25.64367
## Horas.de.uso.semanal 38.19739
## Sesiones.semanales 117.79633
## Duración.promedio.por.sesión..min. -25.44306
## Nivel.de.satisfacción..1.10. -5.59102
## Nivel.de.estrés..1.10. -1.56898
## Duración.promedio.por.sesión..min.
## Edad 10.601429
## Horas.de.uso.semanal 29.933551
## Sesiones.semanales -25.443061
## Duración.promedio.por.sesión..min. 246.197245
## Nivel.de.satisfacción..1.10. -8.749388
## Nivel.de.estrés..1.10. -6.105306
## Nivel.de.satisfacción..1.10.
## Edad 4.2636735
## Horas.de.uso.semanal -3.3235918
## Sesiones.semanales -5.5910204
## Duración.promedio.por.sesión..min. -8.7493878
## Nivel.de.satisfacción..1.10. 5.3485714
## Nivel.de.estrés..1.10. 0.2497959
## Nivel.de.estrés..1.10.
## Edad -2.4334694
## Horas.de.uso.semanal -3.6013878
## Sesiones.semanales -1.5689796
## Duración.promedio.por.sesión..min. -6.1053061
## Nivel.de.satisfacción..1.10. 0.2497959
## Nivel.de.estrés..1.10. 7.6065306
Matriz de correlación
vars <- c("Edad",
"Horas de uso semanal",
"Sesiones semanales",
"Duración promedio por sesión (min)",
"Nivel de satisfacción (1-10)",
"Nivel de estrés (1-10)")
datos_numericos <- datos[vars]
datos_numericos <- as.data.frame(lapply(datos_numericos, as.numeric))
matriz_correlacion <- cor(datos_numericos, use = "complete.obs")
print(matriz_correlacion)
## Edad Horas.de.uso.semanal
## Edad 1.00000000 -0.02326794
## Horas.de.uso.semanal -0.02326794 1.00000000
## Sesiones.semanales -0.22534911 0.51783224
## Duración.promedio.por.sesión..min. 0.06444130 0.28069711
## Nivel.de.satisfacción..1.10. 0.17583548 -0.21145116
## Nivel.de.estrés..1.10. -0.08415386 -0.19213119
## Sesiones.semanales
## Edad -0.2253491
## Horas.de.uso.semanal 0.5178322
## Sesiones.semanales 1.0000000
## Duración.promedio.por.sesión..min. -0.1494039
## Nivel.de.satisfacción..1.10. -0.2227441
## Nivel.de.estrés..1.10. -0.0524153
## Duración.promedio.por.sesión..min.
## Edad 0.0644413
## Horas.de.uso.semanal 0.2806971
## Sesiones.semanales -0.1494039
## Duración.promedio.por.sesión..min. 1.0000000
## Nivel.de.satisfacción..1.10. -0.2411111
## Nivel.de.estrés..1.10. -0.1410823
## Nivel.de.satisfacción..1.10.
## Edad 0.17583548
## Horas.de.uso.semanal -0.21145116
## Sesiones.semanales -0.22274415
## Duración.promedio.por.sesión..min. -0.24111108
## Nivel.de.satisfacción..1.10. 1.00000000
## Nivel.de.estrés..1.10. 0.03916275
## Nivel.de.estrés..1.10.
## Edad -0.08415386
## Horas.de.uso.semanal -0.19213119
## Sesiones.semanales -0.05241530
## Duración.promedio.por.sesión..min. -0.14108230
## Nivel.de.satisfacción..1.10. 0.03916275
## Nivel.de.estrés..1.10. 1.00000000
Matriz de correlación
# Seleccionar variables numéricas
vars_numericas <- c("Edad",
"Horas de uso semanal",
"Sesiones semanales",
"Duración promedio por sesión (min)",
"Nivel de satisfacción (1-10)",
"Nivel de estrés (1-10)")
# Filtrar datos completos
datos_numericos <- na.omit(datos[, vars_numericas])
# Función personalizada para la diagonal con boxplot
my_diag_box <- function(data, mapping, ...) {
ggplot(data = data, mapping = mapping) +
geom_boxplot(fill = "skyblue", color = "black", ...)
}
# Crear matriz de gráficos con boxplot en la diagonal
ggpairs(datos_numericos,
diag = list(continuous = my_diag_box),
upper = list(continuous = wrap("cor", size = 4)),
lower = list(continuous = wrap("points", alpha = 0.5, color = "palegreen4")))

Analisis - kernelS
# Variables numéricas que nos interesan
vars <- c("Edad",
"Horas de uso semanal",
"Sesiones semanales",
"Duración promedio por sesión (min)",
"Nivel de satisfacción (1-10)",
"Nivel de estrés (1-10)")
# Convertir a numéricas por si acaso
datos[vars] <- lapply(datos[vars], as.numeric)
# Extraer la fila 15
registro15 <- datos[15, ]
# Estimar la densidad kernel univariada en cada valor
for (v in vars) {
x <- datos[[v]]
punto <- registro15[[v]]
cat("\n--- Variable:", v, "---\n")
# Kernel rectangular
d_rect <- density(x, kernel = "rectangular")
valor_rect <- approx(d_rect$x, d_rect$y, xout = punto)$y
cat("Densidad (kernel rectangular):", valor_rect, "\n")
# Kernel triangular
d_tri <- density(x, kernel = "triangular")
valor_tri <- approx(d_tri$x, d_tri$y, xout = punto)$y
cat("Densidad (kernel triangular):", valor_tri, "\n")
# Kernel gaussiano
d_gauss <- density(x, kernel = "gaussian")
valor_gauss <- approx(d_gauss$x, d_gauss$y, xout = punto)$y
cat("Densidad (kernel gaussiano):", valor_gauss, "\n")
}
##
## --- Variable: Edad ---
## Densidad (kernel rectangular): 0.02542061
## Densidad (kernel triangular): 0.02798517
## Densidad (kernel gaussiano): 0.02737473
##
## --- Variable: Horas de uso semanal ---
## Densidad (kernel rectangular): 0.1184507
## Densidad (kernel triangular): 0.1307555
## Densidad (kernel gaussiano): 0.1321494
##
## --- Variable: Sesiones semanales ---
## Densidad (kernel rectangular): 0.04830148
## Densidad (kernel triangular): 0.04569737
## Densidad (kernel gaussiano): 0.04558015
##
## --- Variable: Duración promedio por sesión (min) ---
## Densidad (kernel rectangular): 0.07323528
## Densidad (kernel triangular): 0.08030916
## Densidad (kernel gaussiano): 0.08074128
##
## --- Variable: Nivel de satisfacción (1-10) ---
## Densidad (kernel rectangular): 0.1152459
## Densidad (kernel triangular): 0.1353894
## Densidad (kernel gaussiano): 0.1315706
##
## --- Variable: Nivel de estrés (1-10) ---
## Densidad (kernel rectangular): 0.081121
## Densidad (kernel triangular): 0.1035292
## Densidad (kernel gaussiano): 0.1003958
Rostros de chernoff
vars <- c("Edad",
"Horas de uso semanal",
"Sesiones semanales",
"Duración promedio por sesión (min)",
"Nivel de satisfacción (1-10)",
"Nivel de estrés (1-10)")
datos_numericos <- datos[vars]
datos_numericos <- as.data.frame(lapply(datos_numericos, as.numeric))
datos_numericos <- na.omit(datos_numericos)
faces(datos_numericos[1:9, ],
face.type = 1,
labels = paste("ID", 1:9),
main = "Rostros de Chernoff")

## effect of variables:
## modified item Var
## "height of face " "Edad"
## "width of face " "Horas.de.uso.semanal"
## "structure of face" "Sesiones.semanales"
## "height of mouth " "Duración.promedio.por.sesión..min."
## "width of mouth " "Nivel.de.satisfacción..1.10."
## "smiling " "Nivel.de.estrés..1.10."
## "height of eyes " "Edad"
## "width of eyes " "Horas.de.uso.semanal"
## "height of hair " "Sesiones.semanales"
## "width of hair " "Duración.promedio.por.sesión..min."
## "style of hair " "Nivel.de.satisfacción..1.10."
## "height of nose " "Nivel.de.estrés..1.10."
## "width of nose " "Edad"
## "width of ear " "Horas.de.uso.semanal"
## "height of ear " "Sesiones.semanales"
Prueba de bondad
# Convertir a numérico por seguridad
datos$`Horas de uso semanal` <- as.numeric(datos$`Horas de uso semanal`)
# Crear objeto auxiliar
x <- na.omit(datos$`Horas de uso semanal`)
# Ajustar parámetros de distribución normal
media_x <- mean(x)
desv_x <- sd(x)
# Ajustar parámetros de distribución gamma
library(MASS)
##
## Attaching package: 'MASS'
## The following object is masked from 'package:patchwork':
##
## area
## The following object is masked from 'package:dplyr':
##
## select
ajuste_gamma <- fitdistr(x, "gamma")
shape <- ajuste_gamma$estimate["shape"]
rate <- ajuste_gamma$estimate["rate"]
scale <- 1 / rate
# Gráfico
hist(x, freq = FALSE, ylab = "Densidad", xlab = "Horas de uso semanal",
col = "whitesmoke", ylim = c(0, 0.07),
main = "Distribución de frecuencias: Horas de uso semanal")
# Densidad empírica
lines(density(x), col = "#BF3EFF", lwd = 3)
# Curva normal teórica
curve(dnorm(x, mean = media_x, sd = desv_x),
col = "midnightblue", add = TRUE, lwd = 3)
# Curva gamma teórica
curve(dgamma(x, shape = shape, scale = scale),
col = "chocolate", add = TRUE, lwd = 3)
# Leyenda
legend("topright", col = c("#BF3EFF", "midnightblue", "chocolate"),
legend = c("Densidad", "Normal teórica", "Gamma teórica"),
lty = 1, lwd = 3)

x <- na.omit(as.numeric(datos$`Horas de uso semanal`))
ajuste_gamma <- fitdistr(x, densfun = "gamma")
shape <- ajuste_gamma$estimate["shape"]
rate <- ajuste_gamma$estimate["rate"]
ks.test(x, "pgamma", shape = shape, rate = rate)
## Warning in ks.test.default(x, "pgamma", shape = shape, rate = rate): ties
## should not be present for the Kolmogorov-Smirnov test
##
## Asymptotic one-sample Kolmogorov-Smirnov test
##
## data: x
## D = 0.18702, p-value = 0.06053
## alternative hypothesis: two-sided
# Asegurarse de que la variable esté como numérica
datos$`Sesiones semanales` <- as.numeric(datos$`Sesiones semanales`)
# Eliminar NAs
x <- na.omit(datos$`Sesiones semanales`)
# Estimar parámetros normales
media_x <- mean(x)
desv_x <- sd(x)
# Estimar parámetros gamma
library(MASS)
ajuste_gamma <- fitdistr(x, densfun = "gamma")
shape <- ajuste_gamma$estimate["shape"]
rate <- ajuste_gamma$estimate["rate"]
scale <- 1 / rate
# Graficar histograma + curvas
hist(x, freq = FALSE, ylab = "Densidad", xlab = "Sesiones semanales",
col = "whitesmoke", ylim = c(0, 0.06),
main = "Distribución de frecuencias: Sesiones semanales")
# Densidad empírica
lines(density(x), col = "#BF3EFF", lwd = 3)
# Curva normal teórica
curve(dnorm(x, mean = media_x, sd = desv_x),
col = "midnightblue", add = TRUE, lwd = 3)
# Curva gamma teórica
curve(dgamma(x, shape = shape, scale = scale),
col = "chocolate", add = TRUE, lwd = 3)
# Leyenda
legend("topright", col = c("#BF3EFF", "midnightblue", "chocolate"),
legend = c("Densidad", "Normal teórica", "Gamma teórica"),
lty = 1, lwd = 3)

x <- na.omit(as.numeric(datos$`Sesiones semanales`))
ajuste_gamma <- fitdistr(x, densfun = "gamma")
shape <- ajuste_gamma$estimate["shape"]
rate <- ajuste_gamma$estimate["rate"]
ks.test(x, "pgamma", shape = shape, rate = rate)
## Warning in ks.test.default(x, "pgamma", shape = shape, rate = rate): ties
## should not be present for the Kolmogorov-Smirnov test
##
## Asymptotic one-sample Kolmogorov-Smirnov test
##
## data: x
## D = 0.16247, p-value = 0.1427
## alternative hypothesis: two-sided
# Asegurar que sea numérica
datos$`Nivel de satisfacción (1-10)` <- as.numeric(datos$`Nivel de satisfacción (1-10)`)
# Eliminar NAs
x <- na.omit(datos$`Nivel de satisfacción (1-10)`)
# Estimar parámetros normales
media_x <- mean(x)
desv_x <- sd(x)
# Estimar parámetros gamma
library(MASS)
ajuste_gamma <- fitdistr(x, densfun = "gamma")
## Warning in densfun(x, parm[1], parm[2], ...): NaNs produced
shape <- ajuste_gamma$estimate["shape"]
rate <- ajuste_gamma$estimate["rate"]
scale <- 1 / rate
# Graficar
hist(x, freq = FALSE, ylab = "Densidad", xlab = "Nivel de satisfacción (1-10)",
col = "whitesmoke", ylim = c(0, 0.3),
main = "Distribución de frecuencias: Nivel de satisfacción")
# Densidad empírica
lines(density(x), col = "#BF3EFF", lwd = 3)
# Curva normal
curve(dnorm(x, mean = media_x, sd = desv_x),
col = "midnightblue", add = TRUE, lwd = 3)
# Curva gamma
curve(dgamma(x, shape = shape, scale = scale),
col = "chocolate", add = TRUE, lwd = 3)
# Leyenda
legend("topright", col = c("#BF3EFF", "midnightblue", "chocolate"),
legend = c("Densidad", "Normal teórica", "Gamma teórica"),
lty = 1, lwd = 3)

x <- na.omit(as.numeric(datos$`Nivel de satisfacción (1-10)`))
media_x <- mean(x)
desv_x <- sd(x)
ks.test(x, "pnorm", mean = media_x, sd = desv_x)
## Warning in ks.test.default(x, "pnorm", mean = media_x, sd = desv_x): ties
## should not be present for the Kolmogorov-Smirnov test
##
## Asymptotic one-sample Kolmogorov-Smirnov test
##
## data: x
## D = 0.16023, p-value = 0.1534
## alternative hypothesis: two-sided
# Instalar librería si no la tienes
# install.packages("fitdistrplus")
# Cargar librería
library(fitdistrplus)
## Loading required package: survival
# 1: Femenino (14), 2: Masculino (12), 3: No binario (11), 4: Prefiere no decir (13)
x <- c(rep(1,14), rep(2,12), rep(3,11), rep(4,13))
media <- mean(x)
desv <- sd(x)
ajuste_gamma <- fitdist(x, "gamma", method = "mme")
forma <- ajuste_gamma$estimate["shape"]
tasa <- ajuste_gamma$estimate["rate"]
hist(x, freq=FALSE, ylab="Densidad", col="whitesmoke", ylim=c(0,0.5),
main="Distribución de frecuencias de Género", xlab="Categorías codificadas")
lines(density(x), col="#BF3EFF", lwd=3)
curve(dnorm(x, mean=media, sd=desv), from=0.5, to=4.5, col="midnightblue", add=TRUE, lwd=3)
curve(dgamma(x, shape=forma, rate=tasa), from=0.5, to=4.5, col="chocolate", add=TRUE, lwd=3)
legend("topright", col=c("#BF3EFF", "midnightblue", "chocolate"),
legend=c("Densidad", "Normal teórica", "Gamma teórica"), lty=1, lwd=3)

x <- c(rep(1, 14), rep(2, 12), rep(3, 11), rep(4, 13)) # Codificación de género
media_x <- mean(x)
desv_x <- sd(x)
ks.test(x, "pnorm", mean = media_x, sd = desv_x)
## Warning in ks.test.default(x, "pnorm", mean = media_x, sd = desv_x): ties
## should not be present for the Kolmogorov-Smirnov test
##
## Asymptotic one-sample Kolmogorov-Smirnov test
##
## data: x
## D = 0.17508, p-value = 0.09327
## alternative hypothesis: two-sided
frecuencias <- c(21, 15, 14) # Alta, Baja, Media
categorias <- c(1, 2, 3) # Codificación numérica
x <- rep(categorias, frecuencias) # Vector con los datos repetidos según frecuencia
media_x <- mean(x)
desv_x <- sd(x)
ajuste_gamma <- MASS::fitdistr(x, densfun = "gamma")
shape <- ajuste_gamma$estimate["shape"]
rate <- ajuste_gamma$estimate["rate"]
scale <- 1 / rate
hist(x, freq = FALSE, ylab = "Densidad", col = "whitesmoke",
ylim = c(0, 0.6), main = "Distribución de frecuencias de Frecuencia de uso de herramientas",
xlab = "Categorías codificadas (1=Alta, 2=Baja, 3=Media)")
lines(density(x), col = "#BF3EFF", lwd = 3) # Densidad empírica
curve(dnorm(x, mean = media_x, sd = desv_x), from = 0.5, to = 3.5, col = "midnightblue", add = TRUE, lwd = 3)
curve(dgamma(x, shape = shape, scale = scale), from = 0.5, to = 3.5, col = "chocolate", add = TRUE, lwd = 3)
legend("topright",
col = c("#BF3EFF", "midnightblue", "chocolate"),
legend = c("Densidad", "Normal teórica", "Gamma teórica"),
lty = 1, lwd = 3)

frecuencias <- c(21, 15, 14)
codigos <- c(1, 2, 3)
x_cat <- rep(codigos, frecuencias)
set.seed(123) # Para reproducibilidad
x <- jitter(x_cat, amount = 0.2)
ks.test(x, "pnorm", mean = mean(x), sd = sd(x))
##
## Exact one-sample Kolmogorov-Smirnov test
##
## data: x
## D = 0.22153, p-value = 0.01232
## alternative hypothesis: two-sided
Prueba de hipotesis
# Filtrar grupo de estudiantes y convertir la variable a numérica
estudiantes <- datos[datos$Ocupación == "Estudiante", ]
x <- as.numeric(trimws(estudiantes$`Nivel de satisfacción (1-10)`))
x <- na.omit(x)
# Ver cantidad de datos
length(x)
## [1] 8
# Prueba t de una muestra (media hipotética = 7)
t.test(x, mu = 7, alternative = "two.sided")
##
## One Sample t-test
##
## data: x
## t = -0.8557, df = 7, p-value = 0.4205
## alternative hypothesis: true mean is not equal to 7
## 95 percent confidence interval:
## 4.647882 8.102118
## sample estimates:
## mean of x
## 6.375
estudiantes <- datos[datos$Ocupación == "Estudiante", ]
x <- as.numeric(trimws(estudiantes$`Nivel de satisfacción (1-10)`))
x <- na.omit(x)
profesionales <- datos[datos$Ocupación == "Profesional", ]
y <- as.numeric(trimws(profesionales$`Nivel de satisfacción (1-10)`))
y <- na.omit(y)
length(x) # estudiantes
## [1] 8
length(y) # profesionales
## [1] 16
t.test(x, y, alternative = "two.sided", var.equal = FALSE)
##
## Welch Two Sample t-test
##
## data: x and y
## t = 0.063641, df = 17.537, p-value = 0.95
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -2.004671 2.129671
## sample estimates:
## mean of x mean of y
## 6.3750 6.3125
estudiantes <- datos[datos$Ocupación == "Estudiante", ]
x <- as.numeric(trimws(estudiantes$`Nivel de satisfacción (1-10)`))
x <- na.omit(x)
satisfechos <- sum(x >= 7)
n <- length(x)
prop.test(satisfechos, n, p = 0.5, alternative = "greater", correct = FALSE)
## Warning in prop.test(satisfechos, n, p = 0.5, alternative = "greater", correct
## = FALSE): Chi-squared approximation may be incorrect
##
## 1-sample proportions test without continuity correction
##
## data: satisfechos out of n, null probability 0.5
## X-squared = 0, df = 1, p-value = 0.5
## alternative hypothesis: true p is greater than 0.5
## 95 percent confidence interval:
## 0.2486419 1.0000000
## sample estimates:
## p
## 0.5
# Convertir a numérico la variable de interés (por si hay problemas con formato)
x <- as.numeric(trimws(grupo_b$`Nivel de satisfacción (1-10)`))
x <- na.omit(x)
# Ver número de observaciones y la varianza muestral
length(x)
## [1] 12
var(x)
## [1] 6.931818
# Prueba de hipótesis para una varianza
# H0: varianza = 2
# H1: varianza ≠ 2
n <- length(x)
s2 <- var(x)
var_hipotetica <- 2
# Estadístico de prueba
estadistico <- (n - 1) * s2 / var_hipotetica
# p-valor bilateral
p_valor <- 2 * min(pchisq(estadistico, df = n - 1), 1 - pchisq(estadistico, df = n - 1))
# Intervalo de confianza para la varianza (95%)
LI <- (n - 1) * s2 / qchisq(0.975, df = n - 1)
LS <- (n - 1) * s2 / qchisq(0.025, df = n - 1)
# Resultados
cat("Estadístico de prueba: ", estadistico, "\n")
## Estadístico de prueba: 38.125
cat("p-valor: ", p_valor, "\n")
## p-valor: 0.0001490506
cat("Intervalo de confianza 95% para la varianza: [", LI, ", ", LS, "]\n")
## Intervalo de confianza 95% para la varianza: [ 3.478551 , 19.98297 ]
grupo_b <- subset(datos, `Nivel de estrés (1-10)` >= 8)
grupo_b <- na.omit(grupo_b[, c("Horas de uso semanal", "Duración promedio por sesión (min)")])
resultado <- var.test(grupo_b$`Horas de uso semanal`,
grupo_b$`Duración promedio por sesión (min)`)
print(resultado)
##
## F test to compare two variances
##
## data: grupo_b$`Horas de uso semanal` and grupo_b$`Duración promedio por sesión (min)`
## F = 0.56399, num df = 11, denom df = 11, p-value = 0.3563
## alternative hypothesis: true ratio of variances is not equal to 1
## 95 percent confidence interval:
## 0.16236 1.95913
## sample estimates:
## ratio of variances
## 0.5639897
grupo_b <- subset(datos, `Nivel de estrés (1-10)` >= 8)
grupo_b$Frecuencia_binaria <- ifelse(grupo_b$`Frecuencia uso herramientas` == "Alta", "Alta", "No Alta")
grupo_b_genero <- subset(grupo_b, Género %in% c("Masculino", "Femenino"))
tabla <- table(grupo_b_genero$Género, grupo_b_genero$Frecuencia_binaria)
print(tabla)
##
## Alta No Alta
## Femenino 1 1
## Masculino 0 3
# Femenino: 1 éxito (Alta), 2 casos en total
# Masculino: 0 éxitos (Alta), 3 casos en total
x <- c(1, 0) # número de éxitos (Alta)
n <- c(2, 3) # número de observaciones por grupo
resultado <- prop.test(x = x, n = n, alternative = "two.sided", correct = FALSE)
## Warning in prop.test(x = x, n = n, alternative = "two.sided", correct = FALSE):
## Chi-squared approximation may be incorrect
print(resultado)
##
## 2-sample test for equality of proportions without continuity correction
##
## data: x out of n
## X-squared = 1.875, df = 1, p-value = 0.1709
## alternative hypothesis: two.sided
## 95 percent confidence interval:
## -0.1929519 1.0000000
## sample estimates:
## prop 1 prop 2
## 0.5 0.0
grupo_c <- subset(datos, `Horas de uso semanal` >= 10)
grupo_c_pareado <- na.omit(grupo_c[, c("Nivel de satisfacción (1-10)", "Nivel de estrés (1-10)")])
satisfaccion <- grupo_c_pareado$`Nivel de satisfacción (1-10)`
estres <- grupo_c_pareado$`Nivel de estrés (1-10)`
resultado <- t.test(satisfaccion, estres, paired = TRUE, alternative = "two.sided")
print(resultado)
##
## Paired t-test
##
## data: satisfaccion and estres
## t = 2.5389, df = 22, p-value = 0.01871
## alternative hypothesis: true mean difference is not equal to 0
## 95 percent confidence interval:
## 0.3663022 3.6336978
## sample estimates:
## mean difference
## 2
Regresion lineal
# Y: Nivel de satisfacción
# X: Nivel de estrés, Horas de uso semanal, Duración promedio por sesión
modelo_datos <- na.omit(datos[, c("Nivel de satisfacción (1-10)",
"Nivel de estrés (1-10)",
"Horas de uso semanal",
"Duración promedio por sesión (min)")])
# Ajustar el modelo de regresión lineal
modelo <- lm(`Nivel de satisfacción (1-10)` ~
`Nivel de estrés (1-10)` +
`Horas de uso semanal` +
`Duración promedio por sesión (min)`,
data = modelo_datos)
# Mostrar resumen del modelo
summary(modelo)
##
## Call:
## lm(formula = `Nivel de satisfacción (1-10)` ~ `Nivel de estrés (1-10)` +
## `Horas de uso semanal` + `Duración promedio por sesión (min)`,
## data = modelo_datos)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.6970 -2.0724 -0.0024 2.0863 3.4602
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 7.84659 0.97182 8.074 2.3e-10 ***
## `Nivel de estrés (1-10)` -0.01639 0.12130 -0.135 0.893
## `Horas de uso semanal` -0.05421 0.05077 -1.068 0.291
## `Duración promedio por sesión (min)` -0.02935 0.02180 -1.346 0.185
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.288 on 46 degrees of freedom
## Multiple R-squared: 0.08094, Adjusted R-squared: 0.021
## F-statistic: 1.35 on 3 and 46 DF, p-value: 0.2698