PUNTO 1

Contextualizar tanto la base de datos como las variables describiendo en qué consiste cada una de ellas. Explora una de las bases de datos proporcionadas en los enlaces anteriores y selecciona un conjunto de datos para analizar.

Información de la población colombiana residente y registrada en las diferentes misiones consulares en el exterior que incluye el género, la edad, el nivel de estudios, la ocupación, lugar de residencia, el consulado de la circunscripción que lo atiende, entre otros.

library(readxl)
rut <-"C:/Users/User/Documents/BASES DE DATOS/Colombianos_registrados_en_el_exterior_20240823 (1).xlsx"
datos <- read_excel(rut)

PUNTO 2

Analizar las características de la base de datos. Estas pueden incluir: número de filas, número de columnas, nombres de las variables, tipos de variables, entre otros.

dim(datos)
## [1] 247680     14
names(datos)
##  [1] "País"                  "Código ISO país"       "Oficina de registro"  
##  [4] "Grupo edad"            "Edad (años)"           "Área Conocimiento"    
##  [7] "Sub Area Conocimiento" "Nivel Académico"       "Estado civil"         
## [10] "Género"                "Etnia de la persona"   "Estatura (CM)"        
## [13] "Localización"          "Cantidad de personas"
dim(datos)
## [1] 247680     14
sapply(datos, class)
##                  País       Código ISO país   Oficina de registro 
##           "character"           "character"           "character" 
##            Grupo edad           Edad (años)     Área Conocimiento 
##           "character"             "numeric"           "character" 
## Sub Area Conocimiento       Nivel Académico          Estado civil 
##           "character"           "character"           "character" 
##                Género   Etnia de la persona         Estatura (CM) 
##           "character"           "character"             "numeric" 
##          Localización  Cantidad de personas 
##           "character"             "numeric"

No.filas : 247680
No. Columnas : 14
Nombres de las variables: “País”,“Código ISO país”, “Oficina de registro”, “Grupo edad”, “Edad (años)”, “Área Conocimiento”, “Sub Area Conocimiento”, “Nivel Académico”, “Estado civil”, “Género”, “Etnia de la persona”, “Estatura (CM),”Localización” y “Cantidad de personas”
Tipos de variables:
cualitativas nominales: País, Código Iso del país, Oficina de registro, Estado civil, Género, Etnia de una persona y localización.
cualitativas Ordinales : Grupo edad, Nivel académico, Área de conocimiento y Sub Área conocimiento.
cuantitativas: Edad, Estatura, Cantidad de personas.

Punto 3

Analizar las características de la base de datos. Estas pueden incluir: número de filas, número de columnas, nombres de las variables, tipos de variables, entre otros.

Usamos la función str() para ver el tipo de dato en R de cada variable.

str(datos)
## tibble [247,680 × 14] (S3: tbl_df/tbl/data.frame)
##  $ País                 : chr [1:247680] "ALEMANIA" "ESPAÑA" "CANADA" "CANADA" ...
##  $ Código ISO país      : chr [1:247680] "DEU" "ESP" "CAN" "CAN" ...
##  $ Oficina de registro  : chr [1:247680] "C. BERLIN" "C. BARCELONA" "C. MONTREAL" "C. CALGARY" ...
##  $ Grupo edad           : chr [1:247680] "ADULTO" "ADULTO" "ADULTO" "ADULTO" ...
##  $ Edad (años)          : num [1:247680] 35 36 35 35 35 27 31 32 28 37 ...
##  $ Área Conocimiento    : chr [1:247680] "CIENCIAS SOCIALES Y HUMANAS" "NO INDICA" "CIENCIAS SOCIALES Y HUMANAS" "INGENIERÍA, ARQUITECTURA Y AFINES" ...
##  $ Sub Area Conocimiento: chr [1:247680] "CIENCIA POLÍTICA Y/O RELACIONES INTERNACIONALES" "NO INDICA" "GEOGRAFÍA O HISTORIA" "INGENIERÍA EN SISTEMAS, TELEMÁTICA Y AFINES" ...
##  $ Nivel Académico      : chr [1:247680] "PREGRADO - PROFESIONAL" "POSTGRADO - MAESTRIA" "NO INDICA" "POSTGRADO - MAESTRIA" ...
##  $ Estado civil         : chr [1:247680] "SOLTERO" "SOLTERO" "SOLTERO" "DESCONOCIDO" ...
##  $ Género               : chr [1:247680] "MASCULINO" "FEMENINO" "FEMENINO" "MASCULINO" ...
##  $ Etnia de la persona  : chr [1:247680] "NINGUNA" "OTRO" "OTRO" "OTRO" ...
##  $ Estatura (CM)        : num [1:247680] -1 165 -1 -1 -1 182 -1 171 164 165 ...
##  $ Localización         : chr [1:247680] "(51.165691, 10.451526)" "(40.463667, -3.74922)" "(56.130366, -106.346771)" "(56.130366, -106.346771)" ...
##  $ Cantidad de personas : num [1:247680] 1 1 1 1 1 1 1 1 1 1 ...
names(datos)
##  [1] "País"                  "Código ISO país"       "Oficina de registro"  
##  [4] "Grupo edad"            "Edad (años)"           "Área Conocimiento"    
##  [7] "Sub Area Conocimiento" "Nivel Académico"       "Estado civil"         
## [10] "Género"                "Etnia de la persona"   "Estatura (CM)"        
## [13] "Localización"          "Cantidad de personas"

Variables numéricas

Las variables numéricas en la base de datos son:
Edad.
Estatura.
Cantidad de personas.
Ahora veremos el resumen de cada variable.

