Diagnostico Exploratorio Sobre Colombianos En EL Exterior

El censo ā€œColombianos registrados en el exteriorā€ proporciona un conjunto de datos sobre los ciudadanos colombianos que se han registrado en consulados y embajadas fuera de Colombia. Estos datos, que fueron proporcionados por el Ministerio De Relaciones Exteriores, incluyen detalles demogrĆ”ficos como edad, gĆ©nero, y ubicación de residencia en el extranjero. El propósito principal es entender la distribución de los colombianos en el exterior, lo que puede ayudar en la planificación de polĆ­ticas y servicios consulares.

¿Qué hay en este conjunto de Datos?

Este estudio incluye las siguientes variables

  1. PaĆ­s: Indica el paĆ­s de residencia de la persona. Cuando no se tienen datos registrados se presenta el texto ā€œ(NO REGISTRA)ā€.

  2. Código ISO paĆ­s: ISO del paĆ­s de residencia. Cuando no se tienen datos registrados se presenta el texto ā€œ(NO REGISTRA)ā€.

  3. Oficina de registro: Consulado donde la persona realizó su registro consular. Cuando no se tienen datos registrados se presenta el texto ā€œ(NO REGISTRA)ā€.

  4. Grupo edad: Grupo basado en la edad, como ā€œPrimera infanciaā€ (0-5 aƱos) o ā€œAdulto Mayorā€ (60+).

  5. Edad (aƱos): Edad de la persona, con -1 indicando datos faltantes.

  6. Ɓrea Conocimiento: Ɓrea de conocimiento, con ā€œ(NO REGISTRA)ā€ si falta.

  7. Sub Ɓrea Conocimiento: SubĆ”rea especĆ­fica, con ā€œ(NO REGISTRA)ā€ si falta.

  8. Nivel AcadĆ©mico: Nivel educativo, con ā€œ(NO REGISTRA)ā€ si falta.

  9. Estado civil: Estado civil, con ā€œ(NO REGISTRA)ā€ si falta.

  10. GĆ©nero: GĆ©nero de la persona, con ā€œ(DESCONOCIDO)ā€ si falta.

  11. Etnia de la persona: Etnia, con ā€œ(NO REGISTRA)ā€ si falta.

  12. Estatura (CM): Estatura en centĆ­metros, con -1 indicando datos faltantes.

  13. Localización: Localización geogrÔfica del ciudadano según el país de residencia.

  14. Cantidad de personas: Número de personas que cumplen con las condiciones demogrÔficas especificadas.

Objetivos Del Estudio

Analizar las caracterƭsticas demogrƔficas y educativas de ciudadanos colombianos en el exterior, con el fin de identificar patrones de residencia, nivel acadƩmico, estado civil, gƩnero, etnia y Ɣrea de conocimiento, asƭ como la calidad y completitud de los datos registrados en los consulados.

Importacion de Librerias

library(gridExtra)
library(psych)
library(ggcorrplot)
## Loading required package: ggplot2
## 
## Attaching package: 'ggplot2'
## The following objects are masked from 'package:psych':
## 
##     %+%, alpha
library(readxl)
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following object is masked from 'package:gridExtra':
## 
##     combine
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## āœ” forcats   1.0.0     āœ” stringr   1.5.1
## āœ” lubridate 1.9.3     āœ” tibble    3.2.1
## āœ” purrr     1.0.2     āœ” tidyr     1.3.1
## āœ” readr     2.1.5
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## āœ– ggplot2::%+%()   masks psych::%+%()
## āœ– ggplot2::alpha() masks psych::alpha()
## āœ– dplyr::combine() masks gridExtra::combine()
## āœ– dplyr::filter()  masks stats::filter()
## āœ– dplyr::lag()     masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(Amelia)
## Loading required package: Rcpp
## ## 
## ## Amelia II: Multiple Imputation
## ## (Version 1.8.2, built: 2024-04-10)
## ## Copyright (C) 2005-2024 James Honaker, Gary King and Matthew Blackwell
## ## Refer to http://gking.harvard.edu/amelia/ for more information
## ##
library(janitor)
## 
## Attaching package: 'janitor'
## 
## The following objects are masked from 'package:stats':
## 
##     chisq.test, fisher.test
library(magrittr)
## 
## Attaching package: 'magrittr'
## 
## The following object is masked from 'package:purrr':
## 
##     set_names
## 
## The following object is masked from 'package:tidyr':
## 
##     extract
library(ggplot2)
library(dplyr)
library(pastecs)
## 
## Attaching package: 'pastecs'
## 
## The following object is masked from 'package:magrittr':
## 
##     extract
## 
## The following object is masked from 'package:tidyr':
## 
##     extract
## 
## The following objects are masked from 'package:dplyr':
## 
##     first, last
library(nortest)
library(skimr)

Importacion, Diagnostico y Tratamiento De Los Datos

Data <- read.csv('colombianos_exterior.csv')
# Renombrar columnas con caracteres especiales
names(Data) <- c("País", "Código.ISO.Pais", "Oficina.de.registro", "Grupo.edad", "Edad", 
                    "Area.Conocimiento", "Sub.Area.Conocimiento", "Nivel.AcadƩmico", 
                    "Estado.civil", "GƩnero", "Etnia.de.la.persona", "Estatura", 
                    "Localización", "Cantidad.de.personas")
dim(D)
## NULL
summary(Data)
##      País           Código.ISO.Pais    Oficina.de.registro  Grupo.edad       
##  Length:782250      Length:782250      Length:782250       Length:782250     
##  Class :character   Class :character   Class :character    Class :character  
##  Mode  :character   Mode  :character   Mode  :character    Mode  :character  
##                                                                              
##                                                                              
##                                                                              
##       Edad        Area.Conocimiento  Sub.Area.Conocimiento Nivel.AcadƩmico   
##  Min.   : -1.00   Length:782250      Length:782250         Length:782250     
##  1st Qu.: 34.00   Class :character   Class :character      Class :character  
##  Median : 44.00   Mode  :character   Mode  :character      Mode  :character  
##  Mean   : 45.79                                                              
##  3rd Qu.: 57.00                                                              
##  Max.   :140.00                                                              
##  Estado.civil          GƩnero          Etnia.de.la.persona    Estatura     
##  Length:782250      Length:782250      Length:782250       Min.   :    -1  
##  Class :character   Class :character   Class :character    1st Qu.:    -1  
##  Mode  :character   Mode  :character   Mode  :character    Median :    -1  
##                                                            Mean   :    59  
##                                                            3rd Qu.:   160  
##                                                            Max.   :163163  
##  Localización       Cantidad.de.personas
##  Length:782250      Min.   :  1.000     
##  Class :character   1st Qu.:  1.000     
##  Mode  :character   Median :  1.000     
##                     Mean   :  1.983     
##                     3rd Qu.:  1.000     
##                     Max.   :408.000
str(Data)
## 'data.frame':    782250 obs. of  14 variables:
##  $ Paƭs                 : chr  "ALEMANIA" "ESPAƑA" "CANADA" "VENEZUELA" ...
##  $ Código.ISO.Pais      : chr  "DEU" "ESP" "CAN" "VEN" ...
##  $ Oficina.de.registro  : chr  "C. BERLIN" "C. BARCELONA" "C. MONTREAL" "C. MARACAIBO" ...
##  $ Grupo.edad           : chr  "ADULTO" "ADULTO" "ADULTO" "ADULTO MAYOR" ...
##  $ Edad                 : int  35 36 35 91 51 35 12 58 45 14 ...
##  $ Area.Conocimiento    : chr  "CIENCIAS SOCIALES Y HUMANAS" "NO INDICA" "CIENCIAS SOCIALES Y HUMANAS" "CIENCIAS SOCIALES Y HUMANAS" ...
##  $ Sub.Area.Conocimiento: chr  "CIENCIA POLƍTICA Y/O RELACIONES INTERNACIONALES" "NO INDICA" "GEOGRAFƍA O HISTORIA" "DERECHO Y AFINES" ...
##  $ Nivel.AcadƩmico      : chr  "PREGRADO - PROFESIONAL" "POSTGRADO - MAESTRIA" "NO INDICA" "NO INDICA" ...
##  $ Estado.civil         : chr  "SOLTERO" "SOLTERO" "SOLTERO" "SOLTERO" ...
##  $ GƩnero               : chr  "MASCULINO" "FEMENINO" "FEMENINO" "FEMENINO" ...
##  $ Etnia.de.la.persona  : chr  "NINGUNA" "OTRO" "OTRO" "NINGUNA" ...
##  $ Estatura             : int  -1 165 -1 -1 169 -1 -1 -1 -1 -1 ...
##  $ Localización         : chr  "(51.165691, 10.451526)" "(40.463667, -3.74922)" "(56.130366, -106.346771)" "(6.42375, -66.58973)" ...
##  $ Cantidad.de.personas : int  1 1 1 1 1 1 1 1 1 1 ...
missmap(Data, main="Mapa de Datos Faltantes en Datos crudos")

Se observa que inicialmente se tienen 12/14 variables cualitativas y 2/14 cuantitativas, sin embargo, si observamos la variable estatura sabemos que la naturaleza de sus datos es cuantitativa, y esta siendo detectada como una variable cualitativa, por lo tanto se designarĆ” manualmente.

Procesamiento De Los Datos

#Convertir la variable Estatura de caracter a numƩrico
Data$Estatura <- as.numeric(Data$Estatura)
NewData <- Data
summary(NewData)
##      País           Código.ISO.Pais    Oficina.de.registro  Grupo.edad       
##  Length:782250      Length:782250      Length:782250       Length:782250     
##  Class :character   Class :character   Class :character    Class :character  
##  Mode  :character   Mode  :character   Mode  :character    Mode  :character  
##                                                                              
##                                                                              
##                                                                              
##       Edad        Area.Conocimiento  Sub.Area.Conocimiento Nivel.AcadƩmico   
##  Min.   : -1.00   Length:782250      Length:782250         Length:782250     
##  1st Qu.: 34.00   Class :character   Class :character      Class :character  
##  Median : 44.00   Mode  :character   Mode  :character      Mode  :character  
##  Mean   : 45.79                                                              
##  3rd Qu.: 57.00                                                              
##  Max.   :140.00                                                              
##  Estado.civil          GƩnero          Etnia.de.la.persona    Estatura     
##  Length:782250      Length:782250      Length:782250       Min.   :    -1  
##  Class :character   Class :character   Class :character    1st Qu.:    -1  
##  Mode  :character   Mode  :character   Mode  :character    Median :    -1  
##                                                            Mean   :    59  
##                                                            3rd Qu.:   160  
##                                                            Max.   :163163  
##  Localización       Cantidad.de.personas
##  Length:782250      Min.   :  1.000     
##  Class :character   1st Qu.:  1.000     
##  Mode  :character   Median :  1.000     
##                     Mean   :  1.983     
##                     3rd Qu.:  1.000     
##                     Max.   :408.000
str(NewData)
## 'data.frame':    782250 obs. of  14 variables:
##  $ Paƭs                 : chr  "ALEMANIA" "ESPAƑA" "CANADA" "VENEZUELA" ...
##  $ Código.ISO.Pais      : chr  "DEU" "ESP" "CAN" "VEN" ...
##  $ Oficina.de.registro  : chr  "C. BERLIN" "C. BARCELONA" "C. MONTREAL" "C. MARACAIBO" ...
##  $ Grupo.edad           : chr  "ADULTO" "ADULTO" "ADULTO" "ADULTO MAYOR" ...
##  $ Edad                 : int  35 36 35 91 51 35 12 58 45 14 ...
##  $ Area.Conocimiento    : chr  "CIENCIAS SOCIALES Y HUMANAS" "NO INDICA" "CIENCIAS SOCIALES Y HUMANAS" "CIENCIAS SOCIALES Y HUMANAS" ...
##  $ Sub.Area.Conocimiento: chr  "CIENCIA POLƍTICA Y/O RELACIONES INTERNACIONALES" "NO INDICA" "GEOGRAFƍA O HISTORIA" "DERECHO Y AFINES" ...
##  $ Nivel.AcadƩmico      : chr  "PREGRADO - PROFESIONAL" "POSTGRADO - MAESTRIA" "NO INDICA" "NO INDICA" ...
##  $ Estado.civil         : chr  "SOLTERO" "SOLTERO" "SOLTERO" "SOLTERO" ...
##  $ GƩnero               : chr  "MASCULINO" "FEMENINO" "FEMENINO" "FEMENINO" ...
##  $ Etnia.de.la.persona  : chr  "NINGUNA" "OTRO" "OTRO" "NINGUNA" ...
##  $ Estatura             : num  -1 165 -1 -1 169 -1 -1 -1 -1 -1 ...
##  $ Localización         : chr  "(51.165691, 10.451526)" "(40.463667, -3.74922)" "(56.130366, -106.346771)" "(6.42375, -66.58973)" ...
##  $ Cantidad.de.personas : int  1 1 1 1 1 1 1 1 1 1 ...
DataNA <- NewData

