knitr::opts_chunk$set(echo = TRUE, warning = FALSE, message = FALSE)
library(dplyr)
library(datos)
library(ggplot2)
library(descriptr)
library(flextable)
library(modeest)
library(moments)
library(plotrix)
library(fdth)
library(kableExtra)
library(readxl)
ruta <- "Base_Estadistica_Descriptiva.xlsx"
datos <- read_excel(ruta, sheet = "Hoja 1")
Base_Estadistica_Descriptiva <- datos
blue_dark <- "#2D3D70"
blue <- "#444DAC"
blue_light <- "#E3F1FF"
gold <- "#FFD700"
white <- "#FFFFFF"
set.seed(8438)
n_sample <- min(200, nrow(datos))
datos_sample <- sample_n(datos, size = n_sample, replace = FALSE)
knitr::include_graphics("https://static.wikia.nocookie.net/fifa/images/1/11/Millonarios.png/revision/latest/thumbnail/width/360/height/360?cb=20161208182309format=jpg&name=small")
integrantes <- data.frame(
Nombre = c("Santiago Diaz Sanchez",
"Tatiana Stefania Achicanoy Pantoja",
"Erick Santiago Alvarez Macias",
"Juan Esteban Ocampo Vidal"),
CC = c("1027281018",
"1081273534",
"1057581373",
"1089932338")
)
kable(integrantes, col.names = c("Nombre", "CC"),
caption = "Lista de Integrantes") %>%
kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover", "condensed"))
| Nombre | CC |
|---|---|
| Santiago Diaz Sanchez | 1027281018 |
| Tatiana Stefania Achicanoy Pantoja | 1081273534 |
| Erick Santiago Alvarez Macias | 1057581373 |
| Juan Esteban Ocampo Vidal | 1089932338 |
A. ¿Cuál es la proporción de estudiantes por cada nivel educativo?
RTA
Datos
library(readxl)
Base_Estadistica_Descriptiva <- read_excel("Base_Estadistica_Descriptiva.xlsx")
# Tabular proporciones
prop <- prop.table(table(Base_Estadistica_Descriptiva$NivelEducativo))
# Mostrar en porcentaje con 2 decimales
tabla <- round(prop * 100, 2)
df <- data.frame(Nivel = names(tabla), Porcentaje = as.numeric(tabla))
kable(df, caption = "Distribucion de Nivel Educativo (%)") %>%
kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover", "condensed"))
| Nivel | Porcentaje |
|---|---|
| Primaria | 22.9 |
| Secundaria | 28.8 |
| Técnico | 23.1 |
| Universitario | 25.2 |
Se observa una vez se realiza el conteo de datos que el 28% de los entrevistados poseen educacion secunadria superando en 3.6% al numero de personas que poseen educacion universitaria, a su vez las personas que poseen educacion superior son menos de la mitad con 48.3% por lo que el 51.7% no tuvo acceso o no decidio acceder a educacion superior.
B. Construya una tabla de frecuencias y un gráfico de barras.
RTA
Datos
d.b <- Base_Estadistica_Descriptiva
n.ed <- as.factor(d.b$NivelEducativo)
set.seed(8438) # Sembrar una semilla
head(n.ed,10) # muestra los 10 Primeros
## [1] Secundaria Primaria Técnico Técnico Universitario
## [6] Técnico Secundaria Secundaria Universitario Técnico
## Levels: Primaria Secundaria Técnico Universitario
tail(n.ed,10) # muestra los 10 últimos
## [1] Secundaria Secundaria Secundaria Universitario Universitario
## [6] Universitario Primaria Universitario Primaria Primaria
## Levels: Primaria Secundaria Técnico Universitario
frec1 <- table(n.ed) # tabla la frecuencia
barplot(frec1 , col = c("#98F5FF","#0000FF","gold","#FFF8DC"),
horiz = FALSE, ylab = "Cantidad" , border = TRUE, ylim = c(0,300),xlab="Niveles (Los colores de Millitos)", main = "Proporciones de cada Nivel educativo")
Aca podemos observar de una manera mas visual lo que se menciono anteriormente, hay mas personas que no han cursado una educacion superior a las que si lo han hecho, esto puede deberse al aumento en los precios de las matriculas universitarias o a la persepcion social acerca de la educacion superior.
C. ¿Qué porcentaje de las personas pertenece a cada género? Represente sus resultados en un gráfico de pastel.
RTA
Datos
G <- as.factor(d.b$Genero)
set.seed(8438) # Sembrar una semilla
head(G,10) # muestra los 10 Primeros
## [1] Femenino Masculino Otro Masculino Otro Otro Otro
## [8] Femenino Masculino Masculino
## Levels: Femenino Masculino Otro
tail(G,10) # muestra los 10 últimos
## [1] Otro Otro Femenino Femenino Otro Masculino Femenino
## [8] Femenino Femenino Masculino
## Levels: Femenino Masculino Otro
frec2 <- table(G) # tabla la frecuencia
porcentajes <- round(frec2 / sum(frec2) * 100, 2)
nombres <- c("Hombre", "Mujer", "Otro")
etiquetas <- paste(nombres, porcentajes, "%")
Grafico 2D
pie(frec2,col = c("#98F5FF","#0000FF","gold","#FFF8DC"),main = "Diagrama de torta Genero",labels = etiquetas,)
Grafico 3D
pie3D(frec2, labels = etiquetas,
explode = 0.1,
main = "Diagrama de torta Género",
col = c("#98F5FF","#0000FF","gold","#FFF8DC"))
Una vez analizados los datos se encuentra que el 64.5% de los participantes se identifican con las identidades de genero tradicionales (Hombre y mujer) a su vez vemos que la Moda el valor que mas se repite proviene de la poblacion que se identifica como Otro ya que es el que posee el porcentaje mas alto sobrepasando a las mujeres por 1.6%.
A. Calcule la media, mediana y desviación estándar de la variable Edad.
RTA
\[ \bar{x} = \frac{1}{n}\sum_{i =1}^n{x_i} \]
\[ M = \begin{cases} \ x_{(\frac {n+1}{2})} & \text{si n es impar} \\ \frac {x_{(\frac {n}{2})}+x_{(\frac {n+1}{2})}}{2} & \text{si n es par} \end{cases} \]
\[ \small S^2 = \frac {1}{n-1}\sum_{i =1}^n{(x_i-\bar{x})^2} \]
La desviación estándar es la raíz cuadrada de la varianza, su símbolo es \(S\).
\[ \small S = \sqrt {S^2} \]
Datos
Edad <- as.numeric(d.b$Edad)
set.seed(8438)
head(G,10) # muestra los 10 Primeros
## [1] Femenino Masculino Otro Masculino Otro Otro Otro
## [8] Femenino Masculino Masculino
## Levels: Femenino Masculino Otro
tail(G,10) # muestra los 10 últimos
## [1] Otro Otro Femenino Femenino Otro Masculino Femenino
## [8] Femenino Femenino Masculino
## Levels: Femenino Masculino Otro
Resultados
promedio.E <- mean(Edad, na.rm = TRUE)
cat("El promedio de Edades es:", promedio.E, "\n")
## El promedio de Edades es: 41.53
mediana.d <- median(Edad, na.rm = TRUE)
cat("La mediana de las Edades es:", mediana.d, "\n")
## La mediana de las Edades es: 41
library(modeest)
moda.d <- mfv(Edad)
cat("La moda de las Edades es:", moda.d, "\n")
## La moda de las Edades es: 37
desv_est.E <- sd(Edad, na.rm = TRUE)
cat("La desviación estándar de las edades es:", desv_est.E)
## La desviación estándar de las edades es: 13.72215
Tabla
valores <- c(promedio.E, mediana.d, moda.d[1], desv_est.E)
tabla_resumen <- data.frame(
Medida = c("Promedio", "Mediana", "Moda","D.estandar"),
Valor = valores,
stringsAsFactors = FALSE
)
kable(tabla_resumen, caption = "Medidas descriptivas de la variable Edad") %>%
kable_styling(full_width = FALSE,
bootstrap_options = c("striped", "hover", "condensed"))
| Medida | Valor |
|---|---|
| Promedio | 41.53000 |
| Mediana | 41.00000 |
| Moda | 37.00000 |
| D.estandar | 13.72215 |
Usando las formulas anteriormente listadas se pudo observar que la edad mas repetida son los 37 Años, el promedio y la Media no se alejan demasiado ambas dando como resultado 41 Años, a su vez La desviación estándar dio como resultado 13.72 Lo que significa que, en promedio, las puntuaciones de un conjunto de datos se desvían de su media (Promedio) en 13 unidades.
B. ¿Cuántas personas tienen más de 3 hermanos? Represente esta información en un gráfico de barras.
RTA
Datos
H <- as.factor(d.b$Hermanos)
set.seed(8438) # Sembrar una semilla
head(H,10) # muestra los 10 Primeros
## [1] 2 2 1 3 4 5 0 4 3 5
## Levels: 0 1 2 3 4 5 6
tail(H,10) # muestra los 10 últimos
## [1] 4 0 3 4 0 5 2 2 6 4
## Levels: 0 1 2 3 4 5 6
Numero de hermanos por categoria
frec4 <- table(H) # tabla la frecuencia
barplot(frec4 , col = c("#98F5FF","#0000FF","gold","#FFF8DC","#FFC125","#1874CD","#00EEEE"),
horiz = FALSE, ylab = "Cantidad" , border = TRUE, ylim = c(0,200),xlab="# de Hermanos", main = "Proporcion en el numero de Hermano")
Dentro de los entrevistados el grupo que prima es aquel que no posee hermanos con poco mas de 150 personas, seguido por la categoria de 6 Hermanos y la de 1 solo hermano, las categorias de 3,4 y 5 hemanos se encuentran empatados con al rededor de 130 personas y de ultimas se encuentra la categoria de 2 hermanos con aproximadamente 125 personas.
Personas con Mas de 3 Hermanos
m.3 <- subset(Base_Estadistica_Descriptiva,Hermanos > 3) #Subseccion
nrow(m.3) #Conteo
## [1] 430
h.3 <-ifelse(Base_Estadistica_Descriptiva$Hermanos > 3, "x>3", "x<3")
frec4 <- table(h.3) # tabla la frecuencia
barplot(frec4 , col = c("#98F5FF","#0000FF","gold","#FFF8DC"),
horiz = FALSE, ylab = "Cantidad" , border = TRUE, ylim = c(0,600),xlab="# de Hermanos", main = "Proporcion en el numero de Hermanos")
A su vez si se re organizan los datos y se comparan se observa que hay muchas mas personas que poseen 3 o menos hermanos, al reededor de 550 mientras que las personas con mas de 3 hermanos son aproximadamente 410.
set.seed(8438)
max_ingreso<- max(Base_Estadistica_Descriptiva$IngresoMensual)
min_ingreso<- min(Base_Estadistica_Descriptiva$IngresoMensual)
rango <- max(Base_Estadistica_Descriptiva$IngresoMensual) - min(Base_Estadistica_Descriptiva$IngresoMensual)
varianza <- var(Base_Estadistica_Descriptiva$IngresoMensual)
desv_est <- sd(Base_Estadistica_Descriptiva$IngresoMensual)
promedio <- mean(Base_Estadistica_Descriptiva$IngresoMensual)
coef_var <- (desv_est / promedio) * 100
cat("El valor de ingreso mensual más alto es:",max_ingreso, "\n")
## El valor de ingreso mensual más alto es: 4756.79
cat("El valor de ingreso mensual más bajo es:",min_ingreso, "\n")
## El valor de ingreso mensual más bajo es: -509.91
cat("El rango del Ingreso Mensual es:", rango, "\n")
## El rango del Ingreso Mensual es: 5266.7
cat("El promedio del Ingreso Mensual es:", promedio, "\n")
## El promedio del Ingreso Mensual es: 1975.176
cat("El rango del Ingreso Mensual es:", rango, "\n")
## El rango del Ingreso Mensual es: 5266.7
cat("La varianza del Ingreso Mensual es:", varianza, "\n")
## La varianza del Ingreso Mensual es: 631117.3
cat("La desviación estándar del Ingreso Mensual es:", desv_est, "\n")
## La desviación estándar del Ingreso Mensual es: 794.4289
cat("El coeficiente de variación del Ingreso Mensual es:", coef_var, "%\n")
## El coeficiente de variación del Ingreso Mensual es: 40.22067 %
Para un mejor análisis de los datos se realiza el siguiente histograma.
set.seed(8438)
ggplot(Base_Estadistica_Descriptiva, aes(x = IngresoMensual)) +
geom_histogram(binwidth = 200, fill = "skyblue", color = "black") +
geom_vline(aes(xintercept = promedio), color = "red", linetype = "dashed", size = 1) +
labs(
title = "Distribución del Ingreso Mensual",
x = "Ingreso mensual",
y = "Frecuencia"
) +
theme_minimal()
Análisis del Ingreso mensual
El ingreso mensual presenta un rango de 5266.7, lo que indica una amplia dispersión entre los valores extremos. Esto sugiere que, dentro de la población analizada, existen diferencias económicas significativas. De hecho, se registra un ingreso negativo en la base de datos, el cual podría representar alguna deuda o pérdida económica.
El promedio del ingreso mensual es 1975.18, lo cual refleja un nivel medio dentro de la muestra. Sin embargo, debido a la gran dispersión y a la presencia de posibles valores atípicos (como el ingreso negativo), este promedio puede no representar adecuadamente el ingreso “típico” de la mayoría de los individuos.
Los valores obtenidos para la varianza y la
desviación estándar son 631,117 y
794.43, respectivamente. Estos resultados confirman la
alta variabilidad en los ingresos. Una desviación
estándar de casi 800 unidades indica que los ingresos de la mayoría de
los individuos se desvían aproximadamente ±800 respecto al
promedio.
Asimismo, el coeficiente de variación (CV = 40.22%), al
superar el 30%, confirma una dispersión considerable dentro de la
distribución de los ingresos mensuales.
set.seed(8438)
hist(
Base_Estadistica_Descriptiva$Estatura,
col = "#4A90E2",
border = "white",
main = "Distribución de la Estatura",
xlab = "Estatura (cm)",
ylab = "Frecuencia",
col.main = "#003366",
col.lab = "#003366",
col.axis = "#003366",
las = 1
)
desv_est_estatura <- sd(Base_Estadistica_Descriptiva$Estatura, na.rm = TRUE)
cat("La desviación estándar de la Estatura es:", round(desv_est_estatura, 3), "\n")
## La desviación estándar de la Estatura es: 0.144
Análisis Estatura
Al observar el histograma, se aprecia que la mayoría de las estaturas se concentran en el rango de 1.70 a 1.95 m, lo que indica que no existen diferencias marcadas entre los individuos de la muestra en cuanto a su altura. La distribución parece relativamente simétrica y compacta, sin presencia evidente de valores extremos o atípicos.
El cálculo de la desviación estándar de la estatura es bajo (0.144), en comparación con la del ingreso mensual (794.428), lo que confirma que las variaciones en altura son mucho menores que las variaciones observadas en los ingresos. En otras palabras, mientras el ingreso mensual muestra una alta dispersión económica, la estatura de la población analizada presenta una mayor homogeneidad.
set.seed(8438)
Base_Estadistica_Descriptiva %>%
group_by(Genero) %>%
summarise(AlturaPromedio = mean(Estatura, na.rm = TRUE))
## # A tibble: 3 × 2
## Genero AlturaPromedio
## <chr> <dbl>
## 1 Femenino 1.75
## 2 Masculino 1.74
## 3 Otro 1.76
se utilizó la función group_by() en conjunto con summarise() del paquete dplyr, calculando el promedio de la estatura dentro de cada categoría de género. De acuerdo con estos valores, se observa que las diferencias en estatura promedio entre géneros son mínimas, siendo el grupo clasificado como “Otro” el que presenta una ligera mayor altura promedio (1.758 m), seguido por el género Femenino (1.746 m) y Masculino (1.740 m).
Estas diferencias, aunque pequeñas, sugieren que la estatura no varía significativamente entre los géneros de los datos analizados.
ggplot(Base_Estadistica_Descriptiva, aes(x = Genero, y = Estatura, fill = Genero)) +
geom_boxplot(color = blue_dark, alpha = 0.9) +
scale_fill_manual(values = c(blue, blue_light, gold)) +
labs(
title = "Distribucion de Estatura por Genero",
x = "Genero",
y = "Estatura (m)"
) +
theme_minimal(base_size = 13) +
theme(
plot.title = element_text(face = "bold", color = blue, hjust = 0.5),
axis.title = element_text(color = blue_dark),
axis.text = element_text(color = blue_dark),
panel.background = element_rect(fill = "white", color = NA),
plot.background = element_rect(fill = "white", color = NA),
legend.position = "none",
panel.grid.major = element_line(color = blue_light),
panel.grid.minor = element_blank()
)
Para complementar el análisis, se elaboró el anterior diagrama de caja (boxplot) que ilustra la distribución de las estaturas por género.
.
set.seed(8438)
Base_Estadistica_Descriptiva %>%
group_by(NivelEducativo) %>%
summarise(IngresoPromedio = mean(IngresoMensual, na.rm = TRUE))
## # A tibble: 4 × 2
## NivelEducativo IngresoPromedio
## <chr> <dbl>
## 1 Primaria 2037.
## 2 Secundaria 2012.
## 3 Técnico 1897.
## 4 Universitario 1948.
Se utilizó el paquete dplyr, mediante las funciones group_by() y summarise(), se calculó el promedio del ingreso mensual para cada nivel educativo A partir de estos valores, se observa que los ingresos no muestran una tendencia clara y creciente con el nivel educativo, como podría esperarse ya que el grupo con educación primaria presenta el mayor ingreso promedio (2037.13), mientras que el nivel técnico registra el menor (1897.03). La diferencia entre los promedios es relativamente pequeña, con una variación menor a 150 unidades monetarias entre los extremos.
Estos resultados pueden deberse a otros factores no considerados, como la experiencia laboral, el tipo de ocupación o el contexto económico, que podrían estar afectando los ingresos más que el nivel educativo por sí solo.
d.b <- Base_Estadistica_Descriptiva
colnames(d.b)
## [1] "ID" "Genero" "NivelEducativo" "Edad"
## [5] "Hermanos" "Estatura" "IngresoMensual" "HorasDeTrabajo"
ggplot(d.b, aes(x = NivelEducativo, y = IngresoMensual, fill = NivelEducativo)) +
geom_boxplot(outlier.color = "red", outlier.shape = 8) +
labs(title = "Distribución del Ingreso Mensual por Nivel Educativo",
x = "Nivel Educativo",
y = "Ingreso Mensual") +
theme_minimal() +
theme(legend.position = "none")
Analisis del Diagrama de Cajas y Bigotes:
Las medianas de los ingresos son bastante similares entre los niveles educativos. Esto sugiere que el nivel educativo no parece influir fuertemente en el ingreso medio dentro de esta muestra.
El rango intercuartílico (donde se concentra el 50% central de los datos) es similar entre los niveles. Esto indica que la dispersión de los ingresos dentro de cada grupo educativo es comparable: no hay un nivel con mucha más variabilidad que otro.
Todos los niveles presentan valores atípicos hacia arriba y hacia abajo.
Los puntos rojos en la parte superior indican personas con ingresos mucho más altos que el promedio de su nivel. Los puntos inferiores podrían representar personas con ingresos inusualmente bajos. Esto sugiere que hay cierta heterogeneidad económica dentro de cada grupo educativo.
A pesar de lo esperado (mayor educación → mayor ingreso), no se observa un patrón claro de incremento del ingreso con el nivel educativo.
En algunos casos, el grupo Técnico o Secundaria tiene medianas similares o incluso ligeramente mayores que el grupo Universitario.
En esta muestra, el nivel educativo no parece tener una relación fuerte con el ingreso mensual. Hay alta variabilidad dentro de cada grupo, y los valores atípicos muestran que existen personas con ingresos muy distintos en cada nivel.
ggplot(d.b, aes(x = Edad, y = IngresoMensual)) +
geom_point(color = "steelblue", alpha = 0.6) +
geom_smooth(method = "lm", se = TRUE, color = "darkred") +
labs(title = "Relación entre Edad e Ingreso Mensual",
x = "Edad",
y = "Ingreso Mensual") +
theme_minimal()
Analisis gráfico de Dispersión:
La línea roja (ajuste lineal) es prácticamente horizontal, lo que indica que no existe una relación fuerte entre la edad y el ingreso mensual. En otras palabras, a medida que aumenta la edad, el ingreso no muestra una tendencia clara a aumentar o disminuir.
Los puntos están ampliamente dispersos a lo largo del eje de ingreso, en todos los rangos de edad. Esto refleja una alta variabilidad en los ingresos dentro de cada grupo. Hay personas jóvenes con ingresos altos y mayores con ingresos bajos, y viceversa
La ausencia de tendencia marcada puede deberse a que el ingreso depende de otros factores además de la edad, como:
Nivel educativo.
Experiencia laboral o tipo de ocupación.
Sector económico o región.
Se observan algunos puntos con ingresos muy altos o muy bajos en casi todas las edades. Estos valores extremos pueden corresponder a casos particulares (por ejemplo, personas con profesiones muy bien pagadas o ingresos informales).
En esta muestra, no hay una relación significativa entre la edad y el ingreso mensual. El nivel de ingresos parece independiente de la edad, lo que sugiere que otros factores (educación, ocupación, experiencia o sector laboral) podrían explicar mejor las diferencias observadas en los ingresos.
Se va a crear una tabla de doble entrada que muestra la distribución conjunta entre las variables Genero y NivelEducativo. Luego, presenta los resultados con formato estético en una tabla flextable decorada con colores de millos.
Se construye la tabla de contingencia con la función table() que genera una tabla cruzada entre las categorías de las variables Genero y NivelEducativo. Luego, se calculan los totales por columna y el total general.
tabla_conjunta <- table(Genero = datos_sample$Genero,
NivelEducativo = datos_sample$NivelEducativo)
col_sums <- colSums(tabla_conjunta)
grand_total <- sum(tabla_conjunta)
Se crea la matriz con frecuencias y porcentajes para cada combinación (Género, Nivel Educativo) se calcula:
el número de personas \(n_ij\)
el porcentaje que representa dentro de su columna
Luego, se guarda como texto en formato “\(n(p \% )\)”.
rnames <- rownames(tabla_conjunta)
cnames <- colnames(tabla_conjunta)
mat_labels <- matrix("", nrow = length(rnames), ncol = length(cnames),
dimnames = list(rnames, cnames))
for (i in seq_along(rnames)) {
for (j in seq_along(cnames)) {
n_ij <- tabla_conjunta[i, j]
pct_col <- if (col_sums[j] > 0) (n_ij / col_sums[j]) * 100 else 0
mat_labels[i, j] <- sprintf("%d (%.1f%%)", n_ij, pct_col)
}
}
Conversión a data frame y adición de totales por fila, se convierte la matriz en un data frame, se agrega una columna con el total por género, y finalmente se añade una fila con los totales por nivel educativo y el total general.
df_labels <- as.data.frame(mat_labels, stringsAsFactors = FALSE)
df_labels <- cbind(Genero = rownames(df_labels), df_labels, stringsAsFactors = FALSE)
df_labels$Total <- as.character(rowSums(tabla_conjunta))
total_row <- c("Total", as.character(col_sums), as.character(grand_total))
names(total_row) <- names(df_labels)
df_labels <- rbind(df_labels, total_row)
rownames(df_labels) <- NULL
Creación y personalización de la tabla con flextable para mostrar la tabla con formato visual limpio y atractivo usando la paleta de colores que usamos antes
ft <- flextable(df_labels)
# Estilo base limpio y proporciones ajustadas automáticamente
ft <- theme_vanilla(ft)
ft <- autofit(ft)
# Encabezado con negrita, texto dorado y fondo azul oscuro
ft <- bold(ft, part = "header")
ft <- color(ft, part = "header", color = gold)
ft <- bg(ft, part = "header", bg = blue_dark)
# Estilo del cuerpo de la tabla
# Se alternan colores entre blanco y azul claro para mejorar
# la legibilidad. Además, se resalta la fila final (Total)
# con colores diferenciados.
n_body <- nrow(df_labels) - 1 # Número de filas sin contar el total
even_rows <- seq(1, n_body, by = 2)
odd_rows <- seq(2, n_body, by = 2)
if(length(even_rows) > 0) ft <- bg(ft, i = even_rows, part = "body", bg = white)
if(length(odd_rows) > 0) ft <- bg(ft, i = odd_rows, part = "body", bg = blue_light)
# Resaltar la fila de totales
ft <- bg(ft, i = nrow(df_labels), part = "body", bg = blue_light)
ft <- color(ft, i = nrow(df_labels), part = "body", color = blue_dark)
ft <- bold(ft, i = nrow(df_labels), part = "body")
# Ajustes finales: alineación, tamaño de fuente y espaciado
# Se centra todo el contenido, se define un tamaño de fuente
# uniforme y se añade espacio vertical entre filas.
ft <- align(ft, align = "center", part = "all")
ft <- fontsize(ft, size = 11, part = "all")
ft <- padding(ft, padding.top = 6, padding.bottom = 6, part = "all")
# Mostrar tabla final
ft
Genero | Primaria | Secundaria | Técnico | Universitario | Total |
|---|---|---|---|---|---|
Femenino | 16 (32.7%) | 18 (31.0%) | 15 (27.3%) | 15 (39.5%) | 64 |
Masculino | 18 (36.7%) | 17 (29.3%) | 23 (41.8%) | 10 (26.3%) | 68 |
Otro | 15 (30.6%) | 23 (39.7%) | 17 (30.9%) | 13 (34.2%) | 68 |
Total | 49 | 58 | 55 | 38 | 200 |
La tabla muestra la relacion entre el genero y el nivel educativo en una muestra de 200 personas. En general, la distribucion entre generos es equilibrada, pero se observan algunas diferencias segun el nivel educativo.
En el nivel Primaria, el grupo
masculino presenta la mayor proporcion (36.7%), seguido
del femenino (32.7%) y del grupo Otro
(30.6%). Esto sugiere una ligera predominancia masculina en los niveles
basicos.
En Secundaria, el grupo Otro alcanza
el porcentaje mas alto (39.7%), mientras que femenino (31.0%) y
masculino (29.3%) se mantienen cercanos.
En el nivel Tecnico, los hombres
destacan con 41.8%, mostrando una mayor tendencia hacia la formacion
tecnica frente al femenino (27.3%) y al grupo Otro (30.9%).
Finalmente, en el nivel Universitario, el
genero femenino presenta la mayor participacion
(39.5%), superando al grupo Otro (34.2%) y al masculino (26.3%), lo que
indica una mayor presencia de mujeres en la educacion superior.
En conclusion, aunque la representacion general es equilibrada, se observa que los hombres predominan en los niveles primario y tecnico, mientras que las mujeres se concentran mas en el nivel universitario. El grupo Otro mantiene una presencia constante, destacando ligeramente en secundaria. Estas diferencias reflejan posibles variaciones en intereses o trayectorias educativas entre los distintos generos.
En este punto se busca calcular la proporcion de
personas que cumplen simultaneamente dos condiciones dentro de la
muestra:
1) tener mas de dos hermanos, y
2) presentar un ingreso mensual superior a $3000.
El analisis se basa en la definicion estadistica de una proporcion muestral, la cual se expresa mediante la siguiente formula:
\[ \hat{p} = \frac{x}{n} \]
donde:
- \(\hat{p}\) es la
proporcion de individuos que cumplen ambas
condiciones,
- \(x\) es el numero de casos
favorables (personas con mas de dos hermanos e ingreso >
3000),
- \(n\) es el total de
casos dentro del grupo de personas con mas de dos hermanos.
Ahora vamos a filtrar los datos que cumplen las condiciones
# Personas con mas de 2 hermanos
mas_de_dos_hermanos <- datos_sample %>%
filter(Hermanos > 2)
# Dentro de ellas, quienes tienen ingreso mayor a 3000
mas_de_dos_y_alto_ingreso <- mas_de_dos_hermanos %>%
filter(IngresoMensual > 3000)
# Calculo de la proporcion
n_total <- nrow(mas_de_dos_hermanos)
n_cumplen <- nrow(mas_de_dos_y_alto_ingreso)
proporcion <- ifelse(n_total > 0, n_cumplen / n_total, NA)
Ahora, haremos una pequeña tabla resumen usando nuevamente flextable que nos dara la proporcion que nos piden
df_prop <- data.frame(
Categoria = c("Total con >2 hermanos", "Con ingreso >3000", "Proporcion (%)"),
Valor = c(n_total, n_cumplen, sprintf("%.2f%%", proporcion * 100))
)
ft_prop <- flextable(df_prop)
ft_prop <- theme_vanilla(ft_prop) # estilo base limpio
ft_prop <- autofit(ft_prop) # ajustar ancho de columnas
ft_prop <- bold(ft_prop, part = "header") # encabezado en negrita
ft_prop <- color(ft_prop, part = "header", color = gold)
ft_prop <- bg(ft_prop, part = "header", bg = blue_dark)
# Fondo alternado cuerpo
even_rows <- seq(1, nrow(df_prop), by = 2)
odd_rows <- seq(2, nrow(df_prop), by = 2)
if(length(even_rows) > 0) ft_prop <- bg(ft_prop, i = even_rows, part = "body", bg = white)
if(length(odd_rows) > 0) ft_prop <- bg(ft_prop, i = odd_rows, part = "body", bg = blue_light)
# Centrar texto y ajustar fuente
ft_prop <- align(ft_prop, align = "center", part = "all")
ft_prop <- fontsize(ft_prop, size = 11, part = "all")
ft_prop <- padding(ft_prop, padding.top = 6, padding.bottom = 6, part = "all")
# Mostrar resultado final
ft_prop
Categoria | Valor |
|---|---|
Total con >2 hermanos | 116 |
Con ingreso >3000 | 10 |
Proporcion (%) | 8.62% |
El analisis conjunto entre el numero de hermanos y el nivel de ingreso mensual revela una relacion interesante dentro de la muestra de 200 personas. En total, 116 individuos reportaron tener mas de dos hermanos, pero solo 10 de ellos declararon ingresos superiores a $3000, lo que representa una proporcion del 8.62%.
Este resultado evidencia que solo una pequeña fraccion de las personas con familias numerosas alcanza niveles de ingreso elevados. La baja proporcion sugiere que el tamaño del grupo familiar podria estar relacionado con una menor disponibilidad de recursos o con condiciones socioeconomicas menos favorables.
En terminos generales, los datos apuntan a que las familias mas grandes tienden a tener menor poder adquisitivo, posiblemente debido a la distribucion de los recursos entre mas integrantes o a menores oportunidades educativas y laborales. Sin embargo, para confirmar esta tendencia seria necesario un analisis estadistico mas profundo que incluya factores como la edad, el nivel educativo y la ocupacion.