summary(datos$`Edad (años)`)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   25.00   30.00   34.00   33.52   37.00   40.00
barplot(table(datos$`Edad (años)`), las=2)

summary(datos$`Estatura (CM)`)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   -1.00   -1.00   -1.00   39.69   -1.00  665.00

No se puede hacer un gráfico a la estatura porque las estaturas no registradas aparecen como -1.

summary(datos$`Cantidad de personas`)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   1.000   1.000   1.000   1.993   1.000 408.000

Variables categóricas

Las variables categoricas de la base de datos son:
País. Oficina de registro.
Sub Area Conocimiento.
Estado civil.
Etnia de la persona.
Localización.
Código ISO país.
Grupo edad.
Area Conocimiento.
Nivel Académico.
Género.

No es posible visualizar bien estas variables en las gráficas porque se requiere mucho espacio, gracias a al gran volumen de posibles respuestas en cada una. Sin embargo, se puedes graficar las siguientes:

barplot(table(datos$`Estado civil`),las=2)

barplot(table(datos$`Etnia de la persona`), las=2)

barplot(table(datos$`Grupo edad`), las=2)

barplot(table(datos$`Área Conocimiento`), las=2)

barplot(table(datos$`Nivel Académico`), las=2)

table(datos$Género)

barplot(table(datos$Género), las=2)

Punto 4

Filtrar la base de datos para entender mejor su estructura. Aplique filtros en al menos cinco oportunidades.

Para este punto usaremos la librería “dplyr” para la filtración de datos.

library(dplyr)
## 
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(ggplot2)

FILTRO 1: filtro de personas con menos de 25 años que cuentan con un pregrado.

filtro_1 <- filter(datos, `Nivel Académico`=="PREGRADO - PROFESIONAL" & `Edad (años)`<26)
str(filtro_1)
## tibble [975 × 14] (S3: tbl_df/tbl/data.frame)
##  $ País                 : chr [1:975] "ESPAÑA" "ESTADOS UNIDOS" "AUSTRALIA" "NUEVA ZELANDA" ...
##  $ Código ISO país      : chr [1:975] "ESP" "USA" "AUS" "NZL" ...
##  $ Oficina de registro  : chr [1:975] "C. SEVILLA" "C. ORLANDO" "C. SYDNEY" "C. AUCKLAND" ...
##  $ Grupo edad           : chr [1:975] "ADULTO JOVEN" "ADULTO JOVEN" "ADULTO JOVEN" "ADULTO JOVEN" ...
##  $ Edad (años)          : num [1:975] 25 25 25 25 25 25 25 25 25 25 ...
##  $ Área Conocimiento    : chr [1:975] "ECONOMÍA, ADMINISTRACIÓN CONTADURIA Y AFINES" "CIENCIAS DE LA SALUD" "CIENCIAS SOCIALES Y HUMANAS" "COCINA Y CULINARIA" ...
##  $ Sub Area Conocimiento: chr [1:975] "ADMINISTRACIÓN" "TERAPIAS" "PSICOLOGÍA Y AFINES" "COCINA Y CULINARIA" ...
##  $ Nivel Académico      : chr [1:975] "PREGRADO - PROFESIONAL" "PREGRADO - PROFESIONAL" "PREGRADO - PROFESIONAL" "PREGRADO - PROFESIONAL" ...
##  $ Estado civil         : chr [1:975] "DESCONOCIDO" "SOLTERO" "SOLTERO" "SOLTERO" ...
##  $ Género               : chr [1:975] "FEMENINO" "FEMENINO" "FEMENINO" "MASCULINO" ...
##  $ Etnia de la persona  : chr [1:975] "OTRO" "OTRO" "NINGUNA" "OTRO" ...
##  $ Estatura (CM)        : num [1:975] -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ...
##  $ Localización         : chr [1:975] "(40.463667, -3.74922)" "(37.09024, -95.712891)" "(-25.274398, 133.775136)" "(-40.900557, 174.885971)" ...
##  $ Cantidad de personas : num [1:975] 1 1 1 1 1 1 1 1 1 1 ...

Descripción: en total hay 975 personas que son menores de 25 años y cuentan con un pregrado.

FILTRO 2: filtro de personas solteras mayores a 35 años.

filtro_2 <- filter(datos,35<`Edad (años)` & `Estado civil`=="SOLTERO")
str(filtro_2)
## tibble [38,185 × 14] (S3: tbl_df/tbl/data.frame)
##  $ País                 : chr [1:38185] "ESPAÑA" "ESTADOS UNIDOS" "AUSTRALIA" "ARGENTINA" ...
##  $ Código ISO país      : chr [1:38185] "ESP" "USA" "AUS" "ARG" ...
##  $ Oficina de registro  : chr [1:38185] "C. BARCELONA" "C. ORLANDO" "C. SYDNEY" "C. BUENOS AIRES" ...
##  $ Grupo edad           : chr [1:38185] "ADULTO" "ADULTO" "ADULTO" "ADULTO" ...
##  $ Edad (años)          : num [1:38185] 36 39 40 36 40 37 40 37 36 36 ...
##  $ Área Conocimiento    : chr [1:38185] "NO INDICA" "ECONOMÍA, ADMINISTRACIÓN CONTADURIA Y AFINES" "NO INDICA" "CIENCIAS DE LA SALUD" ...
##  $ Sub Area Conocimiento: chr [1:38185] "NO INDICA" "ECONOMÍA" "NO INDICA" "MEDICINA" ...
##  $ Nivel Académico      : chr [1:38185] "POSTGRADO - MAESTRIA" "NO INDICA" "POSTGRADO - MAESTRIA" "PREGRADO - PROFESIONAL" ...
##  $ Estado civil         : chr [1:38185] "SOLTERO" "SOLTERO" "SOLTERO" "SOLTERO" ...
##  $ Género               : chr [1:38185] "FEMENINO" "FEMENINO" "MASCULINO" "FEMENINO" ...
##  $ Etnia de la persona  : chr [1:38185] "OTRO" "OTRO" "NINGUNA" "AFRODESCENDIENTE" ...
##  $ Estatura (CM)        : num [1:38185] 165 -1 165 -1 -1 160 157 174 158 171 ...
##  $ Localización         : chr [1:38185] "(40.463667, -3.74922)" "(37.09024, -95.712891)" "(-25.274398, 133.775136)" "(-38.416097, -63.616672)" ...
##  $ Cantidad de personas : num [1:38185] 1 1 1 1 1 1 1 1 1 1 ...