DataNA$Estatura[DataNA$Estatura==-1]<-NA
DataNA$Estatura[DataNA$Estatura>270]<-NA
DataNA$Estatura[DataNA$Estatura<35]<-NA

DataNA$Edad[DataNA$Edad==-1]<-NA
DataNA$Edad[DataNA$Edad>121]<-NA

# Reemplazar '(NO REGISTRA)' con NA en las columnas especificadas
columns_to_replace <- c("País", "Código.ISO.Pais", "Oficina.de.registro", "Area.Conocimiento", "Sub.Area.Conocimiento", "Nivel.Académico", "Estado.civil", "Etnia.de.la.persona")
DataNA[columns_to_replace] <- lapply(DataNA[columns_to_replace], function(x) {
  x[x == '(NO REGISTRA)'] <- NA
  return(x)
})

DataNA$GƩnero[DataNA$GƩnero=='DESCONOCIDO']<-NA

# Calcular el nĆŗmero de NA por columna
na_counts <- sapply(DataNA, function(x) sum(is.na(x)))

# Calcular el nĆŗmero total de datos por columna
total_values <- sapply(DataNA, function(x) length(x))

# Calcular el porcentaje de NA por columna con respecto al total de datos en esa columna
na_percentages_per_column <- (na_counts / total_values) * 100

# Calcular el nĆŗmero total de datos en todo el data frame
total_data_in_dataframe <- length(unlist(DataNA))

# Calcular el porcentaje de NA en cada columna con respecto al total de datos en toda la muestra
na_percentages_total <- (na_counts / total_data_in_dataframe) * 100

# Crear un data frame con el nĆŗmero y porcentaje de NA por columna
na_summary <- data.frame(
  Variable = names(na_counts),
  NA_Count = na_counts,
  Total_Values = total_values,
  NA_Percentage_Per_Column = na_percentages_per_column,
  NA_Percentage_Total = na_percentages_total
)

# Convertir las columnas numƩricas a formato decimal
na_summary$NA_Count <- format(na_summary$NA_Count, scientific = FALSE)
na_summary$Total_Values <- format(na_summary$Total_Values, scientific = FALSE)
na_summary$NA_Percentage_Per_Column <- format(na_summary$NA_Percentage_Per_Column, scientific = FALSE)
na_summary$NA_Percentage_Total <- format(na_summary$NA_Percentage_Total, scientific = FALSE)

# Ordenar el data frame por porcentaje total de NA en orden descendente
na_summary <- na_summary[order(-as.numeric(na_summary$NA_Percentage_Total)), ]

# Ver el resumen
print(na_summary)
##                                    Variable NA_Count Total_Values
## Estatura                           Estatura   500420       782250
## GƩnero                               GƩnero     1613       782250
## Edad                                   Edad     1043       782250
## Area.Conocimiento         Area.Conocimiento      713       782250
## Sub.Area.Conocimiento Sub.Area.Conocimiento      713       782250
## Nivel.AcadƩmico             Nivel.AcadƩmico      713       782250
## Código.ISO.Pais             Código.ISO.Pais        4       782250
## PaĆ­s                                   PaĆ­s        0       782250
## Oficina.de.registro     Oficina.de.registro        0       782250
## Grupo.edad                       Grupo.edad        0       782250
## Estado.civil                   Estado.civil        0       782250
## Etnia.de.la.persona     Etnia.de.la.persona        0       782250
## Localización                   Localización        0       782250
## Cantidad.de.personas   Cantidad.de.personas        0       782250
##                       NA_Percentage_Per_Column NA_Percentage_Total
## Estatura                         63.9718759987       4.56941971419
## GƩnero                            0.2062000639       0.01472857599
## Edad                              0.1333333333       0.00952380952
## Area.Conocimiento                 0.0911473314       0.00651052367
## Sub.Area.Conocimiento             0.0911473314       0.00651052367
## Nivel.AcadƩmico                   0.0911473314       0.00651052367
## Código.ISO.Pais                   0.0005113455       0.00003652468
## PaĆ­s                              0.0000000000       0.00000000000
## Oficina.de.registro               0.0000000000       0.00000000000
## Grupo.edad                        0.0000000000       0.00000000000
## Estado.civil                      0.0000000000       0.00000000000
## Etnia.de.la.persona               0.0000000000       0.00000000000
## Localización                      0.0000000000       0.00000000000
## Cantidad.de.personas              0.0000000000       0.00000000000
missmap(DataNA, main="Mapa de Datos Faltantes semiprocesados")

Pruebas De Normalidad

En este estudio, necesitamos verificar si nuestros datos siguen una distribución normal. Como no conocemos la media ni la desviación estÔndar de la población, la prueba de Lilliefors es ideal porque permite evaluar la normalidad sin asumir estos parÔmetros.

clean_data <- na.omit(DataNA$Estatura)

# Realizar la prueba de normalidad (Lilliefors)
resultado_prueba <- lillie.test(clean_data)

print(resultado_prueba)
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  clean_data
## D = 0.094772, p-value < 2.2e-16
clean_data_Edad <- na.omit(DataNA$Edad)

# Realizar la prueba de normalidad (Lilliefors)
resultado_prueba_Edad <- lillie.test(clean_data_Edad)

print(resultado_prueba_Edad)
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  clean_data_Edad
## D = 0.061182, p-value < 2.2e-16
# Nivel de significancia
nivel_significancia <- 0.05

# Evaluar la hipótesis
if (!is.na(resultado_prueba$p.value) && resultado_prueba$p.value < nivel_significancia) {
  print("Se rechaza la hipótesis nula, lo que sugiere que la variable Estatura no sigue una distribución normal.")
} else {
  print("No se rechaza la hipótesis nula, lo que sugiere que la variable Estatura sigue una distribución normal.")
}
## [1] "Se rechaza la hipótesis nula, lo que sugiere que la variable Estatura no sigue una distribución normal."
# Evaluar la hipótesis
if (!is.na(resultado_prueba_Edad$p.value) && resultado_prueba_Edad$p.value < nivel_significancia) {
  print("Se rechaza la hipótesis nula, lo que sugiere que la variable Edad no sigue una distribución normal.")
} else {
  print("No se rechaza la hipótesis nula, lo que sugiere que la variable Edad sigue una distribución normal.")
}
## [1] "Se rechaza la hipótesis nula, lo que sugiere que la variable Edad no sigue una distribución normal."
# Configurar el Ɣrea de grƔficos para mostrar 1 fila y 3 columnas
par(mfrow = c(1, 3)) 

# Crear el grƔfico QQ para la variable Estatura
qqnorm(DataNA$Estatura, main = "QQ Plot para la variable Estatura")
qqline(DataNA$Estatura, col = "red", lwd = 2)

# Crear el grƔfico QQ para la variable Edad
qqnorm(DataNA$Edad, main = "QQ Plot para la variable Edad")
qqline(DataNA$Edad, col = "red", lwd = 2)

# Crear el grƔfico QQ para la Cantidad de personas
qqnorm(DataNA$Cantidad.de.personas, main = "QQ Plot para la Cantidad de personas")
qqline(DataNA$Cantidad.de.personas, col = "red", lwd = 2)

# Restablecer la configuración de grÔficos a la predeterminada (opcional)
par(mfrow = c(1, 1))
# Definir la función para aplicar el test Lilliefors
lilliefors_test <- function(x) {
  # Eliminar NA antes de realizar la prueba
  clean_data <- na.omit(x)
  # Aplicar el test Lilliefors y extraer el p-value
  result <- lillie.test(clean_data)
  return(result$p.value)
}

# Aplicar la prueba de Lilliefors a todas las variables numƩricas
normality_tests <- DataNA %>%
  summarise(across(where(is.numeric), ~ lilliefors_test(.x))) %>%
  pivot_longer(cols = everything(), names_to = "Variable", values_to = "P-Value")

# Agregar una columna indicando si los datos son normales o no
normality_tests <- normality_tests %>%
  mutate(Normal = ifelse(`P-Value` < 0.05, "No", "SĆ­"))

# Mostrar los resultados
print(normality_tests)
## # A tibble: 3 Ɨ 3
##   Variable             `P-Value` Normal
##   <chr>                    <dbl> <chr> 
## 1 Edad                         0 No    
## 2 Estatura                     0 No    
## 3 Cantidad.de.personas         0 No

LimpiezaDe Datos

# Función para rellenar variables cuantitativas con la mediana
rellenar_con_mediana <- function(x) {
  x[is.na(x)] <- median(x, na.rm = TRUE)
  return(x)
}

# Función para calcular la moda
calcular_moda <- function(x) {
  uniq_vals <- unique(na.omit(x))
  uniq_vals[which.max(tabulate(match(x, uniq_vals)))]
}

# Función para rellenar NA en variables cualitativas con la moda
rellenar_con_moda <- function(x) {
  moda <- calcular_moda(x)
  x[is.na(x)] <- moda
  return(x)
}

DataNA <- DataNA %>%
  mutate(across(where(is.numeric), rellenar_con_mediana)) %>%
  mutate(across(where(is.character), rellenar_con_moda)) %>%
  mutate(across(where(is.factor), ~ as.character(.) %>% rellenar_con_moda() %>% as.factor()))
names(DataNA)
##  [1] "País"                  "Código.ISO.Pais"       "Oficina.de.registro"  
##  [4] "Grupo.edad"            "Edad"                  "Area.Conocimiento"    
##  [7] "Sub.Area.Conocimiento" "Nivel.AcadƩmico"       "Estado.civil"         
## [10] "GƩnero"                "Etnia.de.la.persona"   "Estatura"             
## [13] "Localización"          "Cantidad.de.personas"
summary(DataNA)
##      País           Código.ISO.Pais    Oficina.de.registro  Grupo.edad       
##  Length:782250      Length:782250      Length:782250       Length:782250     
##  Class :character   Class :character   Class :character    Class :character  
##  Mode  :character   Mode  :character   Mode  :character    Mode  :character  
##                                                                              
##                                                                              
##                                                                              
##       Edad        Area.Conocimiento  Sub.Area.Conocimiento Nivel.AcadƩmico   
##  Min.   :  0.00   Length:782250      Length:782250         Length:782250     
##  1st Qu.: 34.00   Class :character   Class :character      Class :character  
##  Median : 44.00   Mode  :character   Mode  :character      Mode  :character  
##  Mean   : 45.85                                                              
##  3rd Qu.: 57.00                                                              
##  Max.   :119.00                                                              
##  Estado.civil          GƩnero          Etnia.de.la.persona    Estatura    
##  Length:782250      Length:782250      Length:782250       Min.   : 35.0  
##  Class :character   Class :character   Class :character    1st Qu.:165.0  
##  Mode  :character   Mode  :character   Mode  :character    Median :165.0  
##                                                            Mean   :164.8  
##                                                            3rd Qu.:165.0  
##                                                            Max.   :270.0  
##  Localización       Cantidad.de.personas
##  Length:782250      Min.   :  1.000     
##  Class :character   1st Qu.:  1.000     
##  Mode  :character   Median :  1.000     
##                     Mean   :  1.983     
##                     3rd Qu.:  1.000     
##                     Max.   :408.000
str(DataNA)
## 'data.frame':    782250 obs. of  14 variables:
##  $ Paƭs                 : chr  "ALEMANIA" "ESPAƑA" "CANADA" "VENEZUELA" ...
##  $ Código.ISO.Pais      : chr  "DEU" "ESP" "CAN" "VEN" ...
##  $ Oficina.de.registro  : chr  "C. BERLIN" "C. BARCELONA" "C. MONTREAL" "C. MARACAIBO" ...
##  $ Grupo.edad           : chr  "ADULTO" "ADULTO" "ADULTO" "ADULTO MAYOR" ...
##  $ Edad                 : int  35 36 35 91 51 35 12 58 45 14 ...
##  $ Area.Conocimiento    : chr  "CIENCIAS SOCIALES Y HUMANAS" "NO INDICA" "CIENCIAS SOCIALES Y HUMANAS" "CIENCIAS SOCIALES Y HUMANAS" ...
##  $ Sub.Area.Conocimiento: chr  "CIENCIA POLƍTICA Y/O RELACIONES INTERNACIONALES" "NO INDICA" "GEOGRAFƍA O HISTORIA" "DERECHO Y AFINES" ...
##  $ Nivel.AcadƩmico      : chr  "PREGRADO - PROFESIONAL" "POSTGRADO - MAESTRIA" "NO INDICA" "NO INDICA" ...
##  $ Estado.civil         : chr  "SOLTERO" "SOLTERO" "SOLTERO" "SOLTERO" ...
##  $ GƩnero               : chr  "MASCULINO" "FEMENINO" "FEMENINO" "FEMENINO" ...
##  $ Etnia.de.la.persona  : chr  "NINGUNA" "OTRO" "OTRO" "NINGUNA" ...
##  $ Estatura             : num  165 165 165 165 169 165 165 165 165 165 ...
##  $ Localización         : chr  "(51.165691, 10.451526)" "(40.463667, -3.74922)" "(56.130366, -106.346771)" "(6.42375, -66.58973)" ...
##  $ Cantidad.de.personas : num  1 1 1 1 1 1 1 1 1 1 ...
dim(DataNA)
## [1] 782250     14
# Verificar que no haya NA en el nuevo dataframe
missmap(DataNA, main="Mapa de Datos Faltantes")

