El siguiente trabajo tiene por objetivo analizar los resultados obtenidos durante en la Prueba de Selección Universitaria (PSU) año 2016. La PSU es un test estandarizado escrito el que se utiliza para el proceso de admisión a la educacion universitaria en Chile. El origen de los datos fue la web https://es.datachile.io/geo/chile#education .
Al analizar los datos, mediante herramientas estadisticas y de analisis, se espera encontrar alguna relacion entre notas, puntaje PSU, tipo de colegio o ubicacion geografica.
Los datos fueron descargados en formato csv. Tras su descarga, se traspaso a formato xslx. Estan agrupados por region,comuna, tipo de administracion del colegio, promedio notas enseñanza media y promedio psu
Antes de cargar los datos en R, se necesita preparar los datos y transformar el formato de archivo csv a xlsx
Datos en Formato CSV
Se separan los datos (que venian delimitados por coma)
Separacion de datos en columnas
Se limpian los datos de tipo texto (region, comuna, administracion), eliminando caracteres extraños (al convertir a CSV se pierden los tildes y la Ñ no es reconocida)
Limpieza de datos
Se normalizan los datos de tipo numerico, el puntaje psu debe ser un valor entero de 3 digitos, el promedio de notas de enseñanza media (NEM) debe ser un valor decimal con precision de 2 digitos decimales, el numero de alumnos (records) debe ser normalizado a un valor entero.
Normalizacion de datos
Visualizo el directorio de trabajo actual
## [1] "C:/Users/thras/OneDrive/Documentos/Universidad/Semestre 6/ACI777 - ANALISIS DE DATOS/TRABAJO/PSU vs NEM"
Instalo librerias necesarias para cargar archivo excel
Importamos datos desde planilla excel, los asigno a tabla “datos”
Importacion de Datos
Visualizamos los datos cargados en la tabla “datos”
Visualizacion de Datos
Ejecutamos la funcion summary para visualizar un resumen estadistico de la variable Promedio PSU
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 360.0 433.0 462.0 476.4 503.0 690.0
Realizamos lo mismo para la variable Promedio NEM
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 4.900 5.490 5.590 5.617 5.730 6.400
Visualizamos la estructura de la tabla y sus variables
## Classes 'tbl_df', 'tbl' and 'data.frame': 673 obs. of 9 variables:
## $ ID Region : num 1 1 1 1 1 1 1 1 1 1 ...
## $ Region : chr "Tarapaca" "Tarapaca" "Tarapaca" "Tarapaca" ...
## $ ID Comuna : num 5 5 58 108 108 113 113 113 113 217 ...
## $ Comuna : chr "Alto Hospicio" "Alto Hospicio" "Colchane" "Huara" ...
## $ ID Administration: num 1 2 1 1 2 1 2 3 4 1 ...
## $ Administration : chr "Municipal" "Particular Subvencionado" "Municipal" "Municipal" ...
## $ Average PSU : num 459 455 370 378 462 445 514 580 432 443 ...
## $ Average NEM : num 5.55 5.54 5.49 5.62 5.38 5.56 5.68 5.98 5.36 5.65 ...
## $ Number of records: num 76 1289 3 15 1 ...
Visualizamos Datos y nombres de variables (columnas de la tabla), los nombres de algunas columnas estan en ingles
## [1] "ID Region" "Region" "ID Comuna"
## [4] "Comuna" "ID Administration" "Administration"
## [7] "Average PSU" "Average NEM" "Number of records"
Dado lo anterior, los reemplazamos por nombres en español con el comando “names”
names(datos)[5] = "ID Administracion"
names (datos) [6] = "Tipo Administracion"
names (datos) [7] = "Prom PSU"
names (datos) [8] = "Prom NEM"
names (datos) [9] = "Total Alumnos"
names (datos)
## [1] "ID Region" "Region" "ID Comuna"
## [4] "Comuna" "ID Administracion" "Tipo Administracion"
## [7] "Prom PSU" "Prom NEM" "Total Alumnos"
Con la funcion sapply, analizamos la tabla “datos” en busqueda de datos no validos
## ID Region Region ID Comuna Comuna
## 0 0 0 0
## ID Administracion Tipo Administracion Prom PSU Prom NEM
## 0 0 0 0
## Total Alumnos
## 0
Volvemos a realizar el resumen estadistico de la tabla datos, variable (o columna) Prom PSU
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 360.0 433.0 462.0 476.4 503.0 690.0
Realizamos el mismo proceso para la variable Prom NEM
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 4.900 5.490 5.590 5.617 5.730 6.400
Finalmente, realizamos el resumen para toda la tabla
## ID Region Region ID Comuna Comuna
## Min. : 1.000 Length:673 Min. : 1.0 Length:673
## 1st Qu.: 6.000 Class :character 1st Qu.: 85.0 Class :character
## Median : 8.000 Mode :character Median :172.0 Mode :character
## Mean : 8.505 Mean :173.5
## 3rd Qu.:13.000 3rd Qu.:262.0
## Max. :15.000 Max. :346.0
## ID Administracion Tipo Administracion Prom PSU Prom NEM
## Min. :1.000 Length:673 Min. :360.0 Min. :4.900
## 1st Qu.:1.000 Class :character 1st Qu.:433.0 1st Qu.:5.490
## Median :2.000 Mode :character Median :462.0 Median :5.590
## Mean :1.756 Mean :476.4 Mean :5.617
## 3rd Qu.:2.000 3rd Qu.:503.0 3rd Qu.:5.730
## Max. :4.000 Max. :690.0 Max. :6.400
## Total Alumnos
## Min. : 1.0
## 1st Qu.: 63.0
## Median : 143.0
## Mean : 431.3
## 3rd Qu.: 397.0
## Max. :7354.0
El Boxplot o diagrama de caja analiza la distribucion de una variable cuantitiva en funcion de una cualitativa, en este caso observaremos la distribucion de la variable Puntaje PSU en funcion del Tipo de Administracion
# Creacion de Boxplot
boxplot(datos$`Prom PSU`~datos$`ID Administracion`,horizontal = TRUE,
col = c("blue", "purple", "green","orange"),main = "Puntaje PSU vs Admin Colegio", xlab = "Puntaje PSU", ylab = "Administracion")
legend(x = "bottomright", legend = c("Municipal", "Part. Subv","Part. Pagado","Adm. Delegada"), fill = c("blue", "purple", "green","orange"), title = "Tipo Admin")
Realizamos el mismo proceso para visualizar la distribucion de la variable Promedio NEM en funcion del Tipo de Administracion
# Creacion de Boxplot
boxplot(datos$`Prom NEM`~datos$`ID Administracion`,horizontal = TRUE,
col = c("blue", "purple", "green","orange"),main = "Promedio NEM vs Admin. Colegio", xlab = "Promedio NEM", ylab = "Administracion")
legend(x = "bottomright", legend = c("Municipal", "Part. Subv","Part. Pagado","Adm. Delegada"), fill = c("blue", "purple", "green","orange"), title = "Tipo Admin")
El histograma nos permite visualizar la distribucion de una variable con respecto a una caracteristica. En este caso, analizaremos la variable Promedio Puntaje PSU 2016 adicionalmente hemos agregado una linea vertical que nos indica el valor de la mediana.
h <- hist(datos$`Prom PSU`, main = "Puntaje PSU 2016",xlab="Promedio Puntaje PSU",ylab = "Frecuencia", col = "green3",breaks = 30)
abline(v=mean(datos$`Prom PSU`),col="blue")
mpsu <- median(datos$`Prom PSU`)
#x <- cat("Mediana: ",mpsu)
legend(x = "topright", legend = c("Mediana: 462"), fill = c("blue"))
Repetimos el proceso para la variable Promedio Notas Enseñanza Media 2016
h <- hist(datos$`Prom NEM`, main = "Promedio Notas Enseñanza Media 2016",xlab="Promedio NEM",ylab = "Frecuencia", col = "orange3",breaks = 30)
abline(v=mean(datos$`Prom NEM`),col="blue")
mpsu <- median(datos$`Prom NEM`)
#x <- cat("Mediana: ",mpsu)
legend(x = "topright", legend = c("Mediana: 5,59"), fill = c("blue"))
Para el siguiente analisis, realizamos la creacion de un data frame llamado “datosdf”
Utilizaremos el paquete dplyr para realizar algunas operaciones sobre nuestro dataframe
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
## [1] "ID.Region" "Region" "ID.Comuna"
## [4] "Comuna" "ID.Administracion" "Tipo.Administracion"
## [7] "Prom.PSU" "Prom.NEM" "Total.Alumnos"
Realizaremos la creacion de un objeto que almacene los datos incluidos en el dataframe “datosdf” que cumplan con la condicion Tipo.Administracion == “Particular Pagado”
Visualizacion Colegio Particular Pagado
Revisamos las estadisticas para el objeto colpart, con respecto a las variables Promedio PSU y Promedio NEM
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 457.0 580.0 603.0 599.5 620.0 690.0
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 4.960 5.800 5.910 5.908 5.990 6.400
Realizamos la misma operacion para los datos que cumplan con la condicion Tipo.Administracion == “Particular Subvencionado”
Visualizacion Colegio Particular Subvencionado
Revisamos las estadisticas para el objeto colpartsub, con respecto a las variables Promedio PSU y Promedio NEM
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 360.0 455.0 487.5 483.0 512.2 587.0
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 4.900 5.518 5.600 5.608 5.710 6.190
Realizamos la misma operacion para los datos que cumplan con la condicion Tipo.Administracion == “Corporacion de Administracion Delegada”
coladm <- filter(datosdf, Tipo.Administracion == "Corporacion de Administracion Delegada")
View(coladm)
Visualizacion Corp. Adm. Delegada
Revisamos las estadisticas para el objeto coladm, con respecto a las variables Promedio PSU y Promedio NEM
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 394.0 439.0 453.0 451.8 463.5 489.0
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 5.120 5.280 5.430 5.408 5.510 5.620
Finalizamos con los datos que cumplan con la condicion Tipo.Administracion == “Municipal”
Visualizacion Colegio Municipal
Y su resumen estadistico
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 364.0 424.0 441.0 444.5 463.0 591.0
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 5.030 5.470 5.560 5.577 5.680 6.040
Al analizar y visualizar los datos con el Box Plot, podemos apreciar una clara diferencia en puntaje y notas entre los colegios segun su tipo de administracion. Los Colegios Particulares se empinan sobre los 603 puntos (mediana) en cambio los colegios municipales no alcanzan los 450. Si analizamos el promedio de notas, los colegios Particulares Pagados tienen un mejor rendimiento academico que sus pares. Tambien se puede apreciar que mas del 50% de lso alumnos que rindieron la Prueba de Seleccion Universitaria provienen de colegios particulares subvencionados.
# Estadisticas
# MEdia NEM
promPSU <- c(median(colpart$Prom.PSU),median(colpartsub$Prom.PSU),median(coladm$Prom.PSU),median(colmun$Prom.PSU) )
##View (promPSU)
promNEM <- c(median(colpart$Prom.NEM),median(colpartsub$Prom.NEM),median(coladm$Prom.NEM),median(colmun$Prom.NEM) )
sumAL<- c(sum(colpart$Total.Alumnos),sum(colpartsub$Total.Alumnos),sum(coladm$Total.Alumnos),sum(colmun$Total.Alumnos))
sumALTOT <- c(sum(datosdf$Total.Alumnos))
porcAL <- c(sum((colpart$Total.Alumnos)/sumALTOT)*100,sum((colpartsub$Total.Alumnos)/sumALTOT)*100,sum((coladm$Total.Alumnos)/sumALTOT)*100,sum((colmun$Total.Alumnos)/sumALTOT)*100)
datos3 <- matrix(c(promPSU, promNEM,sumAL,porcAL), nrow=4, ncol=4)
colnames(datos3)<-c ('Media PSU','Media NEM','Total Alumnos','% Total Alumnos')
rownames (datos3) <- c('Colegio Particular','Colegio Part. Subvencionado', 'Corp. Admin. Delegada', 'Colegio Municipal')
datos3
## Media PSU Media NEM Total Alumnos % Total Alumnos
## Colegio Particular 603.0 5.91 30763 10.598429
## Colegio Part. Subvencionado 487.5 5.60 155582 53.600910
## Corp. Admin. Delegada 453.0 5.43 11175 3.849997
## Colegio Municipal 441.0 5.56 92740 31.950665
Segun las cifras que hemos analizado, existe una clara diferencia entre la educacion “pagada” y la “publica”.