Antecedentes

Universidad Galileo es una entidad educativa superior, producto de 37 años de labor y esfuerzo constante de un selecto grupo de profesionales encabezado por el Doctor Eduardo Suger Cofiño. Universidad Galileo ofrece una gran variedad de carreras que estan agrupadas por factultades. Entre estas facultades se encuentra el area de FISICC, area en donde se llevara acabo el estudio.

La Facultad de Ingeniería de Sistemas, Informática y Ciencias de la Computación, FISICC, es la entidad donde se establecieron las bases que dieron origen a Universidad Galileo. Su experiencia académica, catedráticos y la actualización constante del contenido de los cursos y del equipo de los laboratorios, le ha permitido mantenerse a la vanguardia de la tecnología de punta. Sus carreras brindan a los estudiantes la misma calidad de herramientas que se emplean en las universidades más prestigiosas a nivel mundial.

El curso de Ciencias de la Computación II es el segundo curso del área Ciencias de la Computación, el cual es parte del pensum de estudios para que los estudiantes de las carreras de Ingenieria en sistemas, Ingenieria en telecomunicaciones, Ingenieria en Electronica, Ingenieria en Mecatronica e Ingieneria en sistemas energeticos. En este curso se estudia técnicas avanzadas de programación, incluyendo estructuras de datos, tipos de datos abstractos, interfaces, y algoritmos de búsqueda y ordenamiento. El lenguaje de programación se utiliza como apoyo para lograr el objetivo del curso es Java.

Debido a que este curso es de gran dificultad para una gran cantidad de estudiantes de las carreras anteriormente mencionadas, se estudiara y planteara un modelo de predicción con el fin de comprender lo escencial para ganar el curso.

Obtención de datos

Los datos son obtenidos a traves de una plataforma que utiliza la Universidad Galileo como apoyo para catedraticos y estudiantes en la publicación y observación de notas durantes el curso se imparte. Estas notas son de uso exclusivo y privado para el curso.

Con el fin de no probocar controversias, los nombres de los estudiantes no son reales, a pesar de que se utilizara los nombres como parte del modelo.

Librerias

  library(readr)
## Warning: package 'readr' was built under R version 3.2.5
  library(dplyr)
## 
## 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
  library(ggplot2)
  library(rpart)
  # Cargando la data 
A <- read_csv("~/Developer/R/Econometria I/Proyecto Final/A.csv")
B <- read_csv("~/Developer/R/Econometria I/Proyecto Final/B.csv")
C <- read_csv("~/Developer/R/Econometria I/Proyecto Final/C.csv")
D <- read_csv("~/Developer/R/Econometria I/Proyecto Final/D.csv")

datos <- rbind(A,B,C,D)

str(datos)
## Classes 'tbl_df', 'tbl' and 'data.frame':    129 obs. of  11 variables:
##  $ Carnet   : chr  NA NA NA NA ...
##  $ Titulo   : chr  "Alonzo Vasquez, Luis Emanuel" "Archila Giron, Juan Abel" "Carbonell Ordo\u0096ez, Jose Alejandro" "Carrera Ardon, Jorge Daniel" ...
##  $ Ajuste   : num  -0.16 -0.65 0 -0.9 -18.88 ...
##  $ Parciales: num  3.19 18.83 3.3 0 25.73 ...
##  $ Final    : num  0 0 0 0 20.2 ...
##  $ HT       : num  0 1.26 0 0 2.34 1.26 0.68 0.72 0.54 1.62 ...
##  $ Labs     : num  1.51 8.12 0.1 0.9 25.36 ...
##  $ Proyectos: num  12.46 6.44 0 0 45.29 ...
##  $ NotaFinal: num  17 34 3.4 0 100 96 58 71 23 62 ...
##  $ Sexo     : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ Seccion  : chr  "A" "A" "A" "A" ...
##  - attr(*, "spec")=List of 2
##   ..$ cols   :List of 11
##   .. ..$ Carnet   : list()
##   .. .. ..- attr(*, "class")= chr  "collector_character" "collector"
##   .. ..$ Titulo   : list()
##   .. .. ..- attr(*, "class")= chr  "collector_character" "collector"
##   .. ..$ Ajuste   : list()
##   .. .. ..- attr(*, "class")= chr  "collector_double" "collector"
##   .. ..$ Parciales: list()
##   .. .. ..- attr(*, "class")= chr  "collector_double" "collector"
##   .. ..$ Final    : list()
##   .. .. ..- attr(*, "class")= chr  "collector_double" "collector"
##   .. ..$ HT       : list()
##   .. .. ..- attr(*, "class")= chr  "collector_double" "collector"
##   .. ..$ Labs     : list()
##   .. .. ..- attr(*, "class")= chr  "collector_double" "collector"
##   .. ..$ Proyectos: list()
##   .. .. ..- attr(*, "class")= chr  "collector_double" "collector"
##   .. ..$ NotaFinal: list()
##   .. .. ..- attr(*, "class")= chr  "collector_double" "collector"
##   .. ..$ Sexo     : list()
##   .. .. ..- attr(*, "class")= chr  "collector_integer" "collector"
##   .. ..$ Seccion  : list()
##   .. .. ..- attr(*, "class")= chr  "collector_character" "collector"
##   ..$ default: list()
##   .. ..- attr(*, "class")= chr  "collector_guess" "collector"
##   ..- attr(*, "class")= chr "col_spec"