# Configurar el Ɣrea de grƔficos para mostrar 1 fila y 3 columnas
par(mfrow = c(1, 3)) 

# Crear el grƔfico QQ para la variable Estatura
qqnorm(DataNA$Estatura, main = "QQ Plot para la variable Estatura")
qqline(DataNA$Estatura, col = "red", lwd = 2)

# Crear el grƔfico QQ para la variable Edad
qqnorm(DataNA$Edad, main = "QQ Plot para la variable Edad")
qqline(DataNA$Edad, col = "red", lwd = 2)

# Crear el grƔfico QQ para la Cantidad de personas
qqnorm(DataNA$Cantidad.de.personas, main = "QQ Plot para la Cantidad de personas")
qqline(DataNA$Cantidad.de.personas, col = "red", lwd = 2)

# Restablecer la configuración de grÔficos a la predeterminada (opcional)
par(mfrow = c(1, 1))

# Eliminar los NA de la columna Estatura (antes de la limpieza)
estatura <- na.omit(Data$Estatura)

# Graficar el histograma
hist(estatura, breaks = 30, probability = TRUE, main = "Histograma con Curva Normal", xlab = "Estatura", col = "lightblue")

# Agregar la curva de densidad de los datos
lines(density(estatura), col = "red", lwd = 2)

# Calcular la media y desviación estÔndar de los datos
mean_estatura <- mean(estatura)
sd_estatura <- sd(estatura)

# Crear la secuencia de valores para la curva normal
x <- seq(min(estatura), max(estatura), length = 100)

# Agregar la curva de la distribución normal teórica
y <- dnorm(x, mean = mean_estatura, sd = sd_estatura)
lines(x, y, col = "blue", lwd = 2)

# Eliminar los NA de la columna Estatura (despuƩs de la limpieza)
estatura <- na.omit(DataNA$Estatura)

# Graficar el histograma
hist(estatura, breaks = 30, probability = TRUE, main = "Histograma con Curva Normal", xlab = "Estatura", col = "lightblue")

# Agregar la curva de densidad de los datos
lines(density(estatura), col = "red", lwd = 2)

# Calcular la media y desviación estÔndar de los datos
mean_estatura <- mean(estatura)
sd_estatura <- sd(estatura)

# Crear la secuencia de valores para la curva normal
x <- seq(min(estatura), max(estatura), length = 100)

# Agregar la curva de la distribución normal teórica
y <- dnorm(x, mean = mean_estatura, sd = sd_estatura)
lines(x, y, col = "blue", lwd = 2)

# Configurar la disposición de las grÔficas en una fila y dos columnas
par(mfrow = c(1, 2))

# Primera grƔfica (antes de la limpieza)
# Eliminar los NA de la columna Estatura (antes de la limpieza)
estatura_antes <- na.omit(Data$Estatura)

# Graficar el histograma
hist(estatura_antes, breaks = 30, probability = TRUE, main = "Antes de la Limpieza", xlab = "Estatura", col = "lightblue")

# Agregar la curva de densidad de los datos
#lines(density(estatura_antes), col = "red", lwd = 2)

# Calcular la media y desviación estÔndar de los datos
mean_estatura_antes <- mean(estatura_antes)
sd_estatura_antes <- sd(estatura_antes)

# Crear la secuencia de valores para la curva normal
x_antes <- seq(min(estatura_antes), max(estatura_antes), length = 100)

# Agregar la curva de la distribución normal teórica
y_antes <- dnorm(x_antes, mean = mean_estatura_antes, sd = sd_estatura_antes)
lines(x_antes, y_antes, col = "blue", lwd = 2)

# Segunda grƔfica (despuƩs de la limpieza)
# Eliminar los NA de la columna Estatura (despuƩs de la limpieza)
estatura_despues <- na.omit(DataNA$Estatura)

# Graficar el histograma
hist(estatura_despues, breaks = 30, probability = TRUE, main = "DespuƩs de la Limpieza", xlab = "Estatura", col = "lightblue")

# Agregar la curva de densidad de los datos
#lines(density(estatura_despues), col = "red", lwd = 2)

# Calcular la media y desviación estÔndar de los datos
mean_estatura_despues <- mean(estatura_despues)
sd_estatura_despues <- sd(estatura_despues)

# Crear la secuencia de valores para la curva normal
x_despues <- seq(min(estatura_despues), max(estatura_despues), length = 100)

# Agregar la curva de la distribución normal teórica
y_despues <- dnorm(x_despues, mean = mean_estatura_despues, sd = sd_estatura_despues)
lines(x_despues, y_despues, col = "blue", lwd = 2)

# Restablecer la disposición de las grÔficas a una única por ventana
par(mfrow = c(1, 1))

Normalizacion De Los Datos

Se ralizara la normalizacion de los datos mediante transformacion logaritmica. En la normalización de datos solo se tomarÔn en cuenta las variables Edad y Cantidad de personas, ya que debido al alto porcentaje de datos irregulares en la variable estatura, se ha decidio sacarla del estudio. Veamos entonces el comportamiento de las variables Edad y Cantidad de personas.

# Configurar la disposición de las grÔficas en una fila y dos columnas
par(mfrow = c(1, 2))

# Eliminar los NA de la columna Edad
estatura_antes <- na.omit(Data$Edad)

# Graficar el histograma
hist(estatura_antes, breaks = 30, probability = TRUE, main = "Distribución Edad", xlab = "Edad", col = "lightblue")

# Agregar la curva de densidad de los datos
#lines(density(estatura_antes), col = "red", lwd = 2)

# Calcular la media y desviación estÔndar de los datos
mean_estatura_antes <- mean(estatura_antes)
sd_estatura_antes <- sd(estatura_antes)

# Crear la secuencia de valores para la curva normal
x_antes <- seq(min(estatura_antes), max(estatura_antes), length = 100)

# Agregar la curva de la distribución normal teórica
y_antes <- dnorm(x_antes, mean = mean_estatura_antes, sd = sd_estatura_antes)
lines(x_antes, y_antes, col = "blue", lwd = 2)


# Eliminar los NA de la columna cantidad de personas
estatura_despues <- na.omit(DataNA$Cantidad.de.personas)

# Graficar el histograma
hist(estatura_despues, breaks = 30, probability = TRUE, main = "Distribución Cantidad de personas", xlab = "Cantidad de personas", col = "lightblue")

# Agregar la curva de densidad de los datos
#lines(density(estatura_despues), col = "red", lwd = 2)


# Calcular la media y desviación estÔndar de los datos
mean_estatura_despues <- mean(estatura_despues)
sd_estatura_despues <- sd(estatura_despues)

# Crear la secuencia de valores para la curva normal
x_despues <- seq(min(estatura_despues), max(estatura_despues), length = 100)

# Agregar la curva de la distribución normal teórica
y_despues <- dnorm(x_despues, mean = mean_estatura_despues, sd = sd_estatura_despues)
lines(x_despues, y_despues, col = "blue", lwd = 2)

# Restablecer la disposición de las grÔficas a una única por ventana
par(mfrow = c(1, 1))
clean_data <- na.omit(DataNA$Edad)

# Realizar la prueba de normalidad (Lilliefors)
resultado_prueba <- lillie.test(clean_data)

print(resultado_prueba)
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  clean_data
## D = 0.061798, p-value < 2.2e-16
clean_data <- na.omit(DataNA$Cantidad.de.personas)

# Realizar la prueba de normalidad (Lilliefors)
resultado_prueba <- lillie.test(clean_data)

print(resultado_prueba)
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  clean_data
## D = 0.43425, p-value < 2.2e-16
# Aplicar la transformación logarítmica a la columna Edad (sumar 1 para evitar problemas con log(0))
DataNA$Transf_Log <- log(DataNA$Edad + 1)

# Configurar el Ɣrea de grƔficos para mostrar dos histogramas lado a lado
par(mfrow = c(1, 2))  

# Graficar el histograma original de la variable Edad
hist(DataNA$Edad, main = "Histograma Original", xlab = "Edad", col = "lightblue", breaks = 20)

# Graficar el histograma de la variable transformada logarĆ­tmicamente
hist(DataNA$Transf_Log, main = "Histograma Transformado (Log)", xlab = "Edad Transformada", col = "lightgreen", breaks = 20)

# Restaurar configuración de grÔficos a una sola ventana (opcional)
par(mfrow = c(1, 1))

Prueba Lilifors Para La Edad Despues De La Transformacion Logaritmica

# Aplicar la prueba de Lilliefors a la variable original Edad
lilliefors_original <- lillie.test(DataNA$Edad)

# Aplicar la prueba de Lilliefors a la variable transformada Transf_Log
lilliefors_transf_log <- lillie.test(DataNA$Transf_Log)

# Imprimir los resultados de la prueba
print(lilliefors_original)
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  DataNA$Edad
## D = 0.061798, p-value < 2.2e-16
print(lilliefors_transf_log)
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  DataNA$Transf_Log
## D = 0.061128, p-value < 2.2e-16

Prueba Lilifors Para La Variable Cantidad De Personas Despues De La Transformacion Logaritmica

# Aplicar la transformación logarítmica a la columna Edad (sumar 1 para evitar problemas con log(0))
DataNA$Transf_Log <- log(DataNA$Cantidad.de.personas + 1)

# Configurar el Ɣrea de grƔficos para mostrar dos histogramas lado a lado
par(mfrow = c(1, 2))  

# Graficar el histograma original de la variable Edad
hist(DataNA$Cantidad.de.personas, main = "Histograma Original", xlab = "Cantidad.de.personas", col = "lightblue", breaks = 20)

# Graficar el histograma de la variable transformada logarĆ­tmicamente
hist(DataNA$Transf_Log, main = "Histograma Transformado (Log)", xlab = "Cantidad.de.personas transformada", col = "lightgreen", breaks = 20)

# Restaurar configuración de grÔficos a una sola ventana (opcional)
par(mfrow = c(1, 1))
# Aplicar la prueba de Lilliefors a la variable original Cantidad.de.personas
lilliefors_original <- lillie.test(DataNA$Cantidad.de.personas)

# Aplicar la prueba de Lilliefors a la variable transformada Transf_Log
lilliefors_transf_log <- lillie.test(DataNA$Transf_Log)

# Imprimir los resultados de la prueba
print(lilliefors_original)
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  DataNA$Cantidad.de.personas
## D = 0.43425, p-value < 2.2e-16
print(lilliefors_transf_log)
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  DataNA$Transf_Log
## D = 0.44585, p-value < 2.2e-16

Notamos que la transformación logarítmica no ha logrado mejorar el ajuste a una distribución normal para ninguna de las variables.

Estadistica Descriptiva

#install.packages("kableExtra")
#install.packages("ggthemes")
#install.packages("plotly")
#install.packages("tidyverse")
#install.packages("broom")
library(kableExtra)
## 
## Attaching package: 'kableExtra'
## The following object is masked from 'package:dplyr':
## 
##     group_rows
library(ggplot2)
library(dplyr)
library(gridExtra)
library(ggthemes)
library(plotly)
## 
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## The following object is masked from 'package:stats':
## 
##     filter
## The following object is masked from 'package:graphics':
## 
##     layout
library(tidyverse)
library(broom)

#Analisis Univariado.