Descripción: hay en total 38.185 personas que son solteras y tienen más de 35 años.

FILTRO 3: filtro de personas con etnia afro que residen en Estados Unidos.

filtro_3 <- filter(datos, `Etnia de la persona`=="AFRODESCENDIENTE" & `País`=="ESTADOS UNIDOS")
str(filtro_3)
## tibble [1,087 × 14] (S3: tbl_df/tbl/data.frame)
##  $ País                 : chr [1:1087] "ESTADOS UNIDOS" "ESTADOS UNIDOS" "ESTADOS UNIDOS" "ESTADOS UNIDOS" ...
##  $ Código ISO país      : chr [1:1087] "USA" "USA" "USA" "USA" ...
##  $ Oficina de registro  : chr [1:1087] "C. SAN FRANCISCO" "C. NEWARK" "C. ORLANDO" "C. ATLANTA" ...
##  $ Grupo edad           : chr [1:1087] "ADULTO" "ADULTO JOVEN" "ADULTO" "ADULTO" ...
##  $ Edad (años)          : num [1:1087] 33 26 29 35 28 26 33 29 27 33 ...
##  $ Área Conocimiento    : chr [1:1087] "ECONOMÍA, ADMINISTRACIÓN CONTADURIA Y AFINES" "ECONOMÍA, ADMINISTRACIÓN CONTADURIA Y AFINES" "CIENCIAS SOCIALES Y HUMANAS" "CIENCIAS DE LA EDUCACIÓN" ...
##  $ Sub Area Conocimiento: chr [1:1087] "ADMINISTRACIÓN" "ADMINISTRACIÓN" "DERECHO Y AFINES" "EDUCACIÓN" ...
##  $ Nivel Académico      : chr [1:1087] "NO INDICA" "PREGRADO - TÉCNICO PROFESIONAL" "POSTGRADO - DOCTORADO" "NO INDICA" ...
##  $ Estado civil         : chr [1:1087] "CASADO" "SOLTERO" "SOLTERO" "SOLTERO" ...
##  $ Género               : chr [1:1087] "MASCULINO" "MASCULINO" "FEMENINO" "FEMENINO" ...
##  $ Etnia de la persona  : chr [1:1087] "AFRODESCENDIENTE" "AFRODESCENDIENTE" "AFRODESCENDIENTE" "AFRODESCENDIENTE" ...
##  $ Estatura (CM)        : num [1:1087] -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ...
##  $ Localización         : chr [1:1087] "(37.09024, -95.712891)" "(37.09024, -95.712891)" "(37.09024, -95.712891)" "(37.09024, -95.712891)" ...
##  $ Cantidad de personas : num [1:1087] 1 1 1 1 3 1 1 1 1 1 ...

Descripción: existen 1.087 personas que son afrodescendientes y viven en estados unidos.

FILTRO 4: filtro de personas que su oficina de registro fue en C. MADRID, su nivel académico llega hasta el bachillerato y su género es masculino.

filtro_4 <- filter(datos, `Oficina de registro`=="C. MADRID", `Nivel Académico`=="BACHILLERATO", `Género`=="MASCULINO")
str(filtro_4)
## tibble [1,930 × 14] (S3: tbl_df/tbl/data.frame)
##  $ País                 : chr [1:1930] "ESPAÑA" "ESPAÑA" "ESPAÑA" "ESPAÑA" ...
##  $ Código ISO país      : chr [1:1930] "ESP" "ESP" "ESP" "ESP" ...
##  $ Oficina de registro  : chr [1:1930] "C. MADRID" "C. MADRID" "C. MADRID" "C. MADRID" ...
##  $ Grupo edad           : chr [1:1930] "ADULTO JOVEN" "ADULTO JOVEN" "ADULTO JOVEN" "ADULTO" ...
##  $ Edad (años)          : num [1:1930] 27 26 28 33 36 32 36 38 33 40 ...
##  $ Área Conocimiento    : chr [1:1930] "CIENCIAS DE LA SALUD" "BELLAS ARTES" "NO INDICA" "NINGUNA" ...
##  $ Sub Area Conocimiento: chr [1:1930] "MEDICINA" "DISEÑO" "NO INDICA" "NINGUNA" ...
##  $ Nivel Académico      : chr [1:1930] "BACHILLERATO" "BACHILLERATO" "BACHILLERATO" "BACHILLERATO" ...
##  $ Estado civil         : chr [1:1930] "SOLTERO" "SOLTERO" "SOLTERO" "SOLTERO" ...
##  $ Género               : chr [1:1930] "MASCULINO" "MASCULINO" "MASCULINO" "MASCULINO" ...
##  $ Etnia de la persona  : chr [1:1930] "NINGUNA" "OTRO" "NINGUNA" "SIN ETNIA REGISTRADA" ...
##  $ Estatura (CM)        : num [1:1930] 182 179 173 163 175 171 163 152 175 -1 ...
##  $ Localización         : chr [1:1930] "(40.463667, -3.74922)" "(40.463667, -3.74922)" "(40.463667, -3.74922)" "(40.463667, -3.74922)" ...
##  $ Cantidad de personas : num [1:1930] 1 1 6 1 1 1 1 1 2 1 ...