Las variables que se describen a continuación aportan a evaluar el curso con un valor de 100 puntos.

Nombre de variable Descripción
Carnet Valor numerico asociado a estudiante
Titulo Nombre de estudiante
Ajuste Ajuste sobre nota
Parciales Ponderación sobre 20 puntos
Final Ponderación sobre 30 puntos
HT Puntos extra del curso
Labs Ponderación sobre 15 puntos
Proyecto Ponderación sobre 35 puntos
NotaFinal Ponderación con valor entre 0 a 100, valores >= 61 indica que aprobo el curso.
Sexo 0 hombre , 1 mujer
Sección Letra que indica el salón correspondiente para cada alumno

Observaciones de los datos

  grafia_comparativa_asistencia <- function(d , titulo ){
    asistieron_a_final <- d %>% filter(Final>0)  
    asigndos_a_curso <- d 
    
    asigndos_a_curso$Tipo_Estudiantes <- "Inscritos hasta el final"
    asistieron_a_final$Tipo_Estudiantes <- "Asistieron al final"
    
    combinacion_de_datos_para_graph <- rbind( asigndos_a_curso , asistieron_a_final)
  
    combinacion_de_datos_para_graph %>% 
      ggplot( aes( x=NotaFinal, fill=Tipo_Estudiantes) ) +
        scale_y_continuous( breaks = seq(0,50,by=5)) +
        scale_x_continuous( breaks = seq(0,100,by=10)) +
        labs(title= titulo ) +
        labs(x="Nota Final", y="Cantidad de estudiantes") +
        scale_fill_manual(values=c("#F0E442", "#0072B2")) +
        geom_histogram(
          breaks=seq(0, 100, by = 10),  
          alpha=0.6, 
          position="identity",
          colour = "white"
      )
  }

grafia_comparativa_por_seccion <- function(d , titulo ){
  d %>% 
    ggplot( aes( x=NotaFinal, fill=Seccion) ) +
    scale_y_continuous( breaks = seq(0,50,by=5)) +
    scale_x_continuous( breaks = seq(0,100,by=10)) +
    labs(title= titulo ) +
    labs(x="Nota Final", y="Cantidad de estudiantes") +
    geom_histogram(
      breaks=seq(0, 100, by = 10),  
      alpha=0.6, 
      position="identity",
      colour = "white"
    )
}

grafia_comparativa_por_laboratorio <- function(d , titulo ){
  d %>% 
    ggplot( aes( x=NotaFinal, fill=laboratorio_aprobado) ) +
    scale_y_continuous( breaks = seq(0,50,by=5)) +
    scale_x_continuous( breaks = seq(0,100,by=10)) +
    labs(title= titulo ) +
    labs(x="Nota Final", y="Cantidad de estudiantes") +
    geom_histogram(
      breaks=seq(0, 100, by = 10),  
      alpha=0.6, 
      position="identity",
      colour = "white"
    )
}

grafia_comparativa_por_examenes_parciales <- function(d , titulo ){
  d %>% 
    ggplot( aes( x=NotaFinal, fill=parciales_aprobados) ) +
    scale_y_continuous( breaks = seq(0,50,by=5)) +
    scale_x_continuous( breaks = seq(0,100,by=10)) +
    labs(title= titulo ) +
    labs(x="Nota Final", y="Cantidad de estudiantes") +
    geom_histogram(
      breaks=seq(0, 100, by = 10),  
      alpha=0.6, 
      position="identity",
      colour = "white"
    )
}