# NĆŗmero de paĆ­ses Ćŗnicos
num_paises <- length(unique(DataNA$PaĆ­s))
print(paste("El numero total de paises es:" , num_paises))
## [1] "El numero total de paises es: 193"

Ya la cantidad de paises que se encuentran en la base de datos es numerosa, no se verƔ bien en un grƔfico, por lo tanto solo visualizaremos el top 20.

Pais (Top 20).

# Filtrar los datos para los 10 paƭses con mƔs registros
top_10_paises <- DataNA %>%
  count(PaĆ­s) %>%
  top_n(10, n) %>%
  pull(PaĆ­s)

Data_top10 <- DataNA %>%
  filter(PaĆ­s %in% top_10_paises)

#Filtrar los top 3 paĆ­ses
top_3_paises <- DataNA %>%
  count(PaĆ­s) %>%
  top_n(3, n) %>%
  pull(PaĆ­s)

Data_top3 <- DataNA %>%
  filter(PaĆ­s %in% top_3_paises)

# Calcular frecuencias de paĆ­ses
pais_frecuencia <- DataNA %>%
  group_by(PaĆ­s) %>%
  summarise(Frecuencia = n()) %>%
  arrange(desc(Frecuencia))

# Filtrar los top 20 paĆ­ses
top_20_paises <- pais_frecuencia %>% top_n(20, wt = Frecuencia)

# GrƔfico de barras ordenadas para los top 20 paƭses
ggplot(top_20_paises, aes(x = reorder(PaĆ­s, -Frecuencia), y = Frecuencia)) +
  geom_bar(stat = "identity", fill = "#3FA0FFFF") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1, size = 10)) +
  labs(title = "Top 20 Paƭses con MƔs Colombianos Registrados", x = "Paƭs", y = "Cantidad")

# GrƔfico de barras ordenadas para los top 20 paƭses con escala logarƭtmica en Y
ggplot(top_20_paises, aes(x = reorder(PaĆ­s, -Frecuencia), y = Frecuencia)) +
  geom_bar(stat = "identity", fill = "#3FA0FFFF") +
  scale_y_log10() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1, size = 10)) +
  labs(title = "Top 20 Paƭses con MƔs Colombianos Registrados (Escala Logarƭtmica)", 
       x = "PaĆ­s", y = "Cantidad (log10)")

Pais(Top 3).

# Obtener el top 3 de paĆ­ses
top_3_paises <- pais_frecuencia %>% top_n(3, wt = Frecuencia)

# Mostrar el top 3
print(top_3_paises)
## # A tibble: 3 Ɨ 2
##   PaĆ­s           Frecuencia
##   <chr>               <int>
## 1 ESTADOS UNIDOS     215007
## 2 ESPAƑA             147742
## 3 VENEZUELA          105125
#Hice grƔfico de barras, pero no se si quieran uno circular.

ggplot(top_3_paises, aes(x = reorder(PaĆ­s, -Frecuencia), y = Frecuencia)) +
  geom_bar(stat = "identity", fill = "#3FA0FFFF") +  # Color azul personalizado
  geom_text(aes(label = Frecuencia), vjust = -0.3) +  # Etiquetas encima de las barras
  labs(title = "Top 3 Paƭses con MƔs Colombianos Registrados", 
       x = "PaĆ­s", 
       y = "Cantidad") +
  theme_minimal() +  # Tema minimalista
  theme(plot.title = element_text(hjust = 0.5),  # Centrar el tĆ­tulo
        axis.text.x = element_text(angle = 45, hjust = 1))  # Rotar las etiquetas del eje x

Grupos de edad (Total).

tabla_edad <- DataNA %>%
  group_by(Grupo.edad) %>%
  summarise(Frecuencia = n()) %>%
  mutate(Porcentaje = round((Frecuencia / sum(Frecuencia)) * 100, 2))

# Mostrar la tabla usando kableExtra
kable(tabla_edad, col.names = c("Grupo de Edad", "Frecuencia", "Porcentaje (%)"), 
      caption = "Distribución por Grupo de Edad") %>%
  kable_styling(full_width = FALSE, bootstrap_options = c("striped","bordered", "responsive", "hover", "condensed"))
Distribución por Grupo de Edad
Grupo de Edad Frecuencia Porcentaje (%)
ADOLESCENTE 9780 1.25
ADULTO 533179 68.16
ADULTO JOVEN 68714 8.78
ADULTO MAYOR 159445 20.38
DESCONOCIDO 1018 0.13
INFANTE 7238 0.93
PRIMERA INFANCIA 2876 0.37

Grafico Barras Grupo Edad.

#Grafico de Barras
ggplot(DataNA, aes(x = Grupo.edad)) +
  geom_bar(fill = "#3FA0FFFF", color = "black") +  # Color de las barras y bordes
  labs(
    title = "Distribución por Grupo de Edad",
    x = "Grupo de Edad",
    y = "Cantidad"
  ) +
  theme_minimal() +  # Tema mƔs limpio
  theme(
    axis.text.x = element_text(angle = 45, hjust = 1),  # Ɓngulo del texto en el eje x
    plot.title = element_text(hjust = 0.5)  # Centrar el tĆ­tulo
  )

Grupos de edad (Top 3). Tabla top 3.

# Crear la tabla de frecuencias y porcentajes por grupo de edad para los top 3 paĆ­ses
tabla_gedad_top3 <- Data_top3 %>%
  group_by(Grupo.edad) %>%
  summarise(Frecuencia = n()) %>%
  mutate(Porcentaje = round((Frecuencia / sum(Frecuencia)) * 100, 2))

# Mostrar la tabla usando kableExtra
kable(tabla_gedad_top3, col.names = c("Grupo de Edad", "Frecuencia", "Porcentaje (%)"), 
      caption = "Distribución por Grupo de Edad en el Top 3 de Países") %>%
  kable_styling(full_width = FALSE, bootstrap_options = c("striped", "bordered", "responsive", "hover", "condensed"))
Distribución por Grupo de Edad en el Top 3 de Países
Grupo de Edad Frecuencia Porcentaje (%)
ADOLESCENTE 4904 1.05
ADULTO 303180 64.80
ADULTO JOVEN 38677 8.27
ADULTO MAYOR 115624 24.71
DESCONOCIDO 607 0.13
INFANTE 3520 0.75
PRIMERA INFANCIA 1362 0.29

Grafico de Barras.

# Paso 1: Encontrar los 3 paĆ­ses con la mayor cantidad de personas
top_countries <- DataNA %>%
  group_by(PaĆ­s) %>%
  summarise(Total_Personas = sum(Cantidad.de.personas, na.rm = TRUE)) %>%
  top_n(3, Total_Personas) %>%
  pull(PaĆ­s)

# Paso 2: Filtrar los datos para estos paĆ­ses
Data_top3 <- DataNA %>%
  filter(PaĆ­s %in% top_countries)

# Tabla
ggplot(Data_top3, aes(x = Grupo.edad, fill = PaĆ­s)) +
  geom_bar(position = "dodge", stat = "count") +
  labs(title = "Distribución por Edad en los Top 3 Países",
       x = "Grupo de Edad",
       y = "Cantidad de Personas") +
  scale_fill_brewer(palette = "Set1") +
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5, size = 16),
    axis.title = element_text(size = 14),
    axis.text.x = element_text(angle = 45, hjust = 1),  # Rotar las etiquetas del eje x 45 grados
    legend.position = "right"  # Colocar la leyenda a la derecha
  )

Edad (Total).

# Resumen estadĆ­stico de la variable Edad en el conjunto de datos completo
resumen_edad_total <- DataNA %>%
  summarise(
    Minimo = min(Edad, na.rm = TRUE),
    Primer_Cuartil = quantile(Edad, 0.25, na.rm = TRUE),
    Mediana = median(Edad, na.rm = TRUE),
    Media = mean(Edad, na.rm = TRUE),
    Tercer_Cuartil = quantile(Edad, 0.75, na.rm = TRUE),
    Maximo = max(Edad, na.rm = TRUE),
    Desviacion_Estandar = sd(Edad, na.rm = TRUE)
  )

# Mostrar el resumen estadĆ­stico
print(resumen_edad_total)
##   Minimo Primer_Cuartil Mediana    Media Tercer_Cuartil Maximo
## 1      0             34      44 45.84603             57    119
##   Desviacion_Estandar
## 1            16.07107
# Histograma de la variable Edad en el conjunto de datos completo
ggplot(DataNA, aes(x = Edad)) +
  geom_histogram(binwidth = 5, fill = "#3FA0FFFF", color = "black") +
  labs(
    title = "Distribución de la Edad (Total)",
    x = "Edad (aƱos)",
    y = "Frecuencia"
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5, face = "bold", size = 14),
    axis.title.x = element_text(face = "bold", size = 12),
    axis.title.y = element_text(face = "bold", size = 12)
  )

# Boxplot horizontal para la variable Edad en el conjunto de datos completo
ggplot(DataNA, aes(x = Edad)) +
  geom_boxplot(fill = "#3FA0FFFF", color = "black", outlier.color = "red", outlier.shape = 16, outlier.size = 2) +
  labs(
    title = "Distribución de la Edad",
    x = "Edad (aƱos)"
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5, face = "bold", size = 14),
    axis.title.x = element_text(face = "bold", size = 12),
    axis.text.x = element_text(size = 10),
    axis.text.y = element_blank(),
    axis.ticks.y = element_blank()
  )

Edad (Top 3).

# Resumen estadĆ­stico de la variable Edad en el top 3 de paĆ­ses
resumen_edad_top <- Data_top3 %>%
  summarise(
    Minimo = min(Edad, na.rm = TRUE),
    Primer_Cuartil = quantile(Edad, 0.25, na.rm = TRUE),
    Mediana = median(Edad, na.rm = TRUE),
    Media = mean(Edad, na.rm = TRUE),
    Tercer_Cuartil = quantile(Edad, 0.75, na.rm = TRUE),
    Maximo = max(Edad, na.rm = TRUE),
    Desviacion_Estandar = sd(Edad, na.rm = TRUE)
  )

# Mostrar el resumen estadĆ­stico
print(resumen_edad_top)
##   Minimo Primer_Cuartil Mediana   Media Tercer_Cuartil Maximo
## 1      0             35      46 47.7773             59    119
##   Desviacion_Estandar
## 1            16.65299
# Histograma de la variable Edad en el top 3 de paĆ­ses
ggplot(Data_top3, aes(x = Edad)) +
  geom_histogram(binwidth = 5, fill = "#3FA0FFFF", color = "black") +
  labs(
    title = "Distribución de la Edad en el Top 3 de Países",
    x = "Edad (aƱos)",
    y = "Frecuencia"
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5, face = "bold", size = 14),
    axis.title.x = element_text(face = "bold", size = 12),
    axis.title.y = element_text(face = "bold", size = 12)
  )

# Boxplot horizontal para la variable Edad en el top 3 de paĆ­ses
ggplot(Data_top3, aes(x = Edad)) +
  geom_boxplot(fill = "#3FA0FFFF", color = "black", outlier.color = "red", outlier.shape = 16, outlier.size = 2) +
  labs(
    title = "Distribución de la Edad en el Top 3 de Países",
    x = "Edad (aƱos)"
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5, face = "bold", size = 14),
    axis.title.x = element_text(face = "bold", size = 12),
    axis.text.x = element_text(size = 10),
    axis.text.y = element_blank(),
    axis.ticks.y = element_blank()
  )

Ɓrea de Conocimiento (Total).

# Calcular la tabla de frecuencia y porcentaje
tabla_area_conocimiento <- DataNA %>%
  group_by(Area.Conocimiento) %>%
  summarise(
    Frecuencia = n(),
    Porcentaje = round((n() / nrow(DataNA)) * 100, 2)
  ) %>%
  arrange(desc(Frecuencia))

# Mostrar la tabla de frecuencia y porcentaje con kable
kable(tabla_area_conocimiento, col.names = c("Ɓrea de Conocimiento", "Frecuencia", "Porcentaje (%)"),
      caption = "Distribución por Área de Conocimiento") %>%
  kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover", "condensed", "responsive")) %>%
  column_spec(1, bold = TRUE, width = "15em") %>%
  column_spec(2, width = "5em") %>%
  column_spec(3, width = "5em")