Descripción: hay en total 1.930 personas que cumplen con los requisitos anteriores.
FILTRO 5: filtro para registrar las personas que viven en Australia y que miden más de 180 centimetros.

filtro_5 <- filter(datos, `País`=="AUSTRALIA" & 179<`Estatura (CM)`)
str(filtro_5)
## tibble [164 × 14] (S3: tbl_df/tbl/data.frame)
##  $ País                 : chr [1:164] "AUSTRALIA" "AUSTRALIA" "AUSTRALIA" "AUSTRALIA" ...
##  $ Código ISO país      : chr [1:164] "AUS" "AUS" "AUS" "AUS" ...
##  $ Oficina de registro  : chr [1:164] "C. CANBERRA" "C. CANBERRA" "C. SYDNEY" "C. CANBERRA" ...
##  $ Grupo edad           : chr [1:164] "ADULTO" "ADULTO" "ADULTO" "ADULTO" ...
##  $ Edad (años)          : num [1:164] 38 39 40 29 40 35 36 37 37 35 ...
##  $ Área Conocimiento    : chr [1:164] "NO INDICA" "CIENCIAS DE LA EDUCACIÓN" "NO INDICA" "INGENIERÍA, ARQUITECTURA Y AFINES" ...
##  $ Sub Area Conocimiento: chr [1:164] "NO INDICA" "EDUCACIÓN" "NO INDICA" "INGENIERÍA MECÁNICA Y AFINES" ...
##  $ Nivel Académico      : chr [1:164] "PREGRADO - PROFESIONAL" "POSTGRADO - ESPECIALIZACIÓN" "PREGRADO - PROFESIONAL" "PREGRADO - PROFESIONAL" ...
##  $ Estado civil         : chr [1:164] "UNION_LIBRE" "SOLTERO" "CASADO" "DESCONOCIDO" ...
##  $ Género               : chr [1:164] "MASCULINO" "MASCULINO" "MASCULINO" "MASCULINO" ...
##  $ Etnia de la persona  : chr [1:164] "NINGUNA" "NINGUNA" "NINGUNA" "SIN ETNIA REGISTRADA" ...
##  $ Estatura (CM)        : num [1:164] 180 181 180 190 190 180 180 180 190 180 ...
##  $ Localización         : chr [1:164] "(-25.274398, 133.775136)" "(-25.274398, 133.775136)" "(-25.274398, 133.775136)" "(-25.274398, 133.775136)" ...
##  $ Cantidad de personas : num [1:164] 1 1 1 1 1 1 1 1 1 1 ...

Descripción: 165 son las personas que miden más de 180 centimetros y viven en australia.

Punto 5

Utilice la función table para explorar la base de datos.

Para explorar la base de datos usamos la función table() para analizar la frecuencia y comportamiento de cada variable en la base de datos y entender más la estructura de la base de datos. Además, para visualizar cada variable en un gráfico cogemos los 20 datos con mayor frecuencia en los casos que se necesite.

PAIS

frec_pais<-table(datos$País)
frec_pais_ordenada<-sort(frec_pais, decreasing=TRUE)
#barplot(frec_pais,las=2)
#head(frec_pais_ordenada, n=10)
frec_codigo <- table(datos$`Código ISO país`)
frec_codigo_ordenada<-sort(frec_codigo,decreasing=TRUE)
primero_10_codigo<-head(frec_codigo_ordenada,n=20)
primero_10_codigo
## 
##   USA   ESP   ECU   CAN   AUS   CHL   ARG   MEX   FRA   BRA   DEU   GBR   PAN 
## 67596 53652 14487 11710 10409  9927  9803  7263  6532  6247  6070  5213  4825 
##   ITA   PER   CRI   CHE   NLD   NZL   BEL 
##  4597  3197  2972  1980  1895  1311  1268
total_frecuencia_codigo<-sum(primero_10_codigo)
total_frecuencia_codigo
## [1] 230954
247680-total_frecuencia_codigo
## [1] 16726
barplot(primero_10_codigo,las=2)

Los datos mostrados en pantalla corresponden a los 20 datos con más frecuencia en esta variable llamada Código ISO país. Además, hay una diferencia de 16726 entre la cantidad de datos de la variable y la suma de las frecuencias analizadas anteriormente; esta diferencia correspondería a la suma de las frecuencias de los datos que no entran en esta tabla.

OFICINA DE REGISTRO

#table(datos$`Oficina de registro`)
frec_oficina <- table(datos$`Oficina de registro`)
frec_oficina_ordenada<-sort(frec_oficina,decreasing=TRUE)
primero_10_oficina<-head(frec_oficina_ordenada,n=20)
primero_10_oficina
## 
##        C. MADRID     C. BARCELONA    C. NUEVA YORK  C. BUENOS AIRES 
##            17499            10832            10301             9802 
##        C. NEWARK         C. MIAMI       C. SEVILLA  C. VALENCIA ESP 
##             8114             7799             7227             6989 
##       C. HOUSTON         C. PARIS      C. SANTIAGO C. SAN FRANCISCO 
##             6587             6548             6505             6392 
##         C. QUITO        C. BILBAO       C. ORLANDO       C. CHICAGO 
##             5864             5812             5701             5619 
##       C. ATLANTA       C. LONDRES        C. SYDNEY      C. CANBERRA 
##             5376             5273             5232             5178
total_frecuencia_oficina<-sum(primero_10_oficina)
total_frecuencia_oficina
## [1] 148650
247680-total_frecuencia_oficina
## [1] 99030
barplot(primero_10_oficina,las=2)

