En el siguiente documento se proporciona un ejemplo de cómo puede hacerse el análisis descriptivo de los datos. No se pondrá pregunta de investigación y se seleecionarán variables sin un objetivo particular, pero te servirá para poder adentrarte en la base y hacer el análisis descriptivo de tus variables de interés acordes con tu pregunta de investigación.
Se ejemplificará con dos variables, una cuantitativa y otra cualitativa y con la evolución a través de los años.
# 1. Carga de las bases de datos originales (Asegúrate que los nombres coincidan con tus archivos)
M23 = read.csv("Datos_molec_2023-1.CSV")
M24 = read.csv("Datos_molec_2024-1.csv")
# 2. Definición de los NEMÓNICOS de las 9 variables seleccionadas:
# edad, p3_1 (Libros), p3_3 (Periódicos), p3_5 (Internet)
# p4 (Cantidad Libros), p10 (Cantidad Revistas)
# p16 (No Lee Gral), p17 (No Lee Rev), p18_1 (No Lee Per)
variables_elegidas = c("edad", "p3_1", "p3_3", "p3_5", "p4", "p10", "p16", "p17", "p18_1")
# Paso 1: Crear el subconjunto inicial solo con las 9 variables
M23_sub = M23[, variables_elegidas]
# Paso 2: Aplicar filtros de exclusión (Códigos de omisión/error)
M23_limpia = subset(M23_sub,
edad != 99 &
p4 != 999 &
p10 != 999 &
p16 != 99 &
p17 != 99 &
p18_1 != 99)
# Paso 3: Eliminar filas con cualquier NA restante
M23_limpia = na.omit(M23_limpia)
# Revisión final de la base de 2023 limpia
cat("Estructura de la base 2023 limpia:\n")
## Estructura de la base 2023 limpia:
str(M23_limpia)
## 'data.frame': 1996 obs. of 9 variables:
## $ edad : int 29 53 65 44 52 36 74 53 23 57 ...
## $ p3_1 : int 2 2 2 2 2 2 1 2 1 2 ...
## $ p3_3 : int 2 1 2 2 2 2 2 2 2 2 ...
## $ p3_5 : int 2 2 2 2 1 2 2 1 1 2 ...
## $ p4 : int 0 0 0 0 0 0 2 0 3 0 ...
## $ p10 : int 0 0 0 0 0 0 0 0 0 0 ...
## $ p16 : int 0 1 0 0 0 0 0 0 0 0 ...
## $ p17 : int 0 4 0 0 0 0 0 0 0 0 ...
## $ p18_1: int 0 1 0 0 0 0 0 0 0 0 ...
cat("\nResumen de la base 2023 limpia (se busca que no haya NAs y las exclusiones se hayan aplicado):\n")
##
## Resumen de la base 2023 limpia (se busca que no haya NAs y las exclusiones se hayan aplicado):
summary(M23_limpia)
edad | p3_1 | p3_3 | p3_5 | p4 | p10 | p16 | p17 | p18_1 | |
---|---|---|---|---|---|---|---|---|---|
Min. :18.00 | Min. :0.000 | Min. :0.000 | Min. :0.00 | Min. : 0.000 | Min. : 0.000 | Min. : 0.0000 | Min. :0.0000 | Min. :0.0000 | |
1st Qu.:32.00 | 1st Qu.:1.000 | 1st Qu.:2.000 | 1st Qu.:1.00 | 1st Qu.: 0.000 | 1st Qu.: 0.000 | 1st Qu.: 0.0000 | 1st Qu.:0.0000 | 1st Qu.:0.0000 | |
Median :45.00 | Median :2.000 | Median :2.000 | Median :2.00 | Median : 0.000 | Median : 0.000 | Median : 0.0000 | Median :0.0000 | Median :0.0000 | |
Mean :46.21 | Mean :1.565 | Mean :1.784 | Mean :1.61 | Mean : 1.381 | Mean : 0.756 | Mean : 0.5792 | Mean :0.5842 | Mean :0.2244 | |
3rd Qu.:59.00 | 3rd Qu.:2.000 | 3rd Qu.:2.000 | 3rd Qu.:2.00 | 3rd Qu.: 2.000 | 3rd Qu.: 0.000 | 3rd Qu.: 0.0000 | 3rd Qu.:0.0000 | 3rd Qu.:0.0000 | |
Max. :97.00 | Max. :2.000 | Max. :2.000 | Max. :2.00 | Max. :80.000 | Max. :70.000 | Max. :50.0000 | Max. :6.0000 | Max. :2.0000 |
# Paso 4: Guardar la base limpia de 2023
write.csv(x=M23_limpia, file="BaseLimpia_2023.csv", row.names=FALSE)
cat("\nLa base limpia y reducida de 2023 ha sido guardada como 'BaseLimpia_2023.csv'.\n")
##
## La base limpia y reducida de 2023 ha sido guardada como 'BaseLimpia_2023.csv'.
# Crear la base limpia de 2024 con el mismo proceso
M24_sub = M24[, variables_elegidas]
# Aplicar filtros de exclusión para 2024
M24_limpia = subset(M24_sub,
edad != 99 &
p4 != 999 &
p10 != 999 &
p16 != 99 &
p17 != 99 &
p18_1 != 99)
# Eliminar filas con cualquier NA restante
M24_limpia = na.omit(M24_limpia)
# Revisión final de la base de 2024 limpia
cat("Estructura de la base 2024 limpia:\n")
## Estructura de la base 2024 limpia:
str(M24_limpia)
## 'data.frame': 2016 obs. of 9 variables:
## $ edad : int 52 55 59 30 54 30 66 45 26 41 ...
## $ p3_1 : int 2 2 2 2 2 2 2 2 2 2 ...
## $ p3_3 : int 2 2 2 2 1 2 2 2 1 2 ...
## $ p3_5 : int 2 2 2 2 2 1 2 2 1 1 ...
## $ p4 : int 0 0 0 0 0 0 0 0 0 0 ...
## $ p10 : int 0 0 0 0 0 0 0 0 2 0 ...
## $ p16 : int 0 0 0 0 1 0 0 0 1 0 ...
## $ p17 : int 0 0 0 0 4 0 0 0 4 0 ...
## $ p18_1: int 0 0 0 0 1 0 0 0 1 0 ...
cat("\nResumen de la base 2024 limpia:\n")
##
## Resumen de la base 2024 limpia:
summary(M24_limpia)
edad | p3_1 | p3_3 | p3_5 | p4 | p10 | p16 | p17 | p18_1 | |
---|---|---|---|---|---|---|---|---|---|
Min. :18.00 | Min. :0.000 | Min. :0.000 | Min. :0.000 | Min. : 0.000 | Min. : 0.0000 | Min. : 0.0000 | Min. :0.0000 | Min. :0.0000 | |
1st Qu.:33.00 | 1st Qu.:1.000 | 1st Qu.:2.000 | 1st Qu.:1.000 | 1st Qu.: 0.000 | 1st Qu.: 0.0000 | 1st Qu.: 0.0000 | 1st Qu.:0.0000 | 1st Qu.:0.0000 | |
Median :46.00 | Median :2.000 | Median :2.000 | Median :2.000 | Median : 0.000 | Median : 0.0000 | Median : 0.0000 | Median :0.0000 | Median :0.0000 | |
Mean :46.49 | Mean :1.552 | Mean :1.781 | Mean :1.588 | Mean : 1.275 | Mean : 0.6349 | Mean : 0.5749 | Mean :0.5794 | Mean :0.2163 | |
3rd Qu.:59.00 | 3rd Qu.:2.000 | 3rd Qu.:2.000 | 3rd Qu.:2.000 | 3rd Qu.: 2.000 | 3rd Qu.: 0.0000 | 3rd Qu.: 0.0000 | 3rd Qu.:0.0000 | 3rd Qu.:0.0000 | |
Max. :94.00 | Max. :2.000 | Max. :2.000 | Max. :2.000 | Max. :70.000 | Max. :25.0000 | Max. :60.0000 | Max. :6.0000 | Max. :2.0000 |
# Guardar la base limpia de 2024
write.csv(x=M24_limpia, file="BaseLimpia_2024.csv", row.names=FALSE)
cat("\nLa base limpia y reducida de 2024 ha sido guardada como 'BaseLimpia_2024.csv'.\n")
##
## La base limpia y reducida de 2024 ha sido guardada como 'BaseLimpia_2024.csv'.
Datos_2023 = read.csv("BaseLimpia_2023.csv")
Datos_2024 = read.csv("BaseLimpia_2024.csv")
Para las medidas de forma (sesgo y curtosis), se requiere la biblioteca e1071, instálala en el menú superior: Tools/install Packages
library(e1071)
# Medidas descriptivas completas para libros leídos (p4)
# 2023
d23 = c(as.numeric(summary(M23_limpia[,5])),
(max(M23_limpia[ ,5])-min(M23_limpia[ ,5]))/2,
sd(M23_limpia[ ,5]),
mean(M23_limpia[ ,5])/sd(M23_limpia[ ,5]),
skewness(M23_limpia[ ,5]),
kurtosis(M23_limpia[ ,5]))
# 2024
d24 = c(as.numeric(summary(M24_limpia[,5])),
(max(M24_limpia[ ,5])-min(M24_limpia[ ,5]))/2,
sd(M24_limpia[ ,5]),
mean(M24_limpia[ ,5])/sd(M24_limpia[ ,5]),
skewness(M24_limpia[ ,5]),
kurtosis(M24_limpia[ ,5]))
# Tabla comparativa
m = data.frame(d23, d24)
names(m) = c("2023","2024")
row.names(m) = c("Minimo","Q1","Mediana","Media","Q3","Máximo","Rango Medio", "Desv Est", "CV", "Sesgo", "Curtosis")
round(m,2)
2023 | 2024 | |
---|---|---|
Minimo | 0.00 | 0.00 |
Q1 | 0.00 | 0.00 |
Mediana | 0.00 | 0.00 |
Media | 1.38 | 1.27 |
Q3 | 2.00 | 2.00 |
Máximo | 80.00 | 70.00 |
Rango Medio | 40.00 | 35.00 |
Desv Est | 4.04 | 3.26 |
CV | 0.34 | 0.39 |
Sesgo | 11.06 | 9.38 |
Curtosis | 171.66 | 143.56 |
# Medidas descriptivas para edad
# 2023
edad23 = c(as.numeric(summary(M23_limpia[,1])),
(max(M23_limpia[ ,1])-min(M23_limpia[ ,1]))/2,
sd(M23_limpia[ ,1]),
mean(M23_limpia[ ,1])/sd(M23_limpia[ ,1]),
skewness(M23_limpia[ ,1]),
kurtosis(M23_limpia[ ,1]))
# 2024
edad24 = c(as.numeric(summary(M24_limpia[,1])),
(max(M24_limpia[ ,1])-min(M24_limpia[ ,1]))/2,
sd(M24_limpia[ ,1]),
mean(M24_limpia[ ,1])/sd(M24_limpia[ ,1]),
skewness(M24_limpia[ ,1]),
kurtosis(M24_limpia[ ,1]))
# Tabla comparativa para edad
edad_tabla = data.frame(edad23, edad24)
names(edad_tabla) = c("2023","2024")
row.names(edad_tabla) = c("Minimo","Q1","Mediana","Media","Q3","Máximo","Rango Medio", "Desv Est", "CV", "Sesgo", "Curtosis")
round(edad_tabla,2)
2023 | 2024 | |
---|---|---|
Minimo | 18.00 | 18.00 |
Q1 | 32.00 | 33.00 |
Mediana | 45.00 | 46.00 |
Media | 46.21 | 46.49 |
Q3 | 59.00 | 59.00 |
Máximo | 97.00 | 94.00 |
Rango Medio | 39.50 | 38.00 |
Desv Est | 16.63 | 16.76 |
CV | 2.78 | 2.77 |
Sesgo | 0.26 | 0.27 |
Curtosis | -0.82 | -0.81 |
# Medidas descriptivas para revistas leídas
# 2023
rev23 = c(as.numeric(summary(M23_limpia[,6])),
(max(M23_limpia[ ,6])-min(M23_limpia[ ,6]))/2,
sd(M23_limpia[ ,6]),
mean(M23_limpia[ ,6])/sd(M23_limpia[ ,6]),
skewness(M23_limpia[ ,6]),
kurtosis(M23_limpia[ ,6]))
# 2024
rev24 = c(as.numeric(summary(M24_limpia[,6])),
(max(M24_limpia[ ,6])-min(M24_limpia[ ,6]))/2,
sd(M24_limpia[ ,6]),
mean(M24_limpia[ ,6])/sd(M24_limpia[ ,6]),
skewness(M24_limpia[ ,6]),
kurtosis(M24_limpia[ ,6]))
# Tabla comparativa para revistas
rev_tabla = data.frame(rev23, rev24)
names(rev_tabla) = c("2023","2024")
row.names(rev_tabla) = c("Minimo","Q1","Mediana","Media","Q3","Máximo","Rango Medio", "Desv Est", "CV", "Sesgo", "Curtosis")
round(rev_tabla,2)
2023 | 2024 | |
---|---|---|
Minimo | 0.00 | 0.00 |
Q1 | 0.00 | 0.00 |
Mediana | 0.00 | 0.00 |
Media | 0.76 | 0.63 |
Q3 | 0.00 | 0.00 |
Máximo | 70.00 | 25.00 |
Rango Medio | 35.00 | 12.50 |
Desv Est | 2.73 | 1.70 |
CV | 0.28 | 0.37 |
Sesgo | 14.68 | 5.30 |
Curtosis | 323.03 | 45.63 |
# Análisis de correlación entre variables cuantitativas
# Crear matriz de correlación para 2023
correlacion_2023 = cor(M23_limpia[,c(1,5,6)], use="complete.obs")
print("Matriz de correlación 2023:")
## [1] "Matriz de correlación 2023:"
round(correlacion_2023, 3)
edad | p4 | p10 | |
---|---|---|---|
edad | 1.000 | -0.112 | -0.029 |
p4 | -0.112 | 1.000 | 0.150 |
p10 | -0.029 | 0.150 | 1.000 |
# Crear matriz de correlación para 2024
correlacion_2024 = cor(M24_limpia[,c(1,5,6)], use="complete.obs")
print("Matriz de correlación 2024:")
## [1] "Matriz de correlación 2024:"
round(correlacion_2024, 3)
edad | p4 | p10 | |
---|---|---|---|
edad | 1.000 | -0.116 | -0.029 |
p4 | -0.116 | 1.000 | 0.220 |
p10 | -0.029 | 0.220 | 1.000 |
# Gráfico de correlación
library(corrplot)
## Warning: package 'corrplot' was built under R version 4.4.3
## corrplot 0.95 loaded
par(mfrow=c(1,2))
corrplot(correlacion_2023, method="color", type="upper",
title="Correlaciones 2023", mar=c(0,0,1,0))
corrplot(correlacion_2024, method="color", type="upper",
title="Correlaciones 2024", mar=c(0,0,1,0))
Gráfico de Caja y bigote - Análisis de Outliers
Para poder comparar fácilmente los años, se pone la misma escala en todos los gráficos. Los boxplots permiten identificar valores atípicos (outliers) y analizar la distribución de los datos.
colores = rainbow(2)
par(mfrow=c(1,2), cex.lab=0.8, cex.main=0.8)
# Boxplots para libros leídos
boxplot(M23_limpia[,5],
col = colores[1],
horizontal = TRUE,
main = "Número de libros leídos \n 2023",
ylim=c(0,100),
xlab="Número de libros")
boxplot(M24_limpia[,5],
col = colores[2],
horizontal = TRUE,
main = "Número de libros leídos \n 2024",
ylim=c(0,100),
xlab="Número de libros")
Boxplots para Edad
par(mfrow=c(1,2), cex.lab=0.8, cex.main=0.8)
boxplot(M23_limpia[,1],
col = colores[1],
horizontal = TRUE,
main = "Edad \n 2023",
xlab="Edad")
boxplot(M24_limpia[,1],
col = colores[2],
horizontal = TRUE,
main = "Edad \n 2024",
xlab="Edad")
Boxplots para Revistas
par(mfrow=c(1,2), cex.lab=0.8, cex.main=0.8)
boxplot(M23_limpia[,6],
col = colores[1],
horizontal = TRUE,
main = "Número de revistas leídas \n 2023",
xlab="Número de revistas")
boxplot(M24_limpia[,6],
col = colores[2],
horizontal = TRUE,
main = "Número de revistas leídas \n 2024",
xlab="Número de revistas")
Histogramas - Análisis de Distribución
Los histogramas permiten analizar la forma de la distribución de los datos, identificar si es simétrica o asimétrica, y ver dónde se concentran más los datos.
# Histogramas para libros leídos
par(mfrow=c(1,2))
hist(M23_limpia[,5], col = colores[1], main = "Distribución de libros leídos \n 2023",
xlab="Número de libros", ylab="Frecuencia", breaks=20)
hist(M24_limpia[,5], col = colores[2], main = "Distribución de libros leídos \n 2024",
xlab="Número de libros", ylab="Frecuencia", breaks=20)
Histogramas para Edad
par(mfrow=c(1,2))
hist(M23_limpia[,1], col = colores[1], main = "Distribución de edad \n 2023",
xlab="Edad", ylab="Frecuencia", breaks=15)
hist(M24_limpia[,1], col = colores[2], main = "Distribución de edad \n 2024",
xlab="Edad", ylab="Frecuencia", breaks=15)
Histogramas para Revistas
par(mfrow=c(1,2))
hist(M23_limpia[,6], col = colores[1], main = "Distribución de revistas leídas \n 2023",
xlab="Número de revistas", ylab="Frecuencia", breaks=15)
hist(M24_limpia[,6], col = colores[2], main = "Distribución de revistas leídas \n 2024",
xlab="Número de revistas", ylab="Frecuencia", breaks=15)
Gráficos de Densidad
# Gráficos de densidad para análisis más detallado
par(mfrow=c(1,2))
plot(density(M23_limpia[,5]), main="Densidad de libros leídos \n 2023",
xlab="Número de libros", col="blue", lwd=2)
plot(density(M24_limpia[,5]), main="Densidad de libros leídos \n 2024",
xlab="Número de libros", col="red", lwd=2)
Describe:
NOTA: Las siguientes variables cualitativas están disponibles en los datos limpios: p3_1 (Leyó libros), p3_3 (Leyó periódicos), p3_5 (Leyó páginas de internet), p16 (Motivo para no leer), p17 (Motivo para no leer revistas), p18_1 (Motivo para no leer periódicos).
# Tabla de frecuencia para p3_1 (Leyó libros) - 2023
freq_libros_23 = table(M23_limpia[,2])
prop_libros_23 = prop.table(freq_libros_23)
tabla_libros_23 = cbind(freq_libros_23, prop_libros_23)
colnames(tabla_libros_23) = c("Frecuencia", "Proporción")
print("Leyó libros - 2023:")
## [1] "Leyó libros - 2023:"
round(tabla_libros_23, 3)
Frecuencia | Proporción | |
---|---|---|
0 | 37 | 0.019 |
1 | 795 | 0.398 |
2 | 1164 | 0.583 |
# Tabla de frecuencia para p3_1 (Leyó libros) - 2024
freq_libros_24 = table(M24_limpia[,2])
prop_libros_24 = prop.table(freq_libros_24)
tabla_libros_24 = cbind(freq_libros_24, prop_libros_24)
colnames(tabla_libros_24) = c("Frecuencia", "Proporción")
print("Leyó libros - 2024:")
## [1] "Leyó libros - 2024:"
round(tabla_libros_24, 3)
Frecuencia | Proporción | |
---|---|---|
0 | 47 | 0.023 |
1 | 809 | 0.401 |
2 | 1160 | 0.575 |
prop_libros_23
0 | 1 | 2 |
---|---|---|
0.0185371 | 0.3982966 | 0.5831663 |
# Gráficos de barras para variables de lectura
par(mfrow=c(2,2))
# Gráfico de barras para p3_1 (Leyó libros)
barplot(prop_libros_23, main="Leyó libros - 2023",
col=c("lightblue", "lightcoral"),
names.arg=c("NA", "No", "Sí")
)
barplot(prop_libros_24, main="Leyó libros - 2024",
col=c("lightblue", "lightcoral"),
names.arg=c("NA", "No", "Sí")
)
# Gráficos de pastel
pie(prop_libros_23, main="Leyó libros - 2023",
col=c("lightblue", "lightcoral"),
labels=c("NA", "No", "Sí"))
pie(prop_libros_24, main="Leyó libros - 2024",
col=c("lightblue", "lightcoral"),
labels=c("NA", "No", "Sí"))
# Tabla de frecuencia para p3_3 (Leyó periódicos)
freq_periodicos_23 = table(M23_limpia[,3])
prop_periodicos_23 = prop.table(freq_periodicos_23)
tabla_periodicos_23 = cbind(freq_periodicos_23, prop_periodicos_23)
colnames(tabla_periodicos_23) = c("Frecuencia", "Proporción")
print("Leyó periódicos - 2023:")
## [1] "Leyó periódicos - 2023:"
round(tabla_periodicos_23, 3)
Frecuencia | Proporción | |
---|---|---|
0 | 37 | 0.019 |
1 | 357 | 0.179 |
2 | 1602 | 0.803 |
freq_periodicos_24 = table(M24_limpia[,3])
prop_periodicos_24 = prop.table(freq_periodicos_24)
tabla_periodicos_24 = cbind(freq_periodicos_24, prop_periodicos_24)
colnames(tabla_periodicos_24) = c("Frecuencia", "Proporción")
print("Leyó periódicos - 2024:")
## [1] "Leyó periódicos - 2024:"
round(tabla_periodicos_24, 3)
Frecuencia | Proporción | |
---|---|---|
0 | 47 | 0.023 |
1 | 348 | 0.173 |
2 | 1621 | 0.804 |
# Tabla de frecuencia para p3_5 (Leyó páginas de internet)
freq_internet_23 = table(M23_limpia[,4])
prop_internet_23 = prop.table(freq_internet_23)
tabla_internet_23 = cbind(freq_internet_23, prop_internet_23)
colnames(tabla_internet_23) = c("Frecuencia", "Proporción")
print("Leyó páginas de internet - 2023:")
## [1] "Leyó páginas de internet - 2023:"
round(tabla_internet_23, 3)
Frecuencia | Proporción | |
---|---|---|
0 | 37 | 0.019 |
1 | 705 | 0.353 |
2 | 1254 | 0.628 |
freq_internet_24 = table(M24_limpia[,4])
prop_internet_24 = prop.table(freq_internet_24)
tabla_internet_24 = cbind(freq_internet_24, prop_internet_24)
colnames(tabla_internet_24) = c("Frecuencia", "Proporción")
print("Leyó páginas de internet - 2024:")
## [1] "Leyó páginas de internet - 2024:"
round(tabla_internet_24, 3)
Frecuencia | Proporción | |
---|---|---|
0 | 47 | 0.023 |
1 | 737 | 0.366 |
2 | 1232 | 0.611 |
Describe:
# Boxplots de libros leídos por categoría de lectura
par(mfrow=c(1,2))
boxplot(M23_limpia[,5] ~ M23_limpia[,2],
main="Libros leídos por categoría de lectura \n 2023",
xlab="Leyó libros", ylab="Número de libros",
col=c("lightblue", "lightcoral"))
boxplot(M24_limpia[,5] ~ M24_limpia[,2],
main="Libros leídos por categoría de lectura \n 2024",
xlab="Leyó libros", ylab="Número de libros",
col=c("lightblue", "lightcoral"))
# Análisis de edad por si leyó libros
# 2023
edad_por_lectura_23 = tapply(M23_limpia[,1], M23_limpia[,2], function(x) {
c("Media"=mean(x), "Mediana"=median(x), "Desv Est"=sd(x), "Minimo"=min(x), "Maximo"=max(x))
})
names(edad_por_lectura_23) = c("p3_1: 0 (NA/Omitido)", "p3_1: 1 (NO leyó)", "p3_1: 2 (SÍ leyó)")
print("Edad por categoría de lectura - 2023:")
## [1] "Edad por categoría de lectura - 2023:"
print(edad_por_lectura_23)
## $`p3_1: 0 (NA/Omitido)`
## Media Mediana Desv Est Minimo Maximo
## 63.83784 65.00000 15.87016 18.00000 91.00000
##
## $`p3_1: 1 (NO leyó)`
## Media Mediana Desv Est Minimo Maximo
## 43.69686 41.00000 16.71083 18.00000 88.00000
##
## $`p3_1: 2 (SÍ leyó)`
## Media Mediana Desv Est Minimo Maximo
## 47.37027 47.00000 16.13703 18.00000 97.00000
# 2024
edad_por_lectura_24 = tapply(M24_limpia[,1], M24_limpia[,2], function(x) {
c("Media"=mean(x), "Mediana"=median(x), "Desv Est"=sd(x), "Minimo"=min(x), "Maximo"=max(x))
})
names(edad_por_lectura_24) = c("p3_1: 0 (NA/Omitido)", "p3_1: 1 (NO leyó)", "p3_1: 2 (SÍ leyó)")
print("Edad por categoría de lectura - 2024:")
## [1] "Edad por categoría de lectura - 2024:"
print(edad_por_lectura_24)
## $`p3_1: 0 (NA/Omitido)`
## Media Mediana Desv Est Minimo Maximo
## 63.63830 65.00000 16.88764 25.00000 89.00000
##
## $`p3_1: 1 (NO leyó)`
## Media Mediana Desv Est Minimo Maximo
## 43.41038 41.00000 16.72217 18.00000 89.00000
##
## $`p3_1: 2 (SÍ leyó)`
## Media Mediana Desv Est Minimo Maximo
## 47.94569 47.00000 16.17051 18.00000 94.00000
# Gráfico comparativo de medias por año
medias_comparativas = data.frame(
Año = c("2023", "2024"),
Leyó_libros = c(mean(M23_limpia[M23_limpia[,2]==1, 5]),
mean(M24_limpia[M24_limpia[,2]==1, 5])),
No_leyó_libros = c(mean(M23_limpia[M23_limpia[,2]==2, 5]),
mean(M24_limpia[M24_limpia[,2]==2, 5]))
)
# Gráfico de barras comparativo
barplot(as.matrix(medias_comparativas[,2:3]),
beside=TRUE,
main="Comparación de libros leídos por categoría y año",
xlab="Categoría", ylab="Promedio de libros",
col=c("lightblue", "lightcoral"),
legend.text=c("2023", "2024"))