Distribución por Área de Conocimiento
Ɓrea de Conocimiento Frecuencia Porcentaje (%)
NO INDICA 209936 26.84
NINGUNA 190204 24.31
INGENIERƍA, ARQUITECTURA Y AFINES 95939 12.26
ECONOMƍA, ADMINISTRACIƓN CONTADURIA Y AFINES 88555 11.32
CIENCIAS SOCIALES Y HUMANAS 60682 7.76
CIENCIAS DE LA SALUD 60672 7.76
BELLAS ARTES 28818 3.68
CIENCIAS DE LA EDUCACIƓN 23230 2.97
MATEMƁTICAS Y CIENCIAS NATURALES 10962 1.40
AGRONOMƍA, VETERINARIA Y AFINES 5047 0.65
COCINA Y CULINARIA 3588 0.46
AGRONOMƍA, VETERINARIA Y ZOOTECNIA 2725 0.35
AVIACIƓN 1892 0.24
# GrƔfico de barras
ggplot(DataNA, aes(x = reorder(Area.Conocimiento, -table(Area.Conocimiento)[Area.Conocimiento]), y = ..count..)) +
  geom_bar(fill = "#3FA0FFFF", color = "black") +
  theme_minimal() +
  labs(title = "Distribución por Área de Conocimiento",
       x = "Ɓrea de Conocimiento",
       y = "Cantidad") +
  theme(
    axis.text.x = element_text(angle = 45, hjust = 1),
  )
## Warning: The dot-dot notation (`..count..`) was deprecated in ggplot2 3.4.0.
## ℹ Please use `after_stat(count)` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

Ɓrea de Conocimiento (Top 3).

tabla_area_conocimiento <- Data_top3 %>%
  group_by(Area.Conocimiento) %>%
  summarise(
    Frecuencia = n(),
    Porcentaje = round((n() / nrow(Data_top3)) * 100, 2)
  ) %>%
  arrange(desc(Frecuencia))

# Mostrar la tabla de frecuencia y porcentaje con kable
kable(tabla_area_conocimiento, col.names = c("Ɓrea de Conocimiento", "Frecuencia", "Porcentaje (%)"),
      caption = "Distribución por Área de Conocimiento en los Top 3 Países") %>%
  kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover", "condensed", "responsive")) %>%
  column_spec(1, bold = TRUE, width = "15em") %>%
  column_spec(2, width = "5em") %>%
  column_spec(3, width = "5em")
Distribución por Área de Conocimiento en los Top 3 Países
Ɓrea de Conocimiento Frecuencia Porcentaje (%)
NO INDICA 131154 28.03
NINGUNA 113581 24.28
INGENIERƍA, ARQUITECTURA Y AFINES 53161 11.36
ECONOMƍA, ADMINISTRACIƓN CONTADURIA Y AFINES 52203 11.16
CIENCIAS DE LA SALUD 38959 8.33
CIENCIAS SOCIALES Y HUMANAS 34744 7.43
BELLAS ARTES 16262 3.48
CIENCIAS DE LA EDUCACIƓN 14666 3.13
MATEMƁTICAS Y CIENCIAS NATURALES 5166 1.10
AGRONOMƍA, VETERINARIA Y AFINES 2701 0.58
COCINA Y CULINARIA 2301 0.49
AGRONOMƍA, VETERINARIA Y ZOOTECNIA 1705 0.36
AVIACIƓN 1271 0.27
# GrƔfico de barras
ggplot(Data_top3, aes(x = reorder(Area.Conocimiento, -table(Area.Conocimiento)[Area.Conocimiento]), y = ..count..)) +
  geom_bar(fill = "#3FA0FFFF", color = "black") +
  theme_minimal() +
  labs(title = "Distribución por Área de Conocimiento",
       x = "Ɓrea de Conocimiento",
       y = "Cantidad") +
  theme(
    axis.text.x = element_text(angle = 45, hjust = 1),
  )

Nivel AcadƩmico (Total). Tabla.

# Calcular la tabla de frecuencia
tabla_frecuencia <- DataNA %>%
  group_by(Nivel.AcadƩmico) %>%
  summarise(
    Frecuencia = n(),
    Porcentaje = round((n() / nrow(DataNA)) * 100, 2)
  ) %>%
  arrange(desc(Frecuencia))

# Mostrar la tabla de frecuencia con kable
kable(tabla_frecuencia, col.names = c("Nivel AcadƩmico", "Frecuencia", "Porcentaje (%)"),
      caption = "Distribución por Nivel Académico") %>%
  kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover", "condensed", "responsive")) %>%
  column_spec(1, bold = TRUE, width = "15em") %>%
  column_spec(2, width = "5em") %>%
  column_spec(3, width = "5em")
Distribución por Nivel Académico
Nivel AcadƩmico Frecuencia Porcentaje (%)
NO INDICA 272179 34.79
BACHILLERATO 148056 18.93
PREGRADO - PROFESIONAL 137517 17.58
PRIMARIA 65411 8.36
PREGRADO - TƉCNICO PROFESIONAL 52792 6.75
POSTGRADO - MAESTRIA 32865 4.20
PREGRADO - TECNOLƓGICO 28101 3.59
POSTGRADO - ESPECIALIZACIƓN 20619 2.64
NINGUNO 17062 2.18
POSTGRADO - DOCTORADO 7468 0.95
SIN PROFESIƓN 180 0.02

Barras apilado.

# Definir la paleta de colores
paleta_colores <- c(
  "NINGUNO" = "#FFAD72FF",
  "SIN PROFESIƓN" = "#F76D5EFF",
  "PRIMARIA" = "#FFE099FF",
  "BACHILLERATO" = "#FFFFBFFF",
  "PREGRADO - TƉCNICO PROFESIONAL" = "#E0FFFFFF",
  "PREGRADO - TECNOLƓGICO" = "#AAF7FFFF",
  "PREGRADO - PROFESIONAL" = "#72D9FFFF",
  "POSTGRADO - MAESTRIA" = "#3FA0FFFF",
  "POSTGRADO - ESPECIALIZACIƓN" = "#264DFFFF",
  "POSTGRADO - DOCTORADO" = "#290AD8FF",
  "NO INDICA" = "#A50021FF"
)


# Ordenar los niveles acadƩmicos de menor a mayor
DataNA <- DataNA %>%
  mutate(Nivel.AcadƩmico = factor(Nivel.AcadƩmico, 
                                  levels = c("NO INDICA","NINGUNO", "SIN PROFESIƓN",
                                             "PRIMARIA", "BACHILLERATO", 
                                             "PREGRADO - TƉCNICO PROFESIONAL", 
                                             "PREGRADO - TECNOLƓGICO", 
                                             "PREGRADO - PROFESIONAL", 
                                             "POSTGRADO - MAESTRIA", 
                                             "POSTGRADO - ESPECIALIZACIƓN", 
                                             "POSTGRADO - DOCTORADO")))




ggplot(DataNA, aes(x = "", fill = Nivel.AcadƩmico)) +
  geom_bar(width = 1, stat = "count") +
  scale_fill_manual(values = paleta_colores) +  # Aplicar la paleta de colores
  labs(title = "Distribución por Nivel Académico",
       x = "",
       y = "Cantidad",
       fill = "Nivel AcadƩmico") +
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5, face = "bold", size = 14),
    axis.title.x = element_text(face = "bold", size = 12),
    axis.title.y = element_text(face = "bold", size = 12),
    axis.text.x = element_text(angle = 45, hjust = 1, size = 10),
    axis.text.y = element_text(size = 10),
    panel.grid.major.x = element_blank(),
    panel.grid.minor.x = element_blank()
  )

Nivel AcadƩmico (Top 3). Tabla.

# Calcular la tabla de frecuencia
tabla_frecuencia <- Data_top3 %>%
  group_by(Nivel.AcadƩmico) %>%
  summarise(
    Frecuencia = n(),
    Porcentaje = round((n() / nrow(Data_top3)) * 100, 2)
  ) %>%
  arrange(desc(Frecuencia))

# Mostrar la tabla de frecuencia con kable
kable(tabla_frecuencia, col.names = c("Nivel AcadƩmico", "Frecuencia", "Porcentaje (%)"),
      caption = "Distribución por Nivel Académico") %>%
  kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover", "condensed", "responsive")) %>%
  column_spec(1, bold = TRUE, width = "15em") %>%
  column_spec(2, width = "5em") %>%
  column_spec(3, width = "5em")
Distribución por Nivel Académico
Nivel AcadƩmico Frecuencia Porcentaje (%)
NO INDICA 148262 31.69
BACHILLERATO 94906 20.28
PREGRADO - PROFESIONAL 81721 17.47
PRIMARIA 46345 9.91
PREGRADO - TƉCNICO PROFESIONAL 36950 7.90
PREGRADO - TECNOLƓGICO 19290 4.12
POSTGRADO - MAESTRIA 14915 3.19
NINGUNO 11764 2.51
POSTGRADO - ESPECIALIZACIƓN 9825 2.10
POSTGRADO - DOCTORADO 3762 0.80
SIN PROFESIƓN 134 0.03

Apilado.

# Ordenar los niveles acadƩmicos de menor a mayor
Data_top3 <- Data_top3 %>%
  mutate(Nivel.AcadƩmico = factor(Nivel.AcadƩmico, 
                                  levels = c("NO INDICA","NINGUNO", "SIN PROFESIƓN",
                                             "PRIMARIA", "BACHILLERATO", 
                                             "PREGRADO - TƉCNICO PROFESIONAL", 
                                             "PREGRADO - TECNOLƓGICO", 
                                             "PREGRADO - PROFESIONAL", 
                                             "POSTGRADO - MAESTRIA", 
                                             "POSTGRADO - ESPECIALIZACIƓN", 
                                             "POSTGRADO - DOCTORADO")))




ggplot(Data_top3, aes(Paƭs, fill = Nivel.AcadƩmico)) +
  geom_bar( stat = "count") +
  scale_fill_manual(values = paleta_colores) +  # Aplicar la paleta de colores
  labs(title = "Distribución por Nivel Académico",
       x = "",
       y = "Cantidad",
       fill = "Nivel AcadƩmico") +
  theme_bw() +
  theme(
    plot.title = element_text(hjust = 0.5, face = "bold", size = 14),
    axis.title.x = element_text(face = "bold", size = 12),
    axis.title.y = element_text(face = "bold", size = 12),
    axis.text.x = element_text(angle = 45, hjust = 1, size = 10),
    axis.text.y = element_text(size = 10),
    panel.grid.major.x = element_blank(),
    panel.grid.minor.x = element_blank()
  )

Estado Civil (Total). Tabla.

# Tabla de frecuencia y porcentaje para Estado Civil
tabla_estado_civil <- DataNA%>%
  group_by(Estado.civil) %>%
  summarise(
    Frecuencia = n(),
    Porcentaje = round((n() / nrow(DataNA)) * 100, 2)
  ) %>%
  arrange(desc(Frecuencia))

# Mostrar la tabla usando kable
kable(tabla_estado_civil, col.names = c("Estado Civil", "Frecuencia", "Porcentaje (%)"),
      caption = "Distribución por Estado Civil") %>%
  kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover", "condensed", "responsive")) %>%
  column_spec(1, bold = TRUE, width = "15em") %>%
  column_spec(2, width = "5em") %>%
  column_spec(3, width = "5em")
Distribución por Estado Civil
Estado Civil Frecuencia Porcentaje (%)
SOLTERO 325863 41.66
CASADO 265168 33.90
UNION_LIBRE 65410 8.36
DESCONOCIDO 56712 7.25
DIVORCIADO 48731 6.23
VIUDO 17310 2.21
SEPARADO_MATRIMONIO 2042 0.26
SEPARADO_UNION_LIBRE 1014 0.13
# GrƔfico de barras
ggplot(DataNA, aes(x = reorder(Estado.civil, -table(Estado.civil)[Estado.civil]))) +
  geom_bar(fill = "#3FA0FFFF", color = "black") +
  theme_minimal() +
  labs(title = "Distribución por Estado Civil (Total)",
       x = "Estado Civil",
       y = "Cantidad") +
  theme(
    plot.title = element_text(hjust = 0.5, face = "bold", size = 14),
    axis.title.x = element_text(face = "bold", size = 12),
    axis.title.y = element_text(face = "bold", size = 12),
    axis.text.x = element_text(angle = 45, hjust = 1, size = 10),
    axis.text.y = element_text(size = 10)
  )

Estado Civil (Top 3).