Los datos mostrados en pantalla corresponden a los 20 datos con más frecuencia en esta variable llamada Oficina de registro. Además, hay una diferencia de 99030 entre la cantidad de datos de la variable y la suma de las frecuencias analizadas anteriormente; esta diferencia correspondería a la suma de las frecuencias de los datos que no entran en esta tabla.

GRUPO EDAD

table(datos$`Grupo edad`)
## 
##       ADULTO ADULTO JOVEN 
##       210721        36959
barplot(table(datos$`Grupo edad`), las=2)

EDAD (AÑOS)

table(datos$`Edad (años)`)
## 
##    25    26    27    28    29    30    31    32    33    34    35    36    37 
##  6588  7712 10013 12646 14401 15773 16337 17314 18052 18337 18991 18231 18349 
##    38    39    40 
## 18375 18590 17971
barplot(table(datos$`Edad (años)`), las=2)

AREA DE CONOCIMIENTO

table(datos$`Área Conocimiento`)
## 
##                                (NO REGISTRA) 
##                                          237 
##              AGRONOMÍA, VETERINARIA Y AFINES 
##                                         1911 
##           AGRONOMÍA, VETERINARIA Y ZOOTECNIA 
##                                         1471 
##                                     AVIACIÓN 
##                                         1095 
##                                 BELLAS ARTES 
##                                        13927 
##                     CIENCIAS DE LA EDUCACIÓN 
##                                         7463 
##                         CIENCIAS DE LA SALUD 
##                                        25122 
##                  CIENCIAS SOCIALES Y HUMANAS 
##                                        27667 
##                           COCINA Y CULINARIA 
##                                         2188 
## ECONOMÍA, ADMINISTRACIÓN CONTADURIA Y AFINES 
##                                        34764 
##            INGENIERÍA, ARQUITECTURA Y AFINES 
##                                        41781 
##             MATEMÁTICAS Y CIENCIAS NATURALES 
##                                         5813 
##                                      NINGUNA 
##                                        41672 
##                                    NO INDICA 
##                                        42569
barplot(table(datos$`Área Conocimiento`), las=2)

SUB AREA DE CONOCIMIENTO

#table(datos$`Sub Area Conocimiento`)
frec_SubA <- table(datos$`Sub Area Conocimiento`)
frec_SubA_ordenada<-sort(frec_SubA,decreasing=TRUE)
primero_10_SubA<-head(frec_SubA_ordenada,n=20)
primero_10_SubA
## 
##                                             NINGUNA 
##                                               41671 
##                                           NO INDICA 
##                                               39326 
##                                      ADMINISTRACIÓN 
##                                               21872 
##                                           EDUCACIÓN 
##                                                7463 
##                                          ENFERMERÍA 
##                                                6840 
##         INGENIERÍA EN SISTEMAS, TELEMÁTICA Y AFINES 
##                                                6839 
##                                  CONTADURÍA PÚBLICA 
##                                                6660 
##                      INGENIERÍA INDUSTRIAL Y AFINES 
##                                                6327 
##                                            ECONOMÍA 
##                                                6233 
##                                    DERECHO Y AFINES 
##                                                5764 
##                                              DISEÑO 
##                                                5631 
##                                            MEDICINA 
##                                                5152 
##                              OTRO PROGRAMA DE SALUD 
##                                                4545 
##            PERIODISMO, COMUNICACIÓN SOCIAL Y AFINES 
##                                                4509 
##                                  COCINA Y CULINARIA 
##                                                4263 
##                                 PSICOLOGÍA Y AFINES 
##                                                4102 
##                        INGENIERÍA MECÁNICA Y AFINES 
##                                                4038 
## INGENIERÍA ELECTRÓNICA, TELECOMUNICACIONES Y AFINES 
##                                                3904 
##                           INGENIERÍA CIVIL Y AFINES 
##                                                3591 
##                                   OTRAS INGENIERÍAS 
##                                                3512
total_frecuencia_SubA<-sum(primero_10_SubA)
total_frecuencia_SubA
## [1] 192242
247680-total_frecuencia_SubA
## [1] 55438
barplot(primero_10_SubA, las=2)

Los datos mostrados en pantalla corresponden a los 20 datos con más frecuencia en esta variable llamada Sub Area Conocimiento. Además, hay una diferencia de 55438 entre la cantidad de datos de la variable y la suma de las frecuencias analizadas anteriormente; esta diferencia correspondería a la suma de las frecuencias de los datos que no entran en esta tabla.

NIVEL ACADÉMICO

table(datos$`Nivel Académico`)
## 
##                  (NO REGISTRA)                   BACHILLERATO 
##                            237                          36185 
##                        NINGUNO                      NO INDICA 
##                           3065                          91787 
##          POSTGRADO - DOCTORADO    POSTGRADO - ESPECIALIZACIÓN 
##                           2390                           6931 
##           POSTGRADO - MAESTRIA         PREGRADO - PROFESIONAL 
##                          14603                          52629 
## PREGRADO - TÉCNICO PROFESIONAL         PREGRADO - TECNOLÓGICO 
##                          21497                          11901 
##                       PRIMARIA                  SIN PROFESIÓN 
##                           6398                             57
frec_academico<-sort(table(datos$`Nivel Académico`),decreasing=TRUE)
barplot(frec_academico, las=2)

ESTADO CIVIL