grafica_comparativa_por_proyecto <- function(d , titulo ){
  d %>% 
    ggplot( aes( x=NotaFinal, fill=proyecto_aprobado) ) +
    scale_y_continuous( breaks = seq(0,50,by=5)) +
    scale_x_continuous( breaks = seq(0,100,by=10)) +
    labs(title= titulo ) +
    labs(x="Nota Final", y="Cantidad de estudiantes") +
    geom_histogram(
      breaks=seq(0, 100, by = 10),  
      alpha=0.6, 
      position="identity",
      colour = "white"
    )
}

grafica_esfuerzo_extra <- function(d , titulo ){
  d %>% 
    ggplot( aes( x=NotaFinal, fill=esfuerzo_extracurricular) ) +
    scale_y_continuous( breaks = seq(0,50,by=5)) +
    scale_x_continuous( breaks = seq(0,100,by=10)) +
    labs(title= titulo ) +
    labs(x="Nota Final", y="Cantidad de estudiantes") +
    geom_histogram(
      breaks=seq(0, 100, by = 10),  
      alpha=0.6, 
      position="identity",
      colour = "white"
    )
}

grafica_sexo <- function(d , titulo ){
  d %>% 
    ggplot( aes( x=NotaFinal, fill=genero) ) +
    scale_y_continuous( breaks = seq(0,50,by=5)) +
    scale_x_continuous( breaks = seq(0,100,by=10)) +
    labs(title= titulo ) +
    labs(x="Nota Final", y="Cantidad de estudiantes") +
    geom_histogram(
      breaks=seq(0, 100, by = 10),  
      alpha=0.6, 
      position="identity",
      colour = "white"
    )
}

Resultados finales en base a estudiantes que finalizaron el curso

  grafia_comparativa_asistencia( datos , "Notas finales de alumnos"  )

En base a esta grafica, podemos observar que los estudiantes que ganan el curso, asisten a el examen final y la mayoria que noa asiste al examen final pierde. Para este caso se cuentan con:

  datos$gano <- ifelse(  datos$NotaFinal >= 61 , 
                         yes = 1 , 
                         no = 0
    )


  table(datos$gano)
## 
##  0  1 
## 69 60

Lo que nos representa que 69 estudiantes perdieron el curso y 60 estudiantes aprovaron.

Resultados finales en base a estudiantes por sección

  grafia_comparativa_por_seccion(datos, "Resultados finales por sección")

La distribución de alumnos por sección es de la siguiente manera, los estudiantes que menor nota tuvieron son aquellos que pertenecen a la sección B, lo cual hace pensar que mientras más alumnos existan, menor es la probabilidad de aprobar el curso.

  table(datos$Seccion)
## 
##  A  B  C  D 
## 28 44 28 29

Aprobación de laboratorios y relación con notas finales

Entre las actividades que se realizan durante todo el semestre, se encuentran los laboratorios. Estos son asignados una vez por semana, basados en la hipotesis que los laboratorios son importantes en la practica, aqui se presenta la relación que existe en las notas finales y la aprobación de laboratorio.

  datos$laboratorio_aprobado <- ifelse( datos$Labs >= 15*0.61 , 
                                           yes = "SI",
                                           no = "NO"
  )
  
  grafia_comparativa_por_laboratorio(datos, "Resultados finales en relación a laboratorios")

Esta grafica denota que parte importante del curso es la aprobación de los laboratorios. Existen excepciones a estudiantes que obtuvieron una nota elevada y perdieron laboratorios, pero al parecer es una buena relación para saber si existe ganador o perdedor.

  table(datos$laboratorio_aprobado)  
## 
## NO SI 
## 62 67

Relación notas finales y examenes parciales

  datos$parciales_aprobados = ifelse( datos$Parciales >= 20*0.61 , 
                                      yes = "SI", 
                                      no = "NO"
  )

  grafia_comparativa_por_examenes_parciales(datos, "Resultados finales en relación a parciales")

Al parecer la variable examen parcial tambien es significativa para estimar si el estudiante apruba o no el curso.

  table(datos$parciales_aprobados)  
## 
## NO SI 
## 53 76

Relación notas finales y proyectos del curso

datos$proyecto_aprobado = ifelse( datos$Proyectos >= 30*0.61 , 
                                      yes = "SI", 
                                      no = "NO"
  )

  grafica_comparativa_por_proyecto(datos, "Resultados finales en relación a proyectos")

Esta grafica denota claramente que los proyectos al parecer son bastante significativos si el estudiante desea aprobar el curso.