# GrƔfico de barras para Estado Civil en el top 3 de paƭses
ggplot(Data_top3, aes(x = reorder(Estado.civil, -table(Estado.civil)[Estado.civil]), fill = PaĆ­s)) +
  geom_bar(position = "dodge", color = "black") +
  scale_fill_brewer(palette = "Set1") +
  theme_minimal() +
  labs(title = "Distribución por Estado Civil en el Top 3 de Países",
       x = "Estado Civil",
       y = "Cantidad",
       fill = "PaĆ­s") +
  theme(
    plot.title = element_text(hjust = 0.5, face = "bold", size = 14),
    axis.title.x = element_text(face = "bold", size = 12),
    axis.title.y = element_text(face = "bold", size = 12),
    axis.text.x = element_text(angle = 45, hjust = 1, size = 10),
    axis.text.y = element_text(size = 10),
    legend.position = "top"
  )

GƩnero (Total).

# Tabla de frecuencia y porcentaje para GƩnero
tabla_genero <- DataNA %>%
  group_by(GƩnero) %>%
  summarise(
    Frecuencia = n(),
    Porcentaje = round((n() / nrow(DataNA)) * 100, 2)
  ) %>%
  arrange(desc(Frecuencia))

# Mostrar la tabla usando kable
kable(tabla_genero, col.names = c("GƩnero", "Frecuencia", "Porcentaje (%)"),
      caption = "Distribución por Género") %>%
  kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover", "condensed", "responsive")) %>%
  column_spec(1, bold = TRUE, width = "15em") %>%
  column_spec(2, width = "5em") %>%
  column_spec(3, width = "5em")
Distribución por Género
GƩnero Frecuencia Porcentaje (%)
FEMENINO 432511 55.29
MASCULINO 349732 44.71
NO_BINARIO 7 0.00
# GrƔfico de barras
ggplot(DataNA, aes(x = GƩnero)) +
  geom_bar() +
  labs(title = "Distribución por Género", x = "Género", y = "Cantidad")

# Calcular frecuencias y porcentajes
data_summary <- DataNA %>%
  group_by(GƩnero) %>%
  summarise(Frecuencia = n()) %>%
  mutate(Porcentaje = round((Frecuencia / sum(Frecuencia)) * 100, 2))

# Crear el grƔfico de pastel
fig <- plot_ly(data_summary, 
                labels = ~GƩnero, 
                values = ~Frecuencia, 
                type = 'pie',
                textinfo = 'label+percent',
                marker = list(colors = c("#DD75D3FF", "#7E8CF3FF", "#719F47FF")),
                showlegend = TRUE) %>%
  layout(title = 'Distribución por Género',
         xaxis = list(showgrid = TRUE, zeroline = TRUE),
         yaxis = list(showgrid = TRUE, zeroline = TRUE))

# Mostrar el grƔfico
fig

GƩnero (Top 3).

# GrƔfico de barras apiladas para GƩnero en el top 3 de paƭses
ggplot(Data_top3, aes(x = reorder(GƩnero, -table(GƩnero)[GƩnero]), fill = Paƭs)) +
  geom_bar(position = "dodge", color = "black") +
  scale_fill_brewer(palette = "Set1") +
  theme_minimal() +
  labs(title = "Distribución por Género en el Top 3 de Países",
       x = "GƩnero",
       y = "Cantidad",
       fill = "PaĆ­s") +
  theme(
    plot.title = element_text(hjust = 0.5, face = "bold", size = 14),
    axis.title.x = element_text(face = "bold", size = 12),
    axis.title.y = element_text(face = "bold", size = 12),
    axis.text.x = element_text(size = 10),
    axis.text.y = element_text(size = 10),
    legend.position = "top"
  )

Etnia de la Persona (Total).

# Tabla de frecuencia
table(DataNA$Etnia.de.la.persona)
## 
##                      AFRODESCENDIENTE                                GITANO 
##                                 17162                                   422 
##                              INDƍGENA                               NINGUNA 
##                                  3503                                394827 
##                                  OTRO             PALENQUERO DE SAN BASILIO 
##                                323110                                   149 
## RAIZAL DEL ARCHIPIELAGO DE SAN ANDRES                  SIN ETNIA REGISTRADA 
##                                   435                                 42642
# GrƔfico de barras horizontal para Etnia
ggplot(DataNA, aes(x = reorder(Etnia.de.la.persona, -table(Etnia.de.la.persona)[Etnia.de.la.persona]))) +
  geom_bar(fill = "#719F47FF", color = "black") +
  theme_minimal() +
  labs(title = "Distribución por Etnia de la Persona",
       x = "Cantidad",
       y = "Etnia") +
  theme(
    plot.title = element_text(hjust = 0.5, face = "bold", size = 14),
    axis.title.x = element_text(face = "bold", size = 12),
    axis.title.y = element_text(face = "bold", size = 12),
    axis.text.x = element_text(size = 10),
    axis.text.y = element_text(size = 10)
  ) +
  coord_flip()  # Voltear para una lectura mƔs fƔcil

Etnia de la Persona (Top 3).

# GrƔfico de barras apiladas horizontal para Etnia en el top 3 de paƭses
ggplot(Data_top3, aes(x = reorder(Etnia.de.la.persona, -table(Etnia.de.la.persona)[Etnia.de.la.persona]), fill = PaĆ­s)) +
  geom_bar(position = "dodge", color = "black") +
  scale_fill_brewer(palette = "Set1") +
  theme_minimal() +
  labs(title = "Distribución por Etnia en el Top 3 de Países",
       x = "Etnia",
       y = "Cantidad",
       fill = "PaĆ­s") +
  theme(
    plot.title = element_text(hjust = 0.5, face = "bold", size = 14),
    axis.title.x = element_text(face = "bold", size = 12),
    axis.title.y = element_text(face = "bold", size = 12),
    axis.text.x = element_text(size = 10),
    axis.text.y = element_text(size = 10),
    legend.position = "top"
  ) +
  coord_flip()  # Voltear para una lectura mƔs fƔcil

#Analisis Multivariado. Relación entre Género y Nivel Académico Esto estÔ pendiente, no confio en el resultado, me parece que tenemos un falso positivo, Error tipo 1, plis soluciones. Hipótesis: Existen diferencias significativas en el nivel académico alcanzado entre géneros.

# Tabla de contingencia
tabla_genero_academico <- table(DataNA$GƩnero, DataNA$Nivel.AcadƩmico)
print(tabla_genero_academico)
##             
##              NO INDICA NINGUNO SIN PROFESIƓN PRIMARIA BACHILLERATO
##   FEMENINO      149409    8994           104    34677        80586
##   MASCULINO     122770    8068            76    30734        67466
##   NO_BINARIO         0       0             0        0            4
##             
##              PREGRADO - TƉCNICO PROFESIONAL PREGRADO - TECNOLƓGICO
##   FEMENINO                            30344                  15355
##   MASCULINO                           22448                  12746
##   NO_BINARIO                              0                      0
##             
##              PREGRADO - PROFESIONAL POSTGRADO - MAESTRIA
##   FEMENINO                    79390                18353
##   MASCULINO                   58125                14511
##   NO_BINARIO                      2                    1
##             
##              POSTGRADO - ESPECIALIZACIƓN POSTGRADO - DOCTORADO
##   FEMENINO                         11890                  3409
##   MASCULINO                         8729                  4059
##   NO_BINARIO                           0                     0
# Prueba de Chi-cuadrado
prueba_chi_genero_academico <- chisq.test(tabla_genero_academico)
## Warning in stats::chisq.test(x, y, ...): Chi-squared approximation may be
## incorrect
prueba_chi_genero_academico
## 
##  Pearson's Chi-squared test
## 
## data:  tabla_genero_academico
## X-squared = 1027.3, df = 20, p-value < 2.2e-16
# Verificar conteos esperados
prueba_chi_genero_academico$expected
##             
##                 NO INDICA      NINGUNO SIN PROFESIƓN     PRIMARIA BACHILLERATO
##   FEMENINO   1.504895e+05 9433.6883119  99.523144775 3.616616e+04 81861.104015
##   MASCULINO  1.216871e+05 7628.1590080  80.475244487 2.924426e+04 66193.571099
##   NO_BINARIO 2.435606e+00    0.1526801   0.001610738 5.853333e-01     1.324886
##             
##              PREGRADO - TƉCNICO PROFESIONAL PREGRADO - TECNOLƓGICO
##   FEMENINO                     2.918903e+04           1.553722e+04
##   MASCULINO                    2.360250e+04           1.256353e+04
##   NO_BINARIO                   4.724116e-01           2.514631e-01
##             
##              PREGRADO - PROFESIONAL POSTGRADO - MAESTRIA
##   FEMENINO             76034.023889         18171.267517
##   MASCULINO            61481.745534         14693.438389
##   NO_BINARIO               1.230577             0.294094
##             
##              POSTGRADO - ESPECIALIZACIƓN POSTGRADO - DOCTORADO
##   FEMENINO                  1.140038e+04          4.129105e+03
##   MASCULINO                 9.218439e+03          3.338828e+03
##   NO_BINARIO                1.845101e-01          6.682774e-02
# Visualización
ggplot(DataNA, aes(x = Nivel.AcadƩmico, fill = GƩnero)) +
  geom_bar(position = "dodge") +
  scale_fill_manual(values = c("#DD75D3FF", "#7E8CF3FF", "#719F47FF")) +
  labs(title = "Distribución del Nivel Académico por Género",
       x = "Nivel AcadƩmico",
       y = "Cantidad") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

Relación entre País y Área de Conocimiento Hipótesis: Ciertos países tienen una mayor concentración de personas en determinadas Ôreas de conocimiento.

# Tabla de contingencia
tabla_pais_area <- table(Data_top10$PaĆ­s, Data_top10$Area.Conocimiento)

# Prueba de Chi-cuadrado
prueba_chi_pais_area <- chisq.test(tabla_pais_area)
prueba_chi_pais_area
## 
##  Pearson's Chi-squared test
## 
## data:  tabla_pais_area
## X-squared = 66389, df = 108, p-value < 2.2e-16
# Visualización
ggplot(Data_top10, aes(x = Area.Conocimiento, fill = PaĆ­s)) +
  geom_bar(position = "dodge") +
  labs(title = "Distribución del Área de Conocimiento por País (Top 10 Países)",
       x = "Ɓrea de Conocimiento",
       y = "Cantidad") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

#Esto es para ver el top 3
# Tabla de contingencia top 3
tabla_pais_area <- table(Data_top3$PaĆ­s, Data_top3$Area.Conocimiento)

# Prueba de Chi-cuadrado
prueba_chi_pais_area <- chisq.test(tabla_pais_area)
prueba_chi_pais_area
## 
##  Pearson's Chi-squared test
## 
## data:  tabla_pais_area
## X-squared = 40736, df = 24, p-value < 2.2e-16
# Visualización
ggplot(Data_top3, aes(x = Area.Conocimiento, fill = PaĆ­s)) +
  geom_bar(position = "dodge") +
  labs(title = "Distribución del Área de Conocimiento por País (Top 3 Países)",
       x = "Ɓrea de Conocimiento",
       y = "Cantidad") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

Relación entre País y Género (Top 10 Países) Hipótesis: Existen diferencias significativas en la proporción de género entre los top 10 países.

# Tabla de contingencia
tabla_pais_genero <- table(DataNA$Paƭs, DataNA$GƩnero)

# Prueba de Chi-cuadrado
prueba_chi_pais_genero <- chisq.test(tabla_pais_genero)
## Warning in stats::chisq.test(x, y, ...): Chi-squared approximation may be
## incorrect
prueba_chi_pais_genero
## 
##  Pearson's Chi-squared test
## 
## data:  tabla_pais_genero
## X-squared = 4057.7, df = 384, p-value < 2.2e-16
# Visualización
ggplot(Data_top10, aes(x = Paƭs, fill = GƩnero)) +
  geom_bar(position = "dodge") +
  labs(title = "Distribución de Género por País",
       x = "PaĆ­s",
       y = "Cantidad") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

Relación entre Edad y Nivel Académico Hipótesis: El nivel académico tiende a aumentar con la edad.

# ANOVA para comparar la Edad media entre los diferentes Niveles AcadƩmicos
anova_edad_nivel <- aov(Edad ~ Nivel.AcadƩmico, data = DataNA)
summary(anova_edad_nivel)
##                     Df    Sum Sq Mean Sq F value Pr(>F)    
## Nivel.AcadƩmico     10   3614823  361482    1425 <2e-16 ***
## Residuals       782239 198423985     254                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Realizar el test post-hoc de Tukey
tukey_result <- TukeyHSD(anova_edad_nivel)