table(datos$`Estado civil`)
## 
##               CASADO          DESCONOCIDO           DIVORCIADO 
##                60294                21363                 6236 
##  SEPARADO_MATRIMONIO SEPARADO_UNION_LIBRE              SOLTERO 
##                  439                  410               130847 
##          UNION_LIBRE                VIUDO 
##                27479                  612
frec_estado<-sort(table(datos$`Estado civil`),decreasing=TRUE)
barplot(frec_estado, las=2)

GÉNERO

table(datos$Género)
## 
## DESCONOCIDO    FEMENINO   MASCULINO  NO_BINARIO 
##         183      134667      112826           4
frec_genero<-sort(table(datos$Género),decreasing=TRUE)
barplot(frec_genero, las=2)

ETNIA DE LA PERSONA

table(datos$`Etnia de la persona`)
## 
##                      AFRODESCENDIENTE                                GITANO 
##                                  6664                                   127 
##                              INDÍGENA                               NINGUNA 
##                                  1223                                122622 
##                                  OTRO             PALENQUERO DE SAN BASILIO 
##                                106699                                    49 
## RAIZAL DEL ARCHIPIELAGO DE SAN ANDRES                  SIN ETNIA REGISTRADA 
##                                   161                                 10135
frec_etnia<-sort(table(datos$`Etnia de la persona`),decreasing=TRUE)
barplot(frec_etnia, las=2)

ESTATURA (CM)

table(datos$`Estatura (CM)`)
## 
##     -1      0      1      2      5      6     15     16     17     18     19 
## 187577     28      5      2      2      1      8     16     11      2      1 
##     34     51     52     53     54     55     56     57     58     59     60 
##      1      1      2      1      1      5      1      1      2      4      6 
##     61     62     63     64     65     66     67     69     70     72    107 
##      1      6      6      2      3      1      1      1      2      2      1 
##    108    110    111    112    115    116    117    120    122    126    127 
##      1      2      1      2      1      1      1      3      2      1      1 
##    130    134    135    136    137    138    139    140    141    142    143 
##      6      2      2      2      3      3      1     17      9     15     15 
##    144    145    146    147    148    149    150    151    152    153    154 
##     31    108     67    109    172    148    938    381    854    830    906 
##    155    156    157    158    159    160    161    162    163    164    165 
##   1885   1351   1545   1910   1100   4246   1395   2199   2356   1895   3684 
##    166    167    168    169    170    171    172    173    174    175    176 
##   1502   2065   2525   1370   4238   1241   2011   1949   1491   2553   1373 
##    177    178    179    180    181    182    183    184    185    186    187 
##   1092   1565    694   1951    590    714    675    346    649    240    239 
##    188    189    190    191    192    193    194    195    196    197    198 
##    180     73    203     35     61     43     23     28     13     10      8 
##    199    200    202    204    264    266    280    314    462    501    516 
##      4      8      3      1      1      1      1      1      1      1      1 
##    550    665 
##      1      1

Con esta variable podemos analizar muchas cosas empezando porque hay alturas donde hay valores negativos o son imposibles, por ejemplo alturas de 1, 2 o 5 centimetros. Por tanto, después se le hará su respectivo tratamiento.

LOCALIZACIÓN

#table(datos$Localización)
frec_Localización <- table(datos$Localización)
frec_Localización_ordenada<-sort(frec_Localización,decreasing=TRUE)
primero_10_Localización<-head(frec_Localización_ordenada,n=20)
primero_10_Localización
## 
##   (37.09024, -95.712891)    (40.463667, -3.74922)  (-1.831239, -78.183406) 
##                    67596                    53652                    14487 
## (56.130366, -106.346771) (-25.274398, 133.775136) (-35.675147, -71.542969) 
##                    11710                    10409                     9927 
## (-38.416097, -63.616672) (23.634501, -102.552784)    (46.227638, 2.213749) 
##                     9803                     7263                     6532 
##  (-14.235004, -51.92528)   (51.165691, 10.451526)   (55.378051, -3.435973) 
##                     6247                     6070                     5213 
##   (8.537981, -80.782127)     (41.87194, 12.56738)  (-9.189967, -75.015152) 
##                     4825                     4597                     3197 
##   (9.748917, -83.753428)    (46.818188, 8.227512)    (52.132633, 5.291266) 
##                     2972                     1980                     1895 
## (-40.900557, 174.885971)    (50.503887, 4.469936) 
##                     1311                     1268
total_frecuencia_Localización<-sum(primero_10_Localización)
total_frecuencia_Localización
## [1] 230954
247680-total_frecuencia_Localización
## [1] 16726
barplot(primero_10_Localización, las=2)

Los datos mostrados en pantalla corresponden a los 20 datos con más frecuencia en esta variable llamada Localización. Además, hay una diferencia de 16726 entre la cantidad de datos de la variable y la suma de las frecuencias analizadas anteriormente; esta diferencia correspondería a la suma de las frecuencias de los datos que no entran en esta tabla.

CANTIDAD DE PERSONAS

#table(datos$`Cantidad de personas`)
frec_personas <- table(datos$`Cantidad de personas`)
frec_personas_ordenada<-sort(frec_personas,decreasing=TRUE)
primero_10_personas<-head(frec_personas_ordenada,n=20)
primero_10_personas
## 
##      1      2      3      4      5      6      7      8      9     10     11 
## 194514  26949   9080   4467   2550   1739   1157    906    691    550    494 
##     12     13     14     15     16     17     18     19     20 
##    418    370    278    235    225    192    168    168    158
total_frecuencia_personas<-sum(primero_10_personas)
total_frecuencia_personas
## [1] 245309
247680-total_frecuencia_personas
## [1] 2371
barplot(primero_10_personas, las=2)

