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)
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.
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"
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
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)
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.
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.
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"
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.
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