# Mostrar los resultados
print(tukey_result)
##   Tukey multiple comparisons of means
##     95% family-wise confidence level
## 
## Fit: aov(formula = Edad ~ Nivel.AcadƩmico, data = DataNA)
## 
## $Nivel.AcadƩmico
##                                                                   diff
## NINGUNO-NO INDICA                                          -3.76008382
## SIN PROFESIƓN-NO INDICA                                     0.78900903
## PRIMARIA-NO INDICA                                          5.54508506
## BACHILLERATO-NO INDICA                                      2.66873337
## PREGRADO - TƉCNICO PROFESIONAL-NO INDICA                   -2.10136493
## PREGRADO - TECNOLƓGICO-NO INDICA                           -2.08067058
## PREGRADO - PROFESIONAL-NO INDICA                           -0.40639760
## POSTGRADO - MAESTRIA-NO INDICA                             -2.01739089
## POSTGRADO - ESPECIALIZACIƓN-NO INDICA                       0.57727228
## POSTGRADO - DOCTORADO-NO INDICA                             1.75408372
## SIN PROFESIƓN-NINGUNO                                       4.54909285
## PRIMARIA-NINGUNO                                            9.30516888
## BACHILLERATO-NINGUNO                                        6.42881719
## PREGRADO - TƉCNICO PROFESIONAL-NINGUNO                      1.65871889
## PREGRADO - TECNOLƓGICO-NINGUNO                              1.67941324
## PREGRADO - PROFESIONAL-NINGUNO                              3.35368622
## POSTGRADO - MAESTRIA-NINGUNO                                1.74269293
## POSTGRADO - ESPECIALIZACIƓN-NINGUNO                         4.33735610
## POSTGRADO - DOCTORADO-NINGUNO                               5.51416754
## PRIMARIA-SIN PROFESIƓN                                      4.75607603
## BACHILLERATO-SIN PROFESIƓN                                  1.87972434
## PREGRADO - TƉCNICO PROFESIONAL-SIN PROFESIƓN               -2.89037396
## PREGRADO - TECNOLƓGICO-SIN PROFESIƓN                       -2.86967961
## PREGRADO - PROFESIONAL-SIN PROFESIƓN                       -1.19540663
## POSTGRADO - MAESTRIA-SIN PROFESIƓN                         -2.80639992
## POSTGRADO - ESPECIALIZACIƓN-SIN PROFESIƓN                  -0.21173675
## POSTGRADO - DOCTORADO-SIN PROFESIƓN                         0.96507469
## BACHILLERATO-PRIMARIA                                      -2.87635169
## PREGRADO - TƉCNICO PROFESIONAL-PRIMARIA                    -7.64644999
## PREGRADO - TECNOLƓGICO-PRIMARIA                            -7.62575563
## PREGRADO - PROFESIONAL-PRIMARIA                            -5.95148265
## POSTGRADO - MAESTRIA-PRIMARIA                              -7.56247594
## POSTGRADO - ESPECIALIZACIƓN-PRIMARIA                       -4.96781277
## POSTGRADO - DOCTORADO-PRIMARIA                             -3.79100134
## PREGRADO - TƉCNICO PROFESIONAL-BACHILLERATO                -4.77009830
## PREGRADO - TECNOLƓGICO-BACHILLERATO                        -4.74940395
## PREGRADO - PROFESIONAL-BACHILLERATO                        -3.07513097
## POSTGRADO - MAESTRIA-BACHILLERATO                          -4.68612426
## POSTGRADO - ESPECIALIZACIƓN-BACHILLERATO                   -2.09146109
## POSTGRADO - DOCTORADO-BACHILLERATO                         -0.91464965
## PREGRADO - TECNOLƓGICO-PREGRADO - TƉCNICO PROFESIONAL       0.02069435
## PREGRADO - PROFESIONAL-PREGRADO - TƉCNICO PROFESIONAL       1.69496733
## POSTGRADO - MAESTRIA-PREGRADO - TƉCNICO PROFESIONAL         0.08397404
## POSTGRADO - ESPECIALIZACIƓN-PREGRADO - TƉCNICO PROFESIONAL  2.67863721
## POSTGRADO - DOCTORADO-PREGRADO - TƉCNICO PROFESIONAL        3.85544865
## PREGRADO - PROFESIONAL-PREGRADO - TECNOLƓGICO               1.67427298
## POSTGRADO - MAESTRIA-PREGRADO - TECNOLƓGICO                 0.06327969
## POSTGRADO - ESPECIALIZACIƓN-PREGRADO - TECNOLƓGICO          2.65794286
## POSTGRADO - DOCTORADO-PREGRADO - TECNOLƓGICO                3.83475430
## POSTGRADO - MAESTRIA-PREGRADO - PROFESIONAL                -1.61099329
## POSTGRADO - ESPECIALIZACIƓN-PREGRADO - PROFESIONAL          0.98366988
## POSTGRADO - DOCTORADO-PREGRADO - PROFESIONAL                2.16048132
## POSTGRADO - ESPECIALIZACIƓN-POSTGRADO - MAESTRIA            2.59466317
## POSTGRADO - DOCTORADO-POSTGRADO - MAESTRIA                  3.77147461
## POSTGRADO - DOCTORADO-POSTGRADO - ESPECIALIZACIƓN           1.17681144
##                                                                   lwr
## NINGUNO-NO INDICA                                          -4.1646497
## SIN PROFESIƓN-NO INDICA                                    -3.0331513
## PRIMARIA-NO INDICA                                          5.3218596
## BACHILLERATO-NO INDICA                                      2.5031917
## PREGRADO - TƉCNICO PROFESIONAL-NO INDICA                   -2.3451530
## PREGRADO - TECNOLƓGICO-NO INDICA                           -2.4018714
## PREGRADO - PROFESIONAL-NO INDICA                           -0.5759980
## POSTGRADO - MAESTRIA-NO INDICA                             -2.3167474
## POSTGRADO - ESPECIALIZACIƓN-NO INDICA                       0.2069972
## POSTGRADO - DOCTORADO-NO INDICA                             1.1528031
## SIN PROFESIƓN-NINGUNO                                       0.7080939
## PRIMARIA-NINGUNO                                            8.8644952
## BACHILLERATO-NINGUNO                                        6.0143684
## PREGRADO - TƉCNICO PROFESIONAL-NINGUNO                      1.2072808
## PREGRADO - TECNOLƓGICO-NINGUNO                              1.1818857
## PREGRADO - PROFESIONAL-NINGUNO                              2.9375997
## POSTGRADO - MAESTRIA-NINGUNO                                1.2589802
## POSTGRADO - ESPECIALIZACIƓN-NINGUNO                         3.8068211
## POSTGRADO - DOCTORADO-NINGUNO                               4.8028996
## PRIMARIA-SIN PROFESIƓN                                      0.9299253
## BACHILLERATO-SIN PROFESIƓN                                 -1.9434947
## PREGRADO - TƉCNICO PROFESIONAL-SIN PROFESIƓN               -6.7177794
## PREGRADO - TECNOLƓGICO-SIN PROFESIƓN                       -6.7027945
## PREGRADO - PROFESIONAL-SIN PROFESIƓN                       -5.0188035
## POSTGRADO - MAESTRIA-SIN PROFESIƓN                         -6.6377461
## POSTGRADO - ESPECIALIZACIƓN-SIN PROFESIƓN                  -4.0492754
## POSTGRADO - DOCTORADO-SIN PROFESIƓN                        -2.9015954
## BACHILLERATO-PRIMARIA                                      -3.1170253
## PREGRADO - TƉCNICO PROFESIONAL-PRIMARIA                    -7.9463707
## PREGRADO - TECNOLƓGICO-PRIMARIA                            -7.9913917
## PREGRADO - PROFESIONAL-PRIMARIA                            -6.1949658
## POSTGRADO - MAESTRIA-PRIMARIA                              -7.9090796
## POSTGRADO - ESPECIALIZACIƓN-PRIMARIA                       -5.3772312
## POSTGRADO - DOCTORADO-PRIMARIA                             -4.4171468
## PREGRADO - TƉCNICO PROFESIONAL-BACHILLERATO                -5.0299576
## PREGRADO - TECNOLƓGICO-BACHILLERATO                        -5.0829668
## PREGRADO - PROFESIONAL-BACHILLERATO                        -3.2671167
## POSTGRADO - MAESTRIA-BACHILLERATO                          -4.9987079
## POSTGRADO - ESPECIALIZACIƓN-BACHILLERATO                   -2.4725095
## POSTGRADO - DOCTORADO-BACHILLERATO                         -1.5226238
## PREGRADO - TECNOLƓGICO-PREGRADO - TƉCNICO PROFESIONAL      -0.3578459
## PREGRADO - PROFESIONAL-PREGRADO - TƉCNICO PROFESIONAL       1.4325038
## POSTGRADO - MAESTRIA-PREGRADO - TƉCNICO PROFESIONAL        -0.2762164
## POSTGRADO - ESPECIALIZACIƓN-PREGRADO - TƉCNICO PROFESIONAL  2.2576545
## POSTGRADO - DOCTORADO-PREGRADO - TƉCNICO PROFESIONAL        3.2216812
## PREGRADO - PROFESIONAL-PREGRADO - TECNOLƓGICO               1.3386774
## POSTGRADO - MAESTRIA-PREGRADO - TECNOLƓGICO                -0.3532229
## POSTGRADO - ESPECIALIZACIƓN-PREGRADO - TECNOLƓGICO          2.1878750
## POSTGRADO - DOCTORADO-PREGRADO - TECNOLƓGICO                3.1673725
## POSTGRADO - MAESTRIA-PREGRADO - PROFESIONAL                -1.9257452
## POSTGRADO - ESPECIALIZACIƓN-PREGRADO - PROFESIONAL          0.6008408
## POSTGRADO - DOCTORADO-PREGRADO - PROFESIONAL                1.5513895
## POSTGRADO - ESPECIALIZACIƓN-POSTGRADO - MAESTRIA            2.1392423
## POSTGRADO - DOCTORADO-POSTGRADO - MAESTRIA                  3.1143271
## POSTGRADO - DOCTORADO-POSTGRADO - ESPECIALIZACIƓN           0.4844732
##                                                                   upr     p adj
## NINGUNO-NO INDICA                                          -3.3555179 0.0000000
## SIN PROFESIƓN-NO INDICA                                     4.6111693 0.9998816
## PRIMARIA-NO INDICA                                          5.7683105 0.0000000
## BACHILLERATO-NO INDICA                                      2.8342751 0.0000000
## PREGRADO - TƉCNICO PROFESIONAL-NO INDICA                   -1.8575768 0.0000000
## PREGRADO - TECNOLƓGICO-NO INDICA                           -1.7594698 0.0000000
## PREGRADO - PROFESIONAL-NO INDICA                           -0.2367972 0.0000000
## POSTGRADO - MAESTRIA-NO INDICA                             -1.7180344 0.0000000
## POSTGRADO - ESPECIALIZACIƓN-NO INDICA                       0.9475474 0.0000281
## POSTGRADO - DOCTORADO-NO INDICA                             2.3553643 0.0000000
## SIN PROFESIƓN-NINGUNO                                       8.3900918 0.0064707
## PRIMARIA-NINGUNO                                            9.7458426 0.0000000
## BACHILLERATO-NINGUNO                                        6.8432659 0.0000000
## PREGRADO - TƉCNICO PROFESIONAL-NINGUNO                      2.1101570 0.0000000
## PREGRADO - TECNOLƓGICO-NINGUNO                              2.1769408 0.0000000
## PREGRADO - PROFESIONAL-NINGUNO                              3.7697728 0.0000000
## POSTGRADO - MAESTRIA-NINGUNO                                2.2264057 0.0000000
## POSTGRADO - ESPECIALIZACIƓN-NINGUNO                         4.8678911 0.0000000
## POSTGRADO - DOCTORADO-NINGUNO                               6.2254355 0.0000000
## PRIMARIA-SIN PROFESIƓN                                      8.5822267 0.0030753
## BACHILLERATO-SIN PROFESIƓN                                  5.7029433 0.8900507
## PREGRADO - TƉCNICO PROFESIONAL-SIN PROFESIƓN                0.9370314 0.3467236
## PREGRADO - TECNOLƓGICO-SIN PROFESIƓN                        0.9634352 0.3601346
## PREGRADO - PROFESIONAL-SIN PROFESIƓN                        2.6279903 0.9956032
## POSTGRADO - MAESTRIA-SIN PROFESIƓN                          1.0249463 0.3943778
## POSTGRADO - ESPECIALIZACIƓN-SIN PROFESIƓN                   3.6258019 1.0000000
## POSTGRADO - DOCTORADO-SIN PROFESIƓN                         4.8317448 0.9993490
## BACHILLERATO-PRIMARIA                                      -2.6356780 0.0000000
## PREGRADO - TƉCNICO PROFESIONAL-PRIMARIA                    -7.3465293 0.0000000
## PREGRADO - TECNOLƓGICO-PRIMARIA                            -7.2601196 0.0000000
## PREGRADO - PROFESIONAL-PRIMARIA                            -5.7079995 0.0000000
## POSTGRADO - MAESTRIA-PRIMARIA                              -7.2158723 0.0000000
## POSTGRADO - ESPECIALIZACIƓN-PRIMARIA                       -4.5583944 0.0000000
## POSTGRADO - DOCTORADO-PRIMARIA                             -3.1648559 0.0000000
## PREGRADO - TƉCNICO PROFESIONAL-BACHILLERATO                -4.5102390 0.0000000
## PREGRADO - TECNOLƓGICO-BACHILLERATO                        -4.4158411 0.0000000
## PREGRADO - PROFESIONAL-BACHILLERATO                        -2.8831452 0.0000000
## POSTGRADO - MAESTRIA-BACHILLERATO                          -4.3735406 0.0000000
## POSTGRADO - ESPECIALIZACIƓN-BACHILLERATO                   -1.7104127 0.0000000
## POSTGRADO - DOCTORADO-BACHILLERATO                         -0.3066755 0.0000684
## PREGRADO - TECNOLƓGICO-PREGRADO - TƉCNICO PROFESIONAL       0.3992347 1.0000000
## PREGRADO - PROFESIONAL-PREGRADO - TƉCNICO PROFESIONAL       1.9574309 0.0000000
## POSTGRADO - MAESTRIA-PREGRADO - TƉCNICO PROFESIONAL         0.4441645 0.9996441
## POSTGRADO - ESPECIALIZACIƓN-PREGRADO - TƉCNICO PROFESIONAL  3.0996200 0.0000000
## POSTGRADO - DOCTORADO-PREGRADO - TƉCNICO PROFESIONAL        4.4892161 0.0000000
## PREGRADO - PROFESIONAL-PREGRADO - TECNOLƓGICO               2.0098686 0.0000000
## POSTGRADO - MAESTRIA-PREGRADO - TECNOLƓGICO                 0.4797823 0.9999933
## POSTGRADO - ESPECIALIZACIƓN-PREGRADO - TECNOLƓGICO          3.1280107 0.0000000
## POSTGRADO - DOCTORADO-PREGRADO - TECNOLƓGICO                4.5021361 0.0000000
## POSTGRADO - MAESTRIA-PREGRADO - PROFESIONAL                -1.2962413 0.0000000
## POSTGRADO - ESPECIALIZACIƓN-PREGRADO - PROFESIONAL          1.3664990 0.0000000
## POSTGRADO - DOCTORADO-PREGRADO - PROFESIONAL                2.7695732 0.0000000
## POSTGRADO - ESPECIALIZACIƓN-POSTGRADO - MAESTRIA            3.0500840 0.0000000
## POSTGRADO - DOCTORADO-POSTGRADO - MAESTRIA                  4.4286221 0.0000000
## POSTGRADO - DOCTORADO-POSTGRADO - ESPECIALIZACIƓN           1.8691497 0.0000024
# Visualización
ggplot(DataNA, aes(x = Nivel.AcadƩmico, y = Edad)) +
  geom_boxplot() +
  coord_flip() +
  labs(title = "Distribución de la Edad por Nivel Académico",
       x = "Nivel AcadƩmico",
       y = "Edad (aƱos)")