Relación de estudiantes aprobados con actividades extraordinarias que implican puntos extra

datos$esfuerzo_extracurricular = 
    ifelse( datos$HT > 0 & datos$HT <= .5 , 
        yes = "20%", 
        ifelse( datos$HT > 0.5 & datos$HT <= 1 , 
                yes = "40%",
                ifelse( datos$HT > 1 & datos$HT <= 1.5 , 
                        yes = "60%",
                        ifelse( datos$HT > 1.5 & datos$HT <= 2 , 
                            yes = "80%",
                            no = "100%"
                        )
                )
        )
)

  grafica_esfuerzo_extra(datos, "Resultados finales en relación a el esfuerzo extracurricular")  

Al parecer las hojas de trabajo que equivalen a el esfuerzo extra que deben de realizar los estudiantes es poco significativo para aprobar el curso, sin embargo los estudiantes que realizaron las hojas de trabajo sacaron notas entre 90 y 100.

  table(datos$esfuerzo_extracurricular)
## 
## 100%  20%  40%  60%  80% 
##   69   17   16   20    7

Relación nota final y genero

  datos$genero <- ifelse( datos$Sexo == 0 , 
                          yes = "Hombre",
                          no = "Mujer"
  )

  grafica_sexo(datos, "Resultados finales en relación a el genero")  

Al parecer la grafica no indica que exista un relación en aprobar el curso con el genero de las personas.

  table(datos$genero)
## 
## Hombre  Mujer 
##    108     21

Modelo de predicción para aprobar el curso

modelo <-lm(data = datos, 
            formula = gano ~ Parciales + Final + HT + Labs + Proyectos + Sexo + Seccion )

summary(modelo)
## 
## Call:
## lm(formula = gano ~ Parciales + Final + HT + Labs + Proyectos + 
##     Sexo + Seccion, data = datos)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.58408 -0.10517  0.00478  0.09468  0.49827 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -0.102886   0.051736  -1.989   0.0490 *  
## Parciales    0.001117   0.004429   0.252   0.8013    
## Final        0.015899   0.003413   4.659 8.35e-06 ***
## HT           0.038789   0.030909   1.255   0.2119    
## Labs        -0.002201   0.005053  -0.436   0.6639    
## Proyectos    0.014751   0.001852   7.966 1.10e-12 ***
## Sexo         0.012884   0.052609   0.245   0.8070    
## SeccionB     0.096259   0.051464   1.870   0.0639 .  
## SeccionC     0.110789   0.057498   1.927   0.0564 .  
## SeccionD     0.009440   0.056772   0.166   0.8682    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.2072 on 119 degrees of freedom
## Multiple R-squared:  0.8407, Adjusted R-squared:  0.8287 
## F-statistic:  69.8 on 9 and 119 DF,  p-value: < 2.2e-16

Modelo de predicción para clase de Ciencias de la Computación II

\[ ganadores(parciales,final,HT,Labs,Proyectos,Sexo)=-0.1228+0.00111*Parciales+0.0158*Final+0.0387*HT-0.0022*Labs+0.01471*Proyectos+0.01288*Sexo \] \[ p-value = 0.00000000000000022 \] \[ Residual standard error: 0.2072 \]

\[ { r }^{ 2 }= 0.8407 \]

  plot(modelo)

Arbol y reglas de decision para aprobación de curso de Ciencias de la Computación II

library(rattle)
## Warning: package 'rattle' was built under R version 3.2.3
## R session is headless; GTK+ not initialized.
## Rattle: A free graphical interface for data mining with R.
## Version 4.1.0 Copyright (c) 2006-2015 Togaware Pty Ltd.
## Type 'rattle()' to shake, rattle, and roll your data.
  m<-rpart( 
      formula = gano ~ Parciales + Final + HT + Labs + Proyectos + Sexo + Seccion , 
      data = datos
  )
          
  fancyRpartPlot(m)

  asRules(m)
## 
##  Rule number: 4 [gano=0 cover=59 (46%)]
##    Proyectos< 20.83
##    Parciales< 18.11
## 
##  Rule number: 7 [gano=1 cover=55 (43%)]
##    Proyectos>=20.83
##    Labs>=9.03
## 
##  Rule number: 5 [gano=0.25 cover=8 (6%)]
##    Proyectos< 20.83
##    Parciales>=18.11
## 
##  Rule number: 6 [gano=0.428571428571429 cover=7 (5%)]
##    Proyectos>=20.83
##    Labs< 9.03