Los datos mostrados en pantalla corresponden a los 20 datos con más frecuencia en esta variable llamada Cantidad de personas. Además, hay una diferencia de 2371 entre la cantidad de datos de la variable y la suma de las frecuencias analizadas anteriormente; esta diferencia correspondería a la suma de las frecuencias de los datos que no entran en esta tabla.

PUNTO 6:

Identifique los valores NA (Not Available) en la base de datos.

summary(datos)
##      País           Código ISO país    Oficina de registro  Grupo edad       
##  Length:247680      Length:247680      Length:247680       Length:247680     
##  Class :character   Class :character   Class :character    Class :character  
##  Mode  :character   Mode  :character   Mode  :character    Mode  :character  
##                                                                              
##                                                                              
##                                                                              
##   Edad (años)    Área Conocimiento  Sub Area Conocimiento Nivel Académico   
##  Min.   :25.00   Length:247680      Length:247680         Length:247680     
##  1st Qu.:30.00   Class :character   Class :character      Class :character  
##  Median :34.00   Mode  :character   Mode  :character      Mode  :character  
##  Mean   :33.52                                                              
##  3rd Qu.:37.00                                                              
##  Max.   :40.00                                                              
##  Estado civil          Género          Etnia de la persona Estatura (CM)   
##  Length:247680      Length:247680      Length:247680       Min.   : -1.00  
##  Class :character   Class :character   Class :character    1st Qu.: -1.00  
##  Mode  :character   Mode  :character   Mode  :character    Median : -1.00  
##                                                            Mean   : 39.69  
##                                                            3rd Qu.: -1.00  
##                                                            Max.   :665.00  
##  Localización       Cantidad de personas
##  Length:247680      Min.   :  1.000     
##  Class :character   1st Qu.:  1.000     
##  Mode  :character   Median :  1.000     
##                     Mean   :  1.993     
##                     3rd Qu.:  1.000     
##                     Max.   :408.000
library(readxl)
rut <-"C:/Users/User/Documents/BASES DE DATOS/Colombianos_registrados_en_el_exterior_20240823 (1).xlsx"
datos <- read_excel(rut)
par(mfrow=c(1,3))
boxplot(datos$`Edad (años)`, main= "Edad")
boxplot(datos$`Cantidad de personas`, main= "Cantidad de personas")
boxplot(datos$`Estatura (CM)`, main= "Estatura")

Comentario
1. El primer diagrama de caja sugiere que la mayoría de los colombianos registrados en el exterior tienen edades entre los 30 y 37 años, con una mediana de aproximadamente 32 años. También muestra que las edades mínimas y máximas están en torno a los 25 y 40 años, respectivamente.
2. La segunda gráfica sugiere que, en la mayoría de los casos, la cantidad de personas registradas en el exterior es muy baja. Sin embargo, existen algunos casos excepcionales con cantidades mucho más altas, que se representan como valores atípicos en el diagrama. Esto indica que la distribución está altamente sesgada hacia los valores pequeños con algunas excepciones que sobresalen. Así que haremos un filtro de los datos, reemplazando los valores por la mediana de cada una de sus columnas.
3. La variable estatura tiene varios problemas, entre ellos es que hay datos llenados con -1, también alturas como 1 centimetro o más de 300 centimetros, las cuales no corresponden a la altura de una persona adulta, entonces para ver en realidad los valores atipicos primero hay que reemplazar este tipo de valores con vacío para luego hacer un tratamiento donde los valores atipicos se reemplazarán por la mediana.

Aquí hacemos el tratamiento para la variable “Cantidad de personas”

IQR_value <- IQR(datos$`Cantidad de personas`)
Q1 <- quantile(datos$`Cantidad de personas`, 0.25)
Q3 <- quantile(datos$`Cantidad de personas`, 0.75)
limiteinferior <- Q1-1.5*IQR_value
limitesuperior <- Q3+1.5*IQR_value
N_a <- datos$`Cantidad de personas`[datos$`Cantidad de personas` < limiteinferior| datos$`Cantidad de personas` > limitesuperior]
print(head(N_a))
## [1] 3 6 2 2 2 2
library(dplyr)
datos$`Cantidad de personas`[datos$`Cantidad de personas`>1] <- NA
boxplot(datos$`Cantidad de personas`, main= "Cantidad de personas")

cantidad_personas <- datos$`Cantidad de personas`
library(ggplot2)
library(Amelia)
## Cargando paquete requerido: 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
## ##
mediana_cantidad <- suppressWarnings(median(datos$`Cantidad de personas`, na.rm = TRUE))
datos$`Cantidad de personas`<- suppressWarnings({datos$`Cantidad de personas`[is.na(datos$`Cantidad de personas`)] <- mediana_cantidad})
verif <- suppressWarnings(sum(is.na(datos$`Cantidad de personas`)) ==0)
print(verif)
## [1] TRUE
if(verif){
  print("No  hay valores N/A")
  ggplot(datos, aes(x= `Cantidad de personas`))+ geom_histogram(binwidth = 0.1, fill= "steelblue", color ="black") + ggtitle("Distribución de cantidad de personas sin NA")+ xlab("Cantidad de personas")+ ylab("Frecuencia")
} else {
  print("Aun hay valores N/A")
}
## [1] "No  hay valores N/A"

table(datos$`Cantidad de personas`)
## 
##      1 
## 247680

En esta parte haremos el tratamiento para la variable “estatura” Primero reemplazamos con vacío los datos que no son lógicos de la siguiente manera.

datos$`Estatura (CM)`[datos$`Estatura (CM)`<140] <- NA
datos$`Estatura (CM)`[datos$`Estatura (CM)`>200] <- NA
boxplot(datos$`Estatura (CM)`,main="Estatura")