Relación entre País, Estado Civil, y Género Hipótesis: Existen diferencias significativas en el estado civil según el género y el país.

# Visualización
ggplot(Data_top3, aes(x = Estado.civil, fill = GƩnero)) +
  geom_bar(position = "dodge") +
  facet_wrap(~PaĆ­s) +
  labs(title = "Estado Civil por GƩnero y Paƭs",
       x = "Estado Civil",
       y = "Cantidad") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

# Iterar sobre los paĆ­ses para realizar la prueba de Chi-cuadrado
resultados <- Data_top3 %>%
  group_by(PaĆ­s) %>%
  summarise(Chi2 = list(chisq.test(table(GƩnero, Estado.civil))$p.value))
## Warning: There were 2 warnings in `summarise()`.
## The first warning was:
## ℹ In argument: `Chi2 = list(chisq.test(table(GĆ©nero, Estado.civil))$p.value)`.
## ℹ In group 1: `PaĆ­s = "ESPAƑA"`.
## Caused by warning in `stats::chisq.test()`:
## ! Chi-squared approximation may be incorrect
## ℹ Run `dplyr::last_dplyr_warnings()` to see the 1 remaining warning.
# Mostrar los resultados
kable(resultados, col.names = c("PaĆ­s", "P-valor Chi-cuadrado"), 
      caption = "Prueba de Chi-cuadrado por País para la relación entre Género y Estado Civil")
Prueba de Chi-cuadrado por País para la relación entre Género y Estado Civil
PaĆ­s P-valor Chi-cuadrado
ESPAƑA 0
ESTADOS UNIDOS 0
VENEZUELA 8.096083e-108

Relación entre Edad y Estado Civil Hipótesis: La edad tiene un impacto significativo en el estado civil de las personas.

# ANOVA para comparar la Edad media entre los diferentes Estados Civiles
anova_edad_estado_civil <- aov(Edad ~ Estado.civil, data = DataNA)
summary(anova_edad_estado_civil)
##                  Df    Sum Sq Mean Sq F value Pr(>F)    
## Estado.civil      7  33110324 4730046   21903 <2e-16 ***
## Residuals    782242 168928484     216                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Visualización
ggplot(DataNA, aes(x = Estado.civil, y = Edad)) +
  geom_boxplot() +
  coord_flip() +
  labs(title = "Distribución de la Edad por Estado Civil",
       x = "Estado Civil",
       y = "Edad (aƱos)")

Estadistica Inferencial

#library(ggplot2)

Vamos a realizar una prueba de chi cuadrado entre las variables pais y etnia, para ver si hay una realcion significativa entre ambas, con:
Ho: No existe una asocion entre las variables etnia y pais de residencia.
H1: Hay una relacion significativa entre las varibales.

tabla_contingencia <- table(DataNA$PaĆ­s, DataNA$Etnia.de.la.persona)

resultado_chi <- chisq.test(tabla_contingencia)
## Warning in stats::chisq.test(x, y, ...): Chi-squared approximation may be
## incorrect
print(resultado_chi)
## 
##  Pearson's Chi-squared test
## 
## data:  tabla_contingencia
## X-squared = 50607, df = 1344, p-value < 2.2e-16

En este caso nos da un P-Valor extremadamente pequeƱo, lo que sugiere que debemos rechazar nuestra hipotesis nula de que no existe asociacion significativa entre ambas varibles. Y aceptar que en realidad si la hay.
Sin embargo R nos arroja una advertencia donde nos dice que la aproximacion del Chi Cuadrado podria ser incorrecto, esto es debido a que exiten celdas en nuestra tabla de contingencia que tienen frecuencias esperadas muy bajas, esto entorpece la aproximacion, y es usual en tablas de contingencias tan grandes como esta, en la que se manejan tantos paises y tantas etnias, por lo que hay un gran numero de combinaciones posibles.

if (resultado_chi$p.value < 0.05) {
  print("Existe una asociación significativa entre el país de residencia y la etnia.")
} else {
  print("No se encuentra una asociación significativa entre el país de residencia y la etnia.")
}
## [1] "Existe una asociación significativa entre el país de residencia y la etnia."

#Para manejar el problema anteriormente presentado se decidio hacer una simulacion de Monte Carlo, la cual es util cuando las supociciones del chi cuadrado tradicional no se cumplen, por ejemplo en este caso que la tabla de contingencia es bastante grande y hay celdas con frecuencias bastante bajas.

# Prueba de Chi-cuadrado con simulación de Monte Carlo
resultado_chi_mc <- chisq.test(tabla_contingencia, simulate.p.value = TRUE, B = 10000)

# Ver los resultados
print(resultado_chi_mc)
## 
##  Pearson's Chi-squared test with simulated p-value (based on 10000
##  replicates)
## 
## data:  tabla_contingencia
## X-squared = 50607, df = NA, p-value = 9.999e-05

En este caso volvemos a observar que el P-Valor es extremadamente pequeño, lo que indica que es muy improbable observar una asocioación tan fuerte por azar. Y confirmamos que efectivamente existe una relacion significata entre el pais de residencia y la etnia.

#Ahora veamos si existe una relación entre el país y el area de conocimiento.

tabla_contingencia_area <- table(DataNA$PaĆ­s, DataNA$Area.Conocimiento)

resultado_chiq <- chisq.test(tabla_contingencia_area)
## Warning in stats::chisq.test(x, y, ...): Chi-squared approximation may be
## incorrect
print(resultado_chiq)
## 
##  Pearson's Chi-squared test
## 
## data:  tabla_contingencia_area
## X-squared = 97150, df = 2304, p-value < 2.2e-16

En este caso nos estÔ ocurriendo exactamento lo mismo que la vez pasada, asi que realizaremos la misma simulación de Monte Carlo.

chisq.test(tabla_contingencia_area, simulate.p.value = TRUE, B = 10000)
## 
##  Pearson's Chi-squared test with simulated p-value (based on 10000
##  replicates)
## 
## data:  tabla_contingencia_area
## X-squared = 97150, df = NA, p-value = 9.999e-05

Con este P-valor pequeƱo tambiƩn rechazamos la Hipotesis nula, lo que sugiere que la relacion entre area de conocimiento y pais de residencia tambien es significativa.



Veamos ciencias basicas en alemania:

ciencias_basicas <- subset(DataNA, Area.Conocimiento == "MATEMƁTICAS Y CIENCIAS NATURALES" & Paƭs == "ALEMANIA")

tabla_ciencias_basicas <- table(ciencias_basicas$Sub.Area.Conocimiento)

print(tabla_ciencias_basicas)
## 
##      BIOLOGƍA, MICROBIOLOGƍA Y AFINES                                FƍSICA 
##                                   197                                    97 
##                              GEOLOGƍA     MATEMƁTICAS, ESTADƍSTICA Y AFINES 
##                                    45                                    77 
## OTROS PROGRAMAS DE CIENCIAS NATURALES                      QUƍMICA Y AFINES 
##                                    57                                    90

Realizamos la prueba de Chi-cuadrado para las subƔreas de conocimiento de ciencias basicas y el pais alemania.

resultado_chi_ciencias <- chisq.test(tabla_ciencias_basicas)

#Imprimir los resultados de la prueba
print(resultado_chi_ciencias)
## 
##  Chi-squared test for given probabilities
## 
## data:  tabla_ciencias_basicas
## X-squared = 156.58, df = 5, p-value < 2.2e-16

Con este P-valor podemos afirmar que hay una relación significativa entre ir a Alemania y estudiar un programa relacionado a las ciencias Basicas.

A continuación un Grafico de barras que nos muestra las frecuencias de cada uno, donde podemos ver que Sub Areas como Biologia , Microbiologia y areas afines tienen mayor relevancia en Alemania.

df_ciencias_basicas <- as.data.frame(tabla_ciencias_basicas)


colnames(df_ciencias_basicas) <- c("Sub.Area.Conocimiento", "Conteo")

# Crear el grƔfico de barras
ggplot(df_ciencias_basicas, aes(x = Sub.Area.Conocimiento, y = Conteo, fill = Sub.Area.Conocimiento)) +
  geom_bar(stat = "identity") +
  theme_minimal() +
  labs(title = "Distribución de SubÔreas de Conocimiento en Ciencias BÔsicas (Alemania)",
       x = "SubƔrea de Conocimiento",
       y = "NĆŗmero de Personas") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

A continuacion se hace un kruskal wallis para Edad y Etnia

#Prueba de Kruskal Wallis
kruskal_test = kruskal.test(DataNA$Edad ~ DataNA$Etnia.de.la.persona)
print(kruskal_test)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  DataNA$Edad by DataNA$Etnia.de.la.persona
## Kruskal-Wallis chi-squared = 2069.2, df = 7, p-value < 2.2e-16
# Crear un boxplot utilizando ggplot2
ggplot(Data, aes(x = Etnia.de.la.persona, y = Edad, fill = Etnia.de.la.persona)) +
  geom_boxplot() +
  labs(x = "Etnia", y = "Edad", title = "Distribución de la Edad por Etnia") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
  scale_fill_brewer(palette = "Set3")