Ahora si haremos el tratamiento para los datos atípicos.

datos_sin_na_e<- na.omit(datos$`Estatura (CM)`)
IQR_value_e <- IQR(datos_sin_na_e)
Q1_e <- quantile(datos_sin_na_e, 0.25)
Q3_e <- quantile(datos_sin_na_e, 0.75)
limiteinferior_e <- Q1_e - 1.5 * IQR_value_e
limitesuperior_e <- Q3_e + 1.5 * IQR_value_e
N_a_e <- datos$`Estatura (CM)`[datos$`Estatura (CM)` < limiteinferior_e| datos$`Estatura (CM)` > limitesuperior_e]
limitesuperior_e
##   75% 
## 192.5
limiteinferior_e
##   25% 
## 140.5

Reemplazamos con datos NA los valores que se salen de los limites. Luego, esos valores NA se reemplazan por la mediana de la variable.

library(dplyr)
datos$`Estatura (CM)`[datos$`Estatura (CM)`>192.5] <- NA
datos$`Estatura (CM)`[datos$`Estatura (CM)`<140.5] <- NA
boxplot(datos$`Estatura (CM)`, main= "Estatura")

mediana_estatura <- median(datos$`Estatura (CM)`, na.rm = TRUE)
datos$`Estatura (CM)`[is.na(datos$`Estatura (CM)`)] <- mediana_estatura
datos_estatura<-datos$`Estatura (CM)`

res_estatura<-summary(datos$`Estatura (CM)`)
#res_estatura
library(ggplot2)
library(Amelia)

mediana_estatura <- suppressWarnings(median(datos$`Estatura (CM)`, na.rm = TRUE))
datos$`Estatura (CM)`<- suppressWarnings({datos$`Estatura (CM)`[is.na(datos$`Estatura (CM)`)] <- mediana_estatura})
verif_estatura <- suppressWarnings(sum(is.na(datos$`Estatura (CM)`)) ==0)
print(verif_estatura)
## [1] TRUE
if(verif_estatura){
  print("No  hay valores N/A")
  ggplot(datos, aes(x= `Estatura (CM)`))+ geom_histogram(binwidth = 0.1, fill= "steelblue", color ="black") + ggtitle("Distribución de estatura sin NA")+ xlab("Estatura (CM)")+ ylab("Frecuencia")
} else {
  print("Aun hay valores N/A")
}
## [1] "No  hay valores N/A"

Resultados generales

Se analizarán para las variables continuas de la base de datos, la Media, mediana, percentiles, desviación, coeficiente de variación y las pruebas de normalidad.
Usaremos la funcion summary() que nos da el valor minimo, media, primer percentil(25%), la mediana(50%), la media, tercer cuartil(75%) y el valor máximo.

summary(datos$`Edad (años)`)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   25.00   30.00   34.00   33.52   37.00   40.00
res_estatura
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##     141     167     167     167     167     192
summary(datos$`Cantidad de personas`)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##       1       1       1       1       1       1

Variabilidad

Como estas variable no tienen la misma unidad de medida, usaremos el coeficiente de variación para analizarlas.

media_edad<-mean(datos$`Edad (años)`, na.rm = TRUE)
sd_edad<-sd(datos$`Edad (años)`, na.rm=TRUE)
cv_edad<-sd_edad/media_edad
cv_edad
## [1] 0.1261055
media_estatura<-mean(datos$`Estatura (CM)`, na.rm = TRUE)
sd_estatura<-sd(datos$`Estatura (CM)`, na.rm=TRUE)
cv_estatura<-sd_estatura/media_estatura
cv_estatura
## [1] 0
media_personal<-mean(datos$`Cantidad de personas`, na.rm = TRUE)
sd_personal<-sd(datos$`Cantidad de personas`, na.rm=TRUE)
cv_personal<-sd_personal/media_personal
cv_personal
## [1] 0

Tenemos entonces que la variable que tiene más variación con respecto a la media es “Edad (años)” porque tiene un 12.6%, luego le sigue la “Estatura (CM)” que cuenta con un coeficiente de 2.6% y por último está la variable “Cantidad de personas” la cual tiene coeficiente de variación 0 (nulo).

Prueba de normalidad

library(nortest)
resultado <- ad.test(datos$`Edad (años)`)
print(resultado)
## 
##  Anderson-Darling normality test
## 
## data:  datos$`Edad (años)`
## A = 2615.9, p-value < 2.2e-16
hist(datos$`Edad (años)`, breaks = 20, main = "Histograma de Edad", xlab = "Edad (años)")

El p-valor es extremadamente menor que 0.05, se rechaza la hipótesis nula de que los datos siguen una distribución normal. Además, esto lo podemos corroborar con el histograma de la variable.

hist(cantidad_personas, main = "Histograma de la edad", xlab = "Cantidad de personas")

El histograma de la variable no presenta normalidad.

library(nortest)
resultado_3 <- ad.test(datos_estatura)
print(resultado_3)
## 
##  Anderson-Darling normality test
## 
## data:  datos_estatura
## A = 45439, p-value < 2.2e-16
hist(datos_estatura, main = "Histograma de la Estatura", xlab = "Estatura (CM)")

El valor p-valor es extremadamente menor que 0.05, por lo cual, se rechaza la hipótesis nula de que los datos siguen una distribución normal. Además, el histograma de la variable no presenta normalidad.

Bibliografía:

La base de datos fue tomada del siguiente enlace: https://www.datos.gov.co/Estad-sticas-Nacionales/Colombianos-en-el-exterior-de-25-a-40-a-os/3k8j-4d42