library(readxl)
data <- read_excel("C:/Users/emper/OneDrive/Base_tp_Mat_Pura.xlsx")
View(data)
head(data)
## # A tibble: 6 × 44
## IDEM CI SEXO CARRERA ING_A ING_P TIPO_INGRESO MODALIDAD ANTES ASIG_APROB
## <dbl> <dbl> <chr> <chr> <dbl> <chr> <chr> <chr> <dbl> <dbl>
## 1 2 8.08e5 F 2009P 2009 Prim… INGRESO Presenci… NA 40
## 2 11 2.99e6 M 2009P 2009 Prim… INGRESO Presenci… NA 40
## 3 12 3.01e6 F 2009P 2009 Prim… TRASLADO Presenci… 1 3
## 4 22 3.46e6 F 2009P 2009 Prim… INGRESO Presenci… NA 23
## 5 24 3.57e6 F 2009P 2009 Prim… INGRESO Presenci… NA 8
## 6 29 3.87e6 F 2009P 2009 Prim… INGRESO Presenci… NA 6
## # ℹ 34 more variables: SIT_ACAD <chr>, ESTADO_ACADEMICO <dbl>,
## # RENDIMIENTO <chr>, CIUDAD <chr>, DEPARTAMENTO <chr>, RESIDENCIA <chr>,
## # EDAD <dbl>, EST_CIVIL <dbl>, TIPO_COL <dbl>, TRABAJA <dbl>,
## # SOLVENTAR <dbl>, EDUC_PAD <dbl>, PUNT_PAD <dbl>, OCUP_PAD <dbl>,
## # EDUC_MAD <dbl>, PUNT_MAD <dbl>, OCUP_MAD <dbl>, OCUP_PAD_MAD <dbl>,
## # ESTUDIOS_PADRES <dbl>, INGRESO <dbl>, DEPENDENCIA <dbl>, CASA <dbl>,
## # CASA_CANT <chr>, TERRENO <dbl>, AUTO <dbl>, AIRE <dbl>, CALEFON <chr>, …
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)
library(MASS)
##
## Adjuntando el paquete: 'MASS'
## The following object is masked from 'package:dplyr':
##
## select
library(car)
## Cargando paquete requerido: carData
##
## Adjuntando el paquete: 'car'
## The following object is masked from 'package:dplyr':
##
## recode
library(caret)
## Cargando paquete requerido: lattice
library(readxl)
library(gmodels)
table(data$ESTADO_ACADEMICO)
##
## 0 1
## 54 118
data$ESTADO_ACADEMICO <- factor(data$ESTADO_ACADEMICO,
levels = c("0","1"),
labels = c("NO DESERTOR", "DESERTOR"))
# Gráfico de barras con colores vivos y etiquetas de valor
ggplot(data, aes(x = ESTADO_ACADEMICO)) +
geom_bar(aes(fill = ESTADO_ACADEMICO)) +
scale_fill_manual(values = c("green", "red")) +
geom_text(stat = 'count', aes(label = after_stat(count)), vjust = -0.5) +
theme_minimal() +
labs(title = "Distribución del Estado Académico. Area Matemática. FACEN-UNA",
y = "Frecuencia") +
theme(legend.position = "none")
# Tabla de frecuencias absolutas y relativas para toda la población
frecuencia_absoluta_total <- table(data$SIT_ACAD)
frecuencia_relativa_total <- prop.table(frecuencia_absoluta_total)
# Crear un data frame con ambas frecuencias
tabla_frecuencias_total <- data.frame(
"SIT_ACAD" = names(frecuencia_absoluta_total),
"Frecuencia Absoluta" = as.numeric(frecuencia_absoluta_total),
"Frecuencia Relativa (%)" = round(100 * as.numeric(frecuencia_relativa_total), 2)
)
# Mostrar la tabla
tabla_frecuencias_total
## SIT_ACAD Frecuencia.Absoluta Frecuencia.Relativa....
## 1 ACTIVO 21 12.21
## 2 DESERCIÓN 118 68.60
## 3 EGRESO 33 19.19
boxplot(ESTADO_ACADEMICO~SIT_ACAD, data=data)
#Para convertir varias variables a factor
#Las guardamos en un vector
cols <- c("SEXO", "TIPO_INGRESO", "SIT_ACAD", "RENDIMIENTO", "DEPARTAMENTO", "EST_CIVIL", "TIPO_COL", "TRABAJA", "SOLVENTAR",
"ESTUDIOS_PADRES", "INGRESO", "NIVEL_SOCIO",
"OCUP_PAD", "OCUP_MAD", "RESIDENCIA")
#Le aplicamos una misma función a todas las colum=nas con lapply
data[cols] <- lapply(data[cols], factor)
data$SEXO <- factor(data$SEXO,
levels = c("F","M"),
labels = c("FEMENINO", "MASCULINO"))
data$TIPO_INGRESO <- factor(data$TIPO_INGRESO,
levels = c("INGRESO","TRASLADO", "ADMISION DIRECTA"),
labels = c("INGRESO","TRASLADO", "ADMISION DIRECTA"))
data$SIT_ACAD <- factor(data$SIT_ACAD,
levels = c("EGRESO","ACTIVO", "DESERCIÓN"),
labels = c("EGRESO","ACTIVO", "DESERCIÓN"))
data$EST_CIVIL <- factor(data$EST_CIVIL,
levels = c(1, 2, 3, 4),
labels = c("Soltero/a", "Casado/a","Divordiado/a","Otro"))
data$TIPO_COL <- factor(data$TIPO_COL,
levels = c(1, 2, 3),
labels = c("Público", "subvencionado","Privado"))
data$TRABAJA <- factor(data$TRABAJA,
levels = c(1, 2),
labels = c("SI","NO"))
data$SOLVENTAR <- factor(data$SOLVENTAR,
levels = c(1, 2, 3, 4),
labels = c("Beca/exoneración total", "Beca/exoneración parcial","Trabajo Personal","Ayuda Familiar"))
data$ESTUDIOS_PADRES <- factor(data$ESTUDIOS_PADRES,
levels = c(1, 2, 3, 4, 5),
labels = c("hasta 13 años", "14-23 años","24-29 años","30-34 años","Más de 34 años"))
data$INGRESO <- factor(data$INGRESO,
levels = c(1, 2, 3, 4, 5),
labels = c("Hasta dos salarios mínimos", "Más de dos y hasta cinco salarios mínimos","Más de cinco y hasta diez salarios mínimos","Más de diez y hasta quince salarios mínimos","Más de quince salarios mínimos"))
data$NIVEL_SOCIO <- factor(data$NIVEL_SOCIO,
levels = c("BAJO","MEDIO BAJO","MEDIO","MEDIO ALTO", "ALTO"),
labels = c("BAJO","MEDIO BAJO","MEDIO", "MEDIO ALTO", "ALTO"))
data$RENDIMIENTO <- factor(data$RENDIMIENTO,
levels = c("APROBADO","NO APROBADO"),
labels = c("APROBADO","NO APROBADO"))
data$OCUP_PAD <- factor(data$OCUP_PAD,
levels = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11),
labels = c("Obrero/a, Jornalero/a, Servicio doméstico", "Vendedor/a, Técnico/a independiente o con Oficio","Administrativo/a o Técnico/a dependiente","Policía/Militar rango subalterno/Comerciante/Docente de primaria y secundaria","Profesional dependiente o independiente/Docente Universitario","Gerente o Director dependiente/Policía/Militar rango superior", "Empresario/a", "Con ocupación no remunerada (ama de casa)", "Fallecido", "Desempleado", "No sabe"))
data$OCUP_MAD <- factor(data$OCUP_MAD,
levels = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11),
labels = c("Obrero/a, Jornalero/a, Servicio doméstico", "Vendedor/a, Técnico/a independiente o con Oficio","Administrativo/a o Técnico/a dependiente","Policía/Militar rango subalterno/Comerciante/Docente de primaria y secundaria","Profesional dependiente o independiente/Docente Universitario","Gerente o Director dependiente/Policía/Militar rango superior", "Empresario/a", "Con ocupación no remunerada (ama de casa)", "Fallecido", "Desempleado", "No sabe"))
data$RESIDENCIA <- factor(data$RESIDENCIA,
levels = c("ASUNCIÓN","CENTRAL","RESTO"),
labels = c("ASUNCIÓN","CENTRAL","RESTO DEL PAÍS"))
#visualizar las variables
str(data)
## tibble [172 × 44] (S3: tbl_df/tbl/data.frame)
## $ IDEM : num [1:172] 2 11 12 22 24 29 34 38 39 43 ...
## $ CI : num [1:172] 808452 2992817 3006309 3464226 3567401 ...
## $ SEXO : Factor w/ 2 levels "FEMENINO","MASCULINO": 1 2 1 1 1 1 1 1 2 2 ...
## $ CARRERA : chr [1:172] "2009P" "2009P" "2009P" "2009P" ...
## $ ING_A : num [1:172] 2009 2009 2009 2009 2009 ...
## $ ING_P : chr [1:172] "Primero" "Primero" "Primero" "Primero" ...
## $ TIPO_INGRESO : Factor w/ 3 levels "INGRESO","TRASLADO",..: 1 1 2 1 1 1 1 1 1 1 ...
## $ MODALIDAD : chr [1:172] "Presencial" "Presencial" "Presencial" "Presencial" ...
## $ ANTES : num [1:172] NA NA 1 NA NA NA NA NA NA NA ...
## $ ASIG_APROB : num [1:172] 40 40 3 23 8 6 40 40 0 0 ...
## $ SIT_ACAD : Factor w/ 3 levels "EGRESO","ACTIVO",..: 1 1 3 3 3 3 1 1 3 3 ...
## $ ESTADO_ACADEMICO: Factor w/ 2 levels "NO DESERTOR",..: 1 1 2 2 2 2 1 1 2 2 ...
## $ RENDIMIENTO : Factor w/ 2 levels "APROBADO","NO APROBADO": 1 1 1 1 2 1 1 1 2 2 ...
## $ CIUDAD : chr [1:172] "ASUNCIÓN" "VILLETA" "FDO DE LA MORA" "YAGUARÓN" ...
## $ DEPARTAMENTO : Factor w/ 7 levels "ALTO PARAGUAY",..: 2 3 3 6 3 2 3 3 3 3 ...
## $ RESIDENCIA : Factor w/ 3 levels "ASUNCIÓN","CENTRAL",..: 1 2 2 3 2 1 2 2 2 2 ...
## $ EDAD : num [1:172] 45 19 30 22 18 19 19 18 26 20 ...
## $ EST_CIVIL : Factor w/ 4 levels "Soltero/a","Casado/a",..: 2 1 1 1 1 1 1 1 1 1 ...
## $ TIPO_COL : Factor w/ 3 levels "Público","subvencionado",..: 1 1 1 2 1 1 1 1 1 1 ...
## $ TRABAJA : Factor w/ 2 levels "SI","NO": 2 2 1 2 2 2 2 2 2 1 ...
## $ SOLVENTAR : Factor w/ 4 levels "Beca/exoneración total",..: 4 4 3 4 4 4 4 1 4 4 ...
## $ EDUC_PAD : num [1:172] 8 4 1 3 4 4 2 2 1 6 ...
## $ PUNT_PAD : num [1:172] 14 10 0 7 10 10 3 3 0 13 ...
## $ OCUP_PAD : Factor w/ 11 levels "Obrero/a, Jornalero/a, Servicio doméstico",..: 9 2 5 1 1 3 1 2 1 3 ...
## $ EDUC_MAD : num [1:172] 5 4 2 4 4 4 2 1 2 2 ...
## $ PUNT_MAD : num [1:172] 12 10 3 10 10 10 3 0 3 3 ...
## $ OCUP_MAD : Factor w/ 11 levels "Obrero/a, Jornalero/a, Servicio doméstico",..: 3 2 8 4 1 8 8 8 1 2 ...
## $ OCUP_PAD_MAD : num [1:172] 26 20 3 17 20 20 6 3 3 16 ...
## $ ESTUDIOS_PADRES : Factor w/ 5 levels "hasta 13 años",..: 3 2 1 2 2 2 1 1 1 2 ...
## $ INGRESO : Factor w/ 5 levels "Hasta dos salarios mínimos",..: 2 1 1 1 1 1 1 1 2 1 ...
## $ DEPENDENCIA : num [1:172] NA NA NA NA NA NA NA NA NA NA ...
## $ CASA : num [1:172] 1 2 1 1 2 1 1 1 2 1 ...
## $ CASA_CANT : chr [1:172] "1" NA "1" "1" ...
## $ TERRENO : num [1:172] 1 2 1 2 2 2 1 1 2 1 ...
## $ AUTO : num [1:172] 1 2 2 2 2 1 1 1 2 1 ...
## $ AIRE : num [1:172] 1 2 2 2 2 1 2 2 2 1 ...
## $ CALEFON : chr [1:172] "3" NA NA NA ...
## $ TELEFONO : num [1:172] 1 2 1 1 1 1 2 1 2 1 ...
## $ CABLE : num [1:172] 1 1 2 2 2 2 2 1 1 1 ...
## $ PC : num [1:172] 1 2 2 1 2 1 2 2 2 1 ...
## $ INTERNET : num [1:172] 1 2 2 2 2 2 2 2 2 2 ...
## $ TRANSPORTE : chr [1:172] "1" "1" "1" "1" ...
## $ TRANSPORTE_MEDIO: chr [1:172] NA NA NA NA ...
## $ NIVEL_SOCIO : Factor w/ 5 levels "BAJO","MEDIO BAJO",..: 2 1 1 2 1 2 2 1 1 2 ...
Reporte de la base de datos
summary(data)
## IDEM CI SEXO CARRERA
## Min. : 2.0 Min. : 808452 FEMENINO :92 Length:172
## 1st Qu.:167.8 1st Qu.:4006056 MASCULINO:80 Class :character
## Median :356.5 Median :4786564 Mode :character
## Mean :360.7 Mean :4510419
## 3rd Qu.:473.2 3rd Qu.:5118704
## Max. :759.0 Max. :7087824
##
## ING_A ING_P TIPO_INGRESO MODALIDAD
## Min. :2009 Length:172 INGRESO :167 Length:172
## 1st Qu.:2011 Class :character TRASLADO : 1 Class :character
## Median :2013 Mode :character ADMISION DIRECTA: 4 Mode :character
## Mean :2013
## 3rd Qu.:2015
## Max. :2017
##
## ANTES ASIG_APROB SIT_ACAD ESTADO_ACADEMICO
## Min. : 1.000 Min. : 0.00 EGRESO : 33 NO DESERTOR: 54
## 1st Qu.: 3.000 1st Qu.: 0.75 ACTIVO : 21 DESERTOR :118
## Median :12.000 Median : 9.00 DESERCIÓN:118
## Mean : 9.778 Mean :15.27
## 3rd Qu.:13.000 3rd Qu.:30.00
## Max. :19.000 Max. :40.00
## NA's :163
## RENDIMIENTO CIUDAD DEPARTAMENTO
## APROBADO :111 Length:172 ALTO PARAGUAY : 2
## NO APROBADO: 61 Class :character ASUNCIÓN :60
## Mode :character CENTRAL :94
## CORDILLERA : 5
## GUAIRÁ : 1
## PARAGUARÍ : 6
## PRESIDENTE HAYES: 4
## RESIDENCIA EDAD EST_CIVIL TIPO_COL
## ASUNCIÓN :60 Min. :18.00 Soltero/a :149 Público :120
## CENTRAL :94 1st Qu.:19.00 Casado/a : 22 subvencionado: 14
## RESTO DEL PAÍS:18 Median :20.27 Divordiado/a: 1 Privado : 38
## Mean :24.43 Otro : 0
## 3rd Qu.:26.00
## Max. :61.00
##
## TRABAJA SOLVENTAR EDUC_PAD PUNT_PAD
## SI: 56 Beca/exoneración total :24 Min. : 1.000 Min. : 0.00
## NO:116 Beca/exoneración parcial:11 1st Qu.: 2.000 1st Qu.: 3.00
## Trabajo Personal :51 Median : 4.500 Median :11.00
## Ayuda Familiar :86 Mean : 4.872 Mean :10.01
## 3rd Qu.: 7.000 3rd Qu.:14.00
## Max. :10.000 Max. :20.00
##
## OCUP_PAD
## Obrero/a, Jornalero/a, Servicio doméstico :65
## Vendedor/a, Técnico/a independiente o con Oficio :33
## Administrativo/a o Técnico/a dependiente :17
## Profesional dependiente o independiente/Docente Universitario:15
## Fallecido :13
## No sabe : 9
## (Other) :20
## EDUC_MAD PUNT_MAD
## Min. : 1.000 Min. : 0.000
## 1st Qu.: 3.000 1st Qu.: 7.000
## Median : 4.000 Median :10.000
## Mean : 4.599 Mean : 9.535
## 3rd Qu.: 6.000 3rd Qu.:13.000
## Max. :10.000 Max. :20.000
##
## OCUP_MAD
## Con ocupación no remunerada (ama de casa) :59
## Obrero/a, Jornalero/a, Servicio doméstico :43
## Vendedor/a, Técnico/a independiente o con Oficio :19
## Policía/Militar rango subalterno/Comerciante/Docente de primaria y secundaria:14
## Profesional dependiente o independiente/Docente Universitario :13
## Administrativo/a o Técnico/a dependiente :10
## (Other) :14
## OCUP_PAD_MAD ESTUDIOS_PADRES
## Min. : 0.00 hasta 13 años :45
## 1st Qu.:13.00 14-23 años :57
## Median :20.00 24-29 años :46
## Mean :19.54 30-34 años :19
## 3rd Qu.:27.00 Más de 34 años: 5
## Max. :40.00
##
## INGRESO DEPENDENCIA
## Hasta dos salarios mínimos :134 Min. : 1.000
## Más de dos y hasta cinco salarios mínimos : 28 1st Qu.: 3.000
## Más de cinco y hasta diez salarios mínimos : 6 Median : 4.000
## Más de diez y hasta quince salarios mínimos: 1 Mean : 3.994
## Más de quince salarios mínimos : 3 3rd Qu.: 5.000
## Max. :10.000
## NA's :15
## CASA CASA_CANT TERRENO AUTO
## Min. :1.00 Length:172 Min. :1.000 Min. :1.000
## 1st Qu.:1.00 Class :character 1st Qu.:1.000 1st Qu.:1.000
## Median :1.00 Mode :character Median :2.000 Median :2.000
## Mean :1.23 Mean :1.724 Mean :1.626
## 3rd Qu.:1.00 3rd Qu.:2.000 3rd Qu.:2.000
## Max. :2.00 Max. :2.000 Max. :2.000
## NA's :46 NA's :27 NA's :1
## AIRE CALEFON TELEFONO CABLE
## Min. :1.000 Length:172 Min. :1.000 Min. :1.000
## 1st Qu.:1.000 Class :character 1st Qu.:1.000 1st Qu.:1.000
## Median :2.000 Mode :character Median :2.000 Median :2.000
## Mean :1.503 Mean :1.579 Mean :1.528
## 3rd Qu.:2.000 3rd Qu.:2.000 3rd Qu.:2.000
## Max. :2.000 Max. :2.000 Max. :2.000
## NA's :1 NA's :1 NA's :28
## PC INTERNET TRANSPORTE TRANSPORTE_MEDIO
## Min. :1.000 Min. : 1.000 Length:172 Length:172
## 1st Qu.:1.000 1st Qu.: 1.000 Class :character Class :character
## Median :1.000 Median : 1.000 Mode :character Mode :character
## Mean :1.316 Mean : 1.533
## 3rd Qu.:2.000 3rd Qu.: 2.000
## Max. :2.000 Max. :11.000
## NA's :1 NA's :50
## NIVEL_SOCIO
## BAJO : 25
## MEDIO BAJO:128
## MEDIO : 19
## MEDIO ALTO: 0
## ALTO : 0
##
##
FRECUENCIAS SIMPLES
table(data$SEXO)
##
## FEMENINO MASCULINO
## 92 80
table(data$TIPO_INGRESO)
##
## INGRESO TRASLADO ADMISION DIRECTA
## 167 1 4
table(data$SIT_ACAD)
##
## EGRESO ACTIVO DESERCIÓN
## 33 21 118
table(data$EST_CIVIL)
##
## Soltero/a Casado/a Divordiado/a Otro
## 149 22 1 0
table(data$RENDIMIENTO)
##
## APROBADO NO APROBADO
## 111 61
table(data$DEPARTAMENTO)
##
## ALTO PARAGUAY ASUNCIÓN CENTRAL CORDILLERA
## 2 60 94 5
## GUAIRÁ PARAGUARÍ PRESIDENTE HAYES
## 1 6 4
table(data$TIPO_COL)
##
## Público subvencionado Privado
## 120 14 38
table(data$TRABAJA)
##
## SI NO
## 56 116
table(data$SOLVENTAR)
##
## Beca/exoneración total Beca/exoneración parcial Trabajo Personal
## 24 11 51
## Ayuda Familiar
## 86
table(data$ESTUDIOS_PADRES)
##
## hasta 13 años 14-23 años 24-29 años 30-34 años Más de 34 años
## 45 57 46 19 5
table(data$OCUP_PAD)
##
## Obrero/a, Jornalero/a, Servicio doméstico
## 65
## Vendedor/a, Técnico/a independiente o con Oficio
## 33
## Administrativo/a o Técnico/a dependiente
## 17
## Policía/Militar rango subalterno/Comerciante/Docente de primaria y secundaria
## 6
## Profesional dependiente o independiente/Docente Universitario
## 15
## Gerente o Director dependiente/Policía/Militar rango superior
## 2
## Empresario/a
## 5
## Con ocupación no remunerada (ama de casa)
## 5
## Fallecido
## 13
## Desempleado
## 2
## No sabe
## 9
table(data$OCUP_MAD)
##
## Obrero/a, Jornalero/a, Servicio doméstico
## 43
## Vendedor/a, Técnico/a independiente o con Oficio
## 19
## Administrativo/a o Técnico/a dependiente
## 10
## Policía/Militar rango subalterno/Comerciante/Docente de primaria y secundaria
## 14
## Profesional dependiente o independiente/Docente Universitario
## 13
## Gerente o Director dependiente/Policía/Militar rango superior
## 2
## Empresario/a
## 6
## Con ocupación no remunerada (ama de casa)
## 59
## Fallecido
## 2
## Desempleado
## 1
## No sabe
## 3
table(data$RESIDENCIA)
##
## ASUNCIÓN CENTRAL RESTO DEL PAÍS
## 60 94 18
table(data$NIVEL_SOCIO)
##
## BAJO MEDIO BAJO MEDIO MEDIO ALTO ALTO
## 25 128 19 0 0
levels(data$OCUP_PAD)
## [1] "Obrero/a, Jornalero/a, Servicio doméstico"
## [2] "Vendedor/a, Técnico/a independiente o con Oficio"
## [3] "Administrativo/a o Técnico/a dependiente"
## [4] "Policía/Militar rango subalterno/Comerciante/Docente de primaria y secundaria"
## [5] "Profesional dependiente o independiente/Docente Universitario"
## [6] "Gerente o Director dependiente/Policía/Militar rango superior"
## [7] "Empresario/a"
## [8] "Con ocupación no remunerada (ama de casa)"
## [9] "Fallecido"
## [10] "Desempleado"
## [11] "No sabe"
library(dplyr)
data$OCUP_PAD_REC <- case_when(
data$OCUP_PAD == 1 ~ '1-Obrero/a, Jornalero/a, Servicio doméstico',
data$OCUP_PAD == 2 ~ '2-Vendedor/a, Técnico/a independiente o con Oficio',
data$OCUP_PAD == 3 ~ '3-Administrativo/a o Técnico/a dependiente',
data$OCUP_PAD == 4 ~ '4/6-Policía/Militar rango subalterno o superior, Comerciante/Docente',
data$OCUP_PAD == 6 ~ '4/6-Policía/Militar rango subalterno o superior, Comerciante/Docente',
data$OCUP_PAD == 5 ~ '5-Profesional dependiente o independiente/Docente Universitario',
data$OCUP_PAD == 7 ~ '7-Empresario/a',
data$OCUP_PAD == 8 ~ '8-Con ocupación no remunerada (ama de casa)',
data$OCUP_PAD %in% c(9, 10, 11) ~ '9/10/11-Fallecido, Desempleado o No sabe',
TRUE ~ NA_character_
)
# Verificar la nueva variable recategorizada
table(data$OCUP_PAD_REC)
## < table of extent 0 >
levels(data$OCUP_MAD)
## [1] "Obrero/a, Jornalero/a, Servicio doméstico"
## [2] "Vendedor/a, Técnico/a independiente o con Oficio"
## [3] "Administrativo/a o Técnico/a dependiente"
## [4] "Policía/Militar rango subalterno/Comerciante/Docente de primaria y secundaria"
## [5] "Profesional dependiente o independiente/Docente Universitario"
## [6] "Gerente o Director dependiente/Policía/Militar rango superior"
## [7] "Empresario/a"
## [8] "Con ocupación no remunerada (ama de casa)"
## [9] "Fallecido"
## [10] "Desempleado"
## [11] "No sabe"
library(dplyr)
data$OCUP_MAD_REC <- case_when(
data$OCUP_MAD == 1 ~ '1-Obrero/a, Jornalero/a, Servicio doméstico',
data$OCUP_MAD == 2 ~ '2-Vendedor/a, Técnico/a independiente o con Oficio',
data$OCUP_MAD == 3 ~ '3-Administrativo/a o Técnico/a dependiente',
data$OCUP_MAD == 4 ~ '4/6-Policía/Militar rango subalterno o superior, Comerciante/Docente',
data$OCUP_MAD == 6 ~ '4/6-Policía/Militar rango subalterno o superior, Comerciante/Docente',
data$OCUP_MAD == 5 ~ '5-Profesional dependiente o independiente/Docente Universitario',
data$OCUP_MAD == 7 ~ '7-Empresario/a',
data$OCUP_MAD == 8 ~ '8-Con ocupación no remunerada (ama de casa)',
data$OCUP_MAD %in% c(9, 10, 11) ~ '9/10/11-Fallecido, Desempleado o No sabe',
TRUE ~ NA_character_
)
# Verificar la nueva variable recategorizada
table(data$OCUP_MAD_REC)
## < table of extent 0 >
# Suponiendo que 'data' es el conjunto de datos y 'ESTADO_ACADEMICO' es la variable de respuesta
# Crear un data.frame vacío para almacenar los resultados
resultados_chi <- data.frame(Variable = character(), Estadistico = numeric(), P_Valor = numeric(), Significancia = character(), stringsAsFactors = FALSE)
# Listado de las covariables
covariables <- c("RESIDENCIA", "TIPO_INGRESO", "SIT_ACAD", "RENDIMIENTO",
"TRABAJA", "SOLVENTAR","ESTUDIOS_PADRES",
"SEXO", "TIPO_COL", "INGRESO", "EST_CIVIL")
# Calcular las pruebas de chi-cuadrado o Fisher para cada covariable
for (var in covariables) {
tabla <- table(data[[var]], data$ESTADO_ACADEMICO) # Crear tabla de contingencia
# Revisar si alguna celda tiene un valor menor a 5
if (any(tabla < 5)) {
# Usar prueba exacta de Fisher en caso de tablas pequeñas
chi_test <- fisher.test(tabla)
estadistico <- NA # Fisher no proporciona un estadístico de chi-cuadrado
} else {
# Usar la prueba de chi-cuadrado
chi_test <- chisq.test(tabla)
estadistico <- chi_test$statistic # Obtener el valor del estadístico
}
# Verificar si el p-value es un número
if (!is.na(chi_test$p.value)) {
# Determinar el nivel de significancia
if (chi_test$p.value < 0.01) {
significancia <- "*** (p < 0.01)"
} else if (chi_test$p.value < 0.05) {
significancia <- "** (p < 0.05)"
} else if (chi_test$p.value < 0.1) {
significancia <- "* (p < 0.1)"
} else {
significancia <- "No significativo"
}
# Agregar los resultados al data.frame
resultados_chi <- rbind(resultados_chi, data.frame(
Variable = var,
Estadistico = estadistico,
P_Valor = chi_test$p.value,
Significancia = significancia,
stringsAsFactors = FALSE
))
}
}
## Warning in chisq.test(tabla): Chi-squared approximation may be incorrect
## Warning in chisq.test(tabla): Chi-squared approximation may be incorrect
# Ordenar los resultados por p-valor
resultados_chi <- resultados_chi[order(resultados_chi$P_Valor), ]
# Mostrar los resultadosm
print(resultados_chi)
## Variable Estadistico P_Valor Significancia
## 11 SIT_ACAD NA 5.066139e-46 *** (p < 0.01)
## 12 RENDIMIENTO NA 1.682786e-10 *** (p < 0.01)
## X-squared2 SOLVENTAR 9.93788556 1.910158e-02 ** (p < 0.05)
## X-squared1 TRABAJA 3.17416522 7.481143e-02 * (p < 0.1)
## 1 TIPO_INGRESO NA 9.211163e-02 * (p < 0.1)
## 15 EST_CIVIL NA 1.007470e-01 No significativo
## X-squared4 TIPO_COL 2.43640756 2.957609e-01 No significativo
## 14 INGRESO NA 6.314287e-01 No significativo
## X-squared3 SEXO 0.20774414 6.485413e-01 No significativo
## 13 ESTUDIOS_PADRES NA 7.321888e-01 No significativo
## X-squared RESIDENCIA 0.04636686 9.770832e-01 No significativo
#explicar estado civil en relacion al modelo, pues en el analisis bivariante resulto en su no aparicion.
# Tabla de frecuencias de la variable ESTADO_ACADEMICO
table(data$ING_A)
##
## 2009 2010 2011 2012 2013 2014 2015 2016 2017
## 14 7 28 19 27 23 15 21 18
# Tabla de frecuencias de la variable ESTADO_ACADEMICO
table(data$DEPARTAMENTO)
##
## ALTO PARAGUAY ASUNCIÓN CENTRAL CORDILLERA
## 2 60 94 5
## GUAIRÁ PARAGUARÍ PRESIDENTE HAYES
## 1 6 4
# Tabla de frecuencias de la variable ESTADO_ACADEMICO
table(data$OCUP_PAD)
##
## Obrero/a, Jornalero/a, Servicio doméstico
## 65
## Vendedor/a, Técnico/a independiente o con Oficio
## 33
## Administrativo/a o Técnico/a dependiente
## 17
## Policía/Militar rango subalterno/Comerciante/Docente de primaria y secundaria
## 6
## Profesional dependiente o independiente/Docente Universitario
## 15
## Gerente o Director dependiente/Policía/Militar rango superior
## 2
## Empresario/a
## 5
## Con ocupación no remunerada (ama de casa)
## 5
## Fallecido
## 13
## Desempleado
## 2
## No sabe
## 9
# Tabla de frecuencias de la variable ESTADO_ACADEMICO
table(data$OCUP_MAD)
##
## Obrero/a, Jornalero/a, Servicio doméstico
## 43
## Vendedor/a, Técnico/a independiente o con Oficio
## 19
## Administrativo/a o Técnico/a dependiente
## 10
## Policía/Militar rango subalterno/Comerciante/Docente de primaria y secundaria
## 14
## Profesional dependiente o independiente/Docente Universitario
## 13
## Gerente o Director dependiente/Policía/Militar rango superior
## 2
## Empresario/a
## 6
## Con ocupación no remunerada (ama de casa)
## 59
## Fallecido
## 2
## Desempleado
## 1
## No sabe
## 3
# Tabla de frecuencias de la variable ESTADO_ACADEMICO
table(data$INGRESO)
##
## Hasta dos salarios mínimos
## 134
## Más de dos y hasta cinco salarios mínimos
## 28
## Más de cinco y hasta diez salarios mínimos
## 6
## Más de diez y hasta quince salarios mínimos
## 1
## Más de quince salarios mínimos
## 3
# Tabla de frecuencias de la variable ESTADO_ACADEMICO
table(data$NIVEL_SOCIO)
##
## BAJO MEDIO BAJO MEDIO MEDIO ALTO ALTO
## 25 128 19 0 0
# Boxplot para ESTUDIOS_PADRES según SITUACION_ACADEMICA
ggplot(data, aes(x = ESTADO_ACADEMICO, y = EDAD)) +
geom_boxplot(fill = "skyblue", color = "darkblue") +
labs(title = "Boxplot de Estudios Padres por Situación Académica",
x = "Estado Académico",
y = "Edad") +
theme_minimal()
# Boxplot para ASIG_APROB según SITUACION_ACADEMICA
ggplot(data, aes(x = ESTADO_ACADEMICO, y = ASIG_APROB)) +
geom_boxplot(fill = "lightgreen", color = "darkgreen") +
labs(title = "Boxplot de Asignaturas Aprobadas por Situación Académica",
x = "Estado Académico",
y = "Asignaturas Aprobadas") +
theme_minimal()
#install.packages(c("ggplot2", "pscl", "dplyr", "car", "broom", "ROCR", "MASS"))
# Cargar los paquetes
library(ggplot2)
library(pscl)
## Classes and Methods for R originally developed in the
## Political Science Computational Laboratory
## Department of Political Science
## Stanford University (2002-2015),
## by and under the direction of Simon Jackman.
## hurdle and zeroinfl functions by Achim Zeileis.
library(dplyr)
library(car)
library(broom)
library(ROCR)
library(MASS)
# Ajustar el modelo de regresión logística bivariada para APROB_ASIG
modelo_aprob_asig <- glm(ESTADO_ACADEMICO ~ ASIG_APROB, family = binomial, data = data)
summary_aprob_asig <- summary(modelo_aprob_asig)
# Ajustar el modelo de regresión logística bivariada para EDAD
modelo_edad <- glm(ESTADO_ACADEMICO ~ EDAD, family = binomial, data = data)
summary_edad <- summary(modelo_edad)
# Crear una tabla con los resultados
resultados <- data.frame(
Variable = c("ASIG_APROB", "EDAD"),
Coeficiente = c(coef(summary_aprob_asig)[2, 1], coef(summary_edad)[2, 1]),
Estadistico_z = c(coef(summary_aprob_asig)[2, 3], coef(summary_edad)[2, 3]),
P_Valor = c(coef(summary_aprob_asig)[2, 4], coef(summary_edad)[2, 4]),
Significancia = c(
ifelse(coef(summary_aprob_asig)[2, 4] < 0.01, "*** (p < 0.01)",
ifelse(coef(summary_aprob_asig)[2, 4] < 0.05, "** (p < 0.05)",
ifelse(coef(summary_aprob_asig)[2, 4] < 0.1, "* (p < 0.1)", "No significativo"))),
ifelse(coef(summary_edad)[2, 4] < 0.01, "*** (p < 0.01)",
ifelse(coef(summary_edad)[2, 4] < 0.05, "** (p < 0.05)",
ifelse(coef(summary_edad)[2, 4] < 0.1, "* (p < 0.1)", "No significativo")))
)
)
# Mostrar la tabla
print(resultados)
## Variable Coeficiente Estadistico_z P_Valor Significancia
## 1 ASIG_APROB -0.3213448 -4.965362 6.857292e-07 *** (p < 0.01)
## 2 EDAD 0.0360694 1.656090 9.770354e-02 * (p < 0.1)
# Ajustar el modelo de regresión logística con ASIG_APROB como predictor
modelo_logisticoasig <- glm(ESTADO_ACADEMICO ~ ASIG_APROB, data = data, family = binomial)
# Resumen del modelo para ver los coeficientes y p-valores
summary(modelo_logisticoasig)
##
## Call:
## glm(formula = ESTADO_ACADEMICO ~ ASIG_APROB, family = binomial,
## data = data)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 7.24046 1.42421 5.084 3.70e-07 ***
## ASIG_APROB -0.32134 0.06472 -4.965 6.86e-07 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 214.046 on 171 degrees of freedom
## Residual deviance: 36.628 on 170 degrees of freedom
## AIC: 40.628
##
## Number of Fisher Scoring iterations: 8
# Calcular los odds ratios
odds_ratiosasig <- exp(coef(modelo_logisticoasig))
# Mostrar los odds ratios
print(odds_ratiosasig)
## (Intercept) ASIG_APROB
## 1394.7340160 0.7251731
table(data$TIPO_INGRESO)
##
## INGRESO TRASLADO ADMISION DIRECTA
## 167 1 4
# Crear un data.frame vacío para almacenar los resultados de las pruebas de asociación
resultados_asociacion <- data.frame(Variable1 = character(), Variable2 = character(), Estadistico = numeric(), P_Valor = numeric(), Significancia = character(), stringsAsFactors = FALSE)
# Listado de las covariables a analizar
covariables <- c("RESIDENCIA", "TIPO_INGRESO", "RENDIMIENTO",
"TRABAJA", "SOLVENTAR","ESTUDIOS_PADRES",
"SEXO", "TIPO_COL", "INGRESO", "EST_CIVIL")
# Calcular las pruebas de chi-cuadrado para cada par de covariables
for (i in 1:(length(covariables)-1)) {
for (j in (i+1):length(covariables)) {
var1 <- covariables[i]
var2 <- covariables[j]
# Crear la tabla de contingencia
tabla <- table(data[[var1]], data[[var2]])
# Usar la prueba de chi-cuadrado
test_result <- chisq.test(tabla)
estadistico <- test_result$statistic
# Verificar si el p-value es un número válido
if (!is.na(test_result$p.value)) {
# Determinar el nivel de significancia
if (test_result$p.value < 0.01) {
significancia <- "*** (p < 0.01)"
} else if (test_result$p.value < 0.05) {
significancia <- "** (p < 0.05)"
} else if (test_result$p.value < 0.1) {
significancia <- "* (p < 0.1)"
} else {
significancia <- "No significativo"
}
# Agregar los resultados al data.frame
resultados_asociacion <- rbind(resultados_asociacion, data.frame(
Variable1 = var1,
Variable2 = var2,
Estadistico = estadistico,
P_Valor = test_result$p.value,
Significancia = significancia,
stringsAsFactors = FALSE
))
}
}
}
## Warning in chisq.test(tabla): Chi-squared approximation may be incorrect
## Warning in chisq.test(tabla): Chi-squared approximation may be incorrect
## Warning in chisq.test(tabla): Chi-squared approximation may be incorrect
## Warning in chisq.test(tabla): Chi-squared approximation may be incorrect
## Warning in chisq.test(tabla): Chi-squared approximation may be incorrect
## Warning in chisq.test(tabla): Chi-squared approximation may be incorrect
## Warning in chisq.test(tabla): Chi-squared approximation may be incorrect
## Warning in chisq.test(tabla): Chi-squared approximation may be incorrect
## Warning in chisq.test(tabla): Chi-squared approximation may be incorrect
## Warning in chisq.test(tabla): Chi-squared approximation may be incorrect
## Warning in chisq.test(tabla): Chi-squared approximation may be incorrect
## Warning in chisq.test(tabla): Chi-squared approximation may be incorrect
## Warning in chisq.test(tabla): Chi-squared approximation may be incorrect
## Warning in chisq.test(tabla): Chi-squared approximation may be incorrect
## Warning in chisq.test(tabla): Chi-squared approximation may be incorrect
## Warning in chisq.test(tabla): Chi-squared approximation may be incorrect
## Warning in chisq.test(tabla): Chi-squared approximation may be incorrect
## Warning in chisq.test(tabla): Chi-squared approximation may be incorrect
## Warning in chisq.test(tabla): Chi-squared approximation may be incorrect
## Warning in chisq.test(tabla): Chi-squared approximation may be incorrect
## Warning in chisq.test(tabla): Chi-squared approximation may be incorrect
## Warning in chisq.test(tabla): Chi-squared approximation may be incorrect
## Warning in chisq.test(tabla): Chi-squared approximation may be incorrect
## Warning in chisq.test(tabla): Chi-squared approximation may be incorrect
## Warning in chisq.test(tabla): Chi-squared approximation may be incorrect
## Warning in chisq.test(tabla): Chi-squared approximation may be incorrect
## Warning in chisq.test(tabla): Chi-squared approximation may be incorrect
## Warning in chisq.test(tabla): Chi-squared approximation may be incorrect
## Warning in chisq.test(tabla): Chi-squared approximation may be incorrect
## Warning in chisq.test(tabla): Chi-squared approximation may be incorrect
## Warning in chisq.test(tabla): Chi-squared approximation may be incorrect
## Warning in chisq.test(tabla): Chi-squared approximation may be incorrect
## Warning in chisq.test(tabla): Chi-squared approximation may be incorrect
## Warning in chisq.test(tabla): Chi-squared approximation may be incorrect
## Warning in chisq.test(tabla): Chi-squared approximation may be incorrect
## Warning in chisq.test(tabla): Chi-squared approximation may be incorrect
## Warning in chisq.test(tabla): Chi-squared approximation may be incorrect
# Ordenar los resultados por p-valor
resultados_asociacion <- resultados_asociacion[order(resultados_asociacion$P_Valor), ]
# Mostrar los resultados
print(resultados_asociacion)
## Variable1 Variable2 Estadistico P_Valor
## X-squared21 TRABAJA SOLVENTAR 95.4592647 1.471002e-20
## X-squared32 ESTUDIOS_PADRES INGRESO 54.5569827 4.203988e-06
## X-squared9 TIPO_INGRESO TRABAJA 10.6672370 4.826574e-03
## X-squared10 TIPO_INGRESO SOLVENTAR 17.7880389 6.784314e-03
## X-squared6 RESIDENCIA TIPO_COL 10.8219138 2.864007e-02
## X-squared23 TRABAJA SEXO 4.4325187 3.526044e-02
## X-squared24 TRABAJA TIPO_COL 6.3691198 4.139646e-02
## X-squared35 TIPO_COL INGRESO 15.2573642 5.433017e-02
## X-squared15 RENDIMIENTO TRABAJA 3.6793668 5.508977e-02
## X-squared31 ESTUDIOS_PADRES TIPO_COL 14.7842411 6.347905e-02
## X-squared26 SOLVENTAR ESTUDIOS_PADRES 18.2023540 1.096831e-01
## X-squared34 SEXO INGRESO 7.3820919 1.170223e-01
## X-squared16 RENDIMIENTO SOLVENTAR 5.7610360 1.238331e-01
## X-squared28 SOLVENTAR TIPO_COL 10.0025246 1.245457e-01
## X-squared25 TRABAJA INGRESO 6.2593069 1.806019e-01
## X-squared29 SOLVENTAR INGRESO 15.0443509 2.390200e-01
## X-squared27 SOLVENTAR SEXO 4.1688847 2.437956e-01
## X-squared4 RESIDENCIA ESTUDIOS_PADRES 9.3847211 3.108876e-01
## X-squared12 TIPO_INGRESO SEXO 2.1854042 3.353092e-01
## X-squared RESIDENCIA TIPO_INGRESO 4.2731558 3.702986e-01
## X-squared19 RENDIMIENTO TIPO_COL 1.9562434 3.760167e-01
## X-squared22 TRABAJA ESTUDIOS_PADRES 3.7255044 4.444273e-01
## X-squared3 RESIDENCIA SOLVENTAR 5.8011731 4.458275e-01
## X-squared1 RESIDENCIA RENDIMIENTO 1.4423188 4.861882e-01
## X-squared18 RENDIMIENTO SEXO 0.4623384 4.965331e-01
## X-squared2 RESIDENCIA TRABAJA 1.3547136 5.079579e-01
## X-squared17 RENDIMIENTO ESTUDIOS_PADRES 3.1928485 5.260868e-01
## X-squared11 TIPO_INGRESO ESTUDIOS_PADRES 6.6717232 5.724293e-01
## X-squared8 TIPO_INGRESO RENDIMIENTO 0.9201163 6.312469e-01
## X-squared13 TIPO_INGRESO TIPO_COL 2.4289421 6.574034e-01
## X-squared20 RENDIMIENTO INGRESO 2.3960993 6.633323e-01
## X-squared7 RESIDENCIA INGRESO 5.5693490 6.953452e-01
## X-squared30 ESTUDIOS_PADRES SEXO 1.8141842 7.698863e-01
## X-squared33 SEXO TIPO_COL 0.3645652 8.333658e-01
## X-squared5 RESIDENCIA SEXO 0.1331789 9.355792e-01
## X-squared14 TIPO_INGRESO INGRESO 1.4603629 9.933467e-01
## Significancia
## X-squared21 *** (p < 0.01)
## X-squared32 *** (p < 0.01)
## X-squared9 *** (p < 0.01)
## X-squared10 *** (p < 0.01)
## X-squared6 ** (p < 0.05)
## X-squared23 ** (p < 0.05)
## X-squared24 ** (p < 0.05)
## X-squared35 * (p < 0.1)
## X-squared15 * (p < 0.1)
## X-squared31 * (p < 0.1)
## X-squared26 No significativo
## X-squared34 No significativo
## X-squared16 No significativo
## X-squared28 No significativo
## X-squared25 No significativo
## X-squared29 No significativo
## X-squared27 No significativo
## X-squared4 No significativo
## X-squared12 No significativo
## X-squared No significativo
## X-squared19 No significativo
## X-squared22 No significativo
## X-squared3 No significativo
## X-squared1 No significativo
## X-squared18 No significativo
## X-squared2 No significativo
## X-squared17 No significativo
## X-squared11 No significativo
## X-squared8 No significativo
## X-squared13 No significativo
## X-squared20 No significativo
## X-squared7 No significativo
## X-squared30 No significativo
## X-squared33 No significativo
## X-squared5 No significativo
## X-squared14 No significativo
# Listado de las covariables seleccionadas
covariables <- c("SOLVENTAR","ESTUDIOS_PADRES","SEXO","INGRESO","RENDIMIENTO","TIPO_COL","TRABAJA","RESIDENCIA","TIPO_INGRESO","EST_CIVIL","EDAD")
# Crear una lista para almacenar los modelos ajustados
modelos_logisticos <- list()
# Iterar sobre cada covariable y ajustar un modelo de regresión logística bivariada
for (var in covariables) {
# Ajustar el modelo de regresión logística bivariada
formula_logit <- as.formula(paste("ESTADO_ACADEMICO ~", var))
modelo_logistico <- glm(formula_logit, family = binomial, data = data)
# Guardar el modelo en la lista
modelos_logisticos[[var]] <- modelo_logistico
# Mostrar el resumen del modelo
cat("\nModelo de regresión logística bivariada para la covariable:", var, "\n")
print(summary(modelo_logistico))
}
##
## Modelo de regresión logística bivariada para la covariable: SOLVENTAR
##
## Call:
## glm(formula = formula_logit, family = binomial, data = data)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 3.021e-15 4.082e-01 0.000 1.00000
## SOLVENTARBeca/exoneración parcial -1.823e-01 7.303e-01 -0.250 0.80285
## SOLVENTARTrabajo Personal 1.411e+00 5.395e-01 2.615 0.00891 **
## SOLVENTARAyuda Familiar 8.362e-01 4.710e-01 1.776 0.07579 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 214.05 on 171 degrees of freedom
## Residual deviance: 204.32 on 168 degrees of freedom
## AIC: 212.32
##
## Number of Fisher Scoring iterations: 4
##
##
## Modelo de regresión logística bivariada para la covariable: ESTUDIOS_PADRES
##
## Call:
## glm(formula = formula_logit, family = binomial, data = data)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 0.5947 0.3114 1.910 0.0562 .
## ESTUDIOS_PADRES14-23 años 0.3463 0.4288 0.808 0.4194
## ESTUDIOS_PADRES24-29 años 0.0339 0.4391 0.077 0.9385
## ESTUDIOS_PADRES30-34 años 0.7270 0.6432 1.130 0.2583
## ESTUDIOS_PADRESMás de 34 años -0.1892 0.9645 -0.196 0.8445
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 214.05 on 171 degrees of freedom
## Residual deviance: 211.97 on 167 degrees of freedom
## AIC: 221.97
##
## Number of Fisher Scoring iterations: 4
##
##
## Modelo de regresión logística bivariada para la covariable: SEXO
##
## Call:
## glm(formula = formula_logit, family = binomial, data = data)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 0.8786 0.2290 3.837 0.000124 ***
## SEXOMASCULINO -0.2041 0.3291 -0.620 0.535188
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 214.05 on 171 degrees of freedom
## Residual deviance: 213.66 on 170 degrees of freedom
## AIC: 217.66
##
## Number of Fisher Scoring iterations: 4
##
##
## Modelo de regresión logística bivariada para la covariable: INGRESO
##
## Call:
## glm(formula = formula_logit, family = binomial, data = data)
##
## Coefficients:
## Estimate Std. Error z value
## (Intercept) 0.8544 0.1888 4.526
## INGRESOMás de dos y hasta cinco salarios mínimos -0.2666 0.4373 -0.610
## INGRESOMás de cinco y hasta diez salarios mínimos -0.1613 0.8864 -0.182
## INGRESOMás de diez y hasta quince salarios mínimos 13.7117 882.7434 0.016
## INGRESOMás de quince salarios mínimos -1.5476 1.2392 -1.249
## Pr(>|z|)
## (Intercept) 6.01e-06 ***
## INGRESOMás de dos y hasta cinco salarios mínimos 0.542
## INGRESOMás de cinco y hasta diez salarios mínimos 0.856
## INGRESOMás de diez y hasta quince salarios mínimos 0.988
## INGRESOMás de quince salarios mínimos 0.212
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 214.05 on 171 degrees of freedom
## Residual deviance: 211.33 on 167 degrees of freedom
## AIC: 221.33
##
## Number of Fisher Scoring iterations: 13
##
##
## Modelo de regresión logística bivariada para la covariable: RENDIMIENTO
##
## Call:
## glm(formula = formula_logit, family = binomial, data = data)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 0.1263 0.1902 0.664 0.507
## RENDIMIENTONO APROBADO 3.2581 0.7437 4.381 1.18e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 214.05 on 171 degrees of freedom
## Residual deviance: 171.04 on 170 degrees of freedom
## AIC: 175.04
##
## Number of Fisher Scoring iterations: 6
##
##
## Modelo de regresión logística bivariada para la covariable: TIPO_COL
##
## Call:
## glm(formula = formula_logit, family = binomial, data = data)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 0.65588 0.19248 3.408 0.000656 ***
## TIPO_COLsubvencionado -0.06809 0.59005 -0.115 0.908132
## TIPO_COLPrivado 0.66588 0.44202 1.506 0.131952
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 214.05 on 171 degrees of freedom
## Residual deviance: 211.48 on 169 degrees of freedom
## AIC: 217.48
##
## Number of Fisher Scoring iterations: 4
##
##
## Modelo de regresión logística bivariada para la covariable: TRABAJA
##
## Call:
## glm(formula = formula_logit, family = binomial, data = data)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 1.2993 0.3257 3.990 6.62e-05 ***
## TRABAJANO -0.7329 0.3787 -1.935 0.0529 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 214.05 on 171 degrees of freedom
## Residual deviance: 210.06 on 170 degrees of freedom
## AIC: 214.06
##
## Number of Fisher Scoring iterations: 4
##
##
## Modelo de regresión logística bivariada para la covariable: RESIDENCIA
##
## Call:
## glm(formula = formula_logit, family = binomial, data = data)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 0.76913 0.27753 2.771 0.00558 **
## RESIDENCIACENTRAL 0.03796 0.35621 0.107 0.91514
## RESIDENCIARESTO DEL PAÍS -0.07599 0.57186 -0.133 0.89429
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 214.05 on 171 degrees of freedom
## Residual deviance: 214.00 on 169 degrees of freedom
## AIC: 220
##
## Number of Fisher Scoring iterations: 4
##
##
## Modelo de regresión logística bivariada para la covariable: TIPO_INGRESO
##
## Call:
## glm(formula = formula_logit, family = binomial, data = data)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 0.8218 0.1680 4.891 1e-06 ***
## TIPO_INGRESOTRASLADO 13.7443 882.7434 0.016 0.9876
## TIPO_INGRESOADMISION DIRECTA -1.9204 1.1669 -1.646 0.0998 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 214.05 on 171 degrees of freedom
## Residual deviance: 210.03 on 169 degrees of freedom
## AIC: 216.03
##
## Number of Fisher Scoring iterations: 13
##
##
## Modelo de regresión logística bivariada para la covariable: EST_CIVIL
##
## Call:
## glm(formula = formula_logit, family = binomial, data = data)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 0.6531 0.1727 3.783 0.000155 ***
## EST_CIVILCasado/a 1.1927 0.6448 1.850 0.064360 .
## EST_CIVILDivordiado/a 13.9129 882.7434 0.016 0.987425
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 214.05 on 171 degrees of freedom
## Residual deviance: 209.00 on 169 degrees of freedom
## AIC: 215
##
## Number of Fisher Scoring iterations: 13
##
##
## Modelo de regresión logística bivariada para la covariable: EDAD
##
## Call:
## glm(formula = formula_logit, family = binomial, data = data)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -0.07754 0.53175 -0.146 0.8841
## EDAD 0.03607 0.02178 1.656 0.0977 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 214.05 on 171 degrees of freedom
## Residual deviance: 210.88 on 170 degrees of freedom
## AIC: 214.88
##
## Number of Fisher Scoring iterations: 4
# Ahora puedes analizar los coeficientes, p-valores y significancia para cada modelo
# Instalar y cargar el paquete necesario
#if (!require(broom)) install.packages("broom", dependencies = TRUE)
library(broom)
# Crear un data.frame vacío para almacenar los resultados del resumen
resumen_modelos <- data.frame(
Modelo = integer(),
Covariable = character(),
Categoria = character(),
Coeficiente = numeric(),
Z_Valor = numeric(),
P_Valor = numeric(),
Significancia = character(),
stringsAsFactors = FALSE
)
# Listado de las covariables seleccionadas
covariables <- c("SOLVENTAR","ESTUDIOS_PADRES","SEXO","INGRESO","RENDIMIENTO","TIPO_COL","TRABAJA","RESIDENCIA","TIPO_INGRESO","EST_CIVIL","EDAD")
# Función para determinar la significancia
significancia_func <- function(p_valor) {
if (p_valor < 0.01) {
return("*** (p < 0.01)")
} else if (p_valor < 0.05) {
return("** (p < 0.05)")
} else if (p_valor < 0.1) {
return("* (p < 0.1)")
} else {
return("No significativo")
}
}
# Iterar sobre cada covariable y ajustar un modelo de regresión logística bivariada
for (i in 1:length(covariables)) {
var <- covariables[i]
# Ajustar el modelo de regresión logística bivariada
formula_logit <- as.formula(paste("ESTADO_ACADEMICO ~", var))
modelo_logistico <- glm(formula_logit, family = binomial, data = data)
# Extraer los resultados del modelo usando el paquete broom
resultados <- tidy(modelo_logistico)
# Agregar la covariable y número de modelo a los resultados
resultados$Covariable <- var
resultados$Modelo <- i
# Calcular la significancia para cada fila
resultados$Significancia <- sapply(resultados$p.value, significancia_func)
# Agregar los resultados al resumen
resumen_modelos <- rbind(resumen_modelos, data.frame(
Modelo = resultados$Modelo,
Covariable = resultados$Covariable,
Categoria = resultados$term,
Coeficiente = resultados$estimate,
Z_Valor = resultados$statistic,
P_Valor = resultados$p.value,
Significancia = resultados$Significancia,
stringsAsFactors = FALSE
))
}
# Ordenar por p-valor si lo prefieres
resumen_modelos <- resumen_modelos[order(resumen_modelos$P_Valor), ]
# Mostrar la tabla resumen ordenada
print(resumen_modelos)
## Modelo Covariable Categoria
## 27 9 TIPO_INGRESO (Intercept)
## 12 4 INGRESO (Intercept)
## 18 5 RENDIMIENTO RENDIMIENTONO APROBADO
## 22 7 TRABAJA (Intercept)
## 10 3 SEXO (Intercept)
## 30 10 EST_CIVIL (Intercept)
## 19 6 TIPO_COL (Intercept)
## 24 8 RESIDENCIA (Intercept)
## 3 1 SOLVENTAR SOLVENTARTrabajo Personal
## 23 7 TRABAJA TRABAJANO
## 5 2 ESTUDIOS_PADRES (Intercept)
## 31 10 EST_CIVIL EST_CIVILCasado/a
## 4 1 SOLVENTAR SOLVENTARAyuda Familiar
## 34 11 EDAD EDAD
## 29 9 TIPO_INGRESO TIPO_INGRESOADMISION DIRECTA
## 21 6 TIPO_COL TIPO_COLPrivado
## 16 4 INGRESO INGRESOMás de quince salarios mínimos
## 8 2 ESTUDIOS_PADRES ESTUDIOS_PADRES30-34 años
## 6 2 ESTUDIOS_PADRES ESTUDIOS_PADRES14-23 años
## 17 5 RENDIMIENTO (Intercept)
## 11 3 SEXO SEXOMASCULINO
## 13 4 INGRESO INGRESOMás de dos y hasta cinco salarios mínimos
## 2 1 SOLVENTAR SOLVENTARBeca/exoneración parcial
## 9 2 ESTUDIOS_PADRES ESTUDIOS_PADRESMás de 34 años
## 14 4 INGRESO INGRESOMás de cinco y hasta diez salarios mínimos
## 33 11 EDAD (Intercept)
## 26 8 RESIDENCIA RESIDENCIARESTO DEL PAÍS
## 20 6 TIPO_COL TIPO_COLsubvencionado
## 25 8 RESIDENCIA RESIDENCIACENTRAL
## 7 2 ESTUDIOS_PADRES ESTUDIOS_PADRES24-29 años
## 32 10 EST_CIVIL EST_CIVILDivordiado/a
## 28 9 TIPO_INGRESO TIPO_INGRESOTRASLADO
## 15 4 INGRESO INGRESOMás de diez y hasta quince salarios mínimos
## 1 1 SOLVENTAR (Intercept)
## Coeficiente Z_Valor P_Valor Significancia
## 27 8.217646e-01 4.891063e+00 1.002929e-06 *** (p < 0.01)
## 12 8.544153e-01 4.525958e+00 6.012242e-06 *** (p < 0.01)
## 18 3.258097e+00 4.380776e+00 1.182576e-05 *** (p < 0.01)
## 22 1.299283e+00 3.989578e+00 6.619107e-05 *** (p < 0.01)
## 10 8.785504e-01 3.837175e+00 1.244579e-04 *** (p < 0.01)
## 30 6.531418e-01 3.782792e+00 1.550788e-04 *** (p < 0.01)
## 19 6.558758e-01 3.407505e+00 6.555970e-04 *** (p < 0.01)
## 24 7.691331e-01 2.771371e+00 5.582071e-03 *** (p < 0.01)
## 3 1.410987e+00 2.615376e+00 8.912936e-03 *** (p < 0.01)
## 23 -7.328875e-01 -1.935476e+00 5.293197e-02 * (p < 0.1)
## 5 5.947071e-01 1.909659e+00 5.617709e-02 * (p < 0.1)
## 31 1.192685e+00 1.849676e+00 6.436033e-02 * (p < 0.1)
## 4 8.362480e-01 1.775658e+00 7.578925e-02 * (p < 0.1)
## 34 3.606940e-02 1.656090e+00 9.770354e-02 * (p < 0.1)
## 29 -1.920377e+00 -1.645765e+00 9.981219e-02 * (p < 0.1)
## 21 6.658801e-01 1.506448e+00 1.319522e-01 No significativo
## 16 -1.547563e+00 -1.248831e+00 2.117268e-01 No significativo
## 8 7.270487e-01 1.130440e+00 2.582909e-01 No significativo
## 6 3.462762e-01 8.075397e-01 4.193556e-01 No significativo
## 17 1.262937e-01 6.639692e-01 5.067100e-01 No significativo
## 11 -2.040954e-01 -6.201057e-01 5.351882e-01 No significativo
## 13 -2.666287e-01 -6.097754e-01 5.420106e-01 No significativo
## 2 -1.823216e-01 -2.496541e-01 8.028549e-01 No significativo
## 9 -1.892420e-01 -1.962015e-01 8.444525e-01 No significativo
## 14 -1.612681e-01 -1.819438e-01 8.556268e-01 No significativo
## 33 -7.754269e-02 -1.458244e-01 8.840600e-01 No significativo
## 26 -7.598591e-02 -1.328755e-01 8.942919e-01 No significativo
## 20 -6.808912e-02 -1.153954e-01 9.081317e-01 No significativo
## 25 3.795835e-02 1.065602e-01 9.151379e-01 No significativo
## 7 3.390155e-02 7.720545e-02 9.384601e-01 No significativo
## 32 1.391293e+01 1.576101e-02 9.874251e-01 No significativo
## 28 1.374430e+01 1.556999e-02 9.875774e-01 No significativo
## 15 1.371165e+01 1.553300e-02 9.876070e-01 No significativo
## 1 3.020723e-15 7.399230e-15 1.000000e+00 No significativo
# Si quieres visualizar de manera más limpia, puedes utilizar la librería kableExtra para generar una tabla en formato HTML:
if (!require(kableExtra)) install.packages("kableExtra", dependencies = TRUE)
## Cargando paquete requerido: kableExtra
##
## Adjuntando el paquete: 'kableExtra'
## The following object is masked from 'package:dplyr':
##
## group_rows
library(kableExtra)
resumen_modelos %>%
kbl() %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"))
| Modelo | Covariable | Categoria | Coeficiente | Z_Valor | P_Valor | Significancia | |
|---|---|---|---|---|---|---|---|
| 27 | 9 | TIPO_INGRESO | (Intercept) | 0.8217646 | 4.8910630 | 0.0000010 | *** (p < 0.01) |
| 12 | 4 | INGRESO | (Intercept) | 0.8544153 | 4.5259584 | 0.0000060 | *** (p < 0.01) |
| 18 | 5 | RENDIMIENTO | RENDIMIENTONO APROBADO | 3.2580965 | 4.3807756 | 0.0000118 | *** (p < 0.01) |
| 22 | 7 | TRABAJA | (Intercept) | 1.2992830 | 3.9895776 | 0.0000662 | *** (p < 0.01) |
| 10 | 3 | SEXO | (Intercept) | 0.8785504 | 3.8371747 | 0.0001245 | *** (p < 0.01) |
| 30 | 10 | EST_CIVIL | (Intercept) | 0.6531418 | 3.7827923 | 0.0001551 | *** (p < 0.01) |
| 19 | 6 | TIPO_COL | (Intercept) | 0.6558758 | 3.4075050 | 0.0006556 | *** (p < 0.01) |
| 24 | 8 | RESIDENCIA | (Intercept) | 0.7691331 | 2.7713714 | 0.0055821 | *** (p < 0.01) |
| 3 | 1 | SOLVENTAR | SOLVENTARTrabajo Personal | 1.4109870 | 2.6153757 | 0.0089129 | *** (p < 0.01) |
| 23 | 7 | TRABAJA | TRABAJANO | -0.7328875 | -1.9354755 | 0.0529320 |
|
| 5 | 2 | ESTUDIOS_PADRES | (Intercept) | 0.5947071 | 1.9096593 | 0.0561771 |
|
| 31 | 10 | EST_CIVIL | EST_CIVILCasado/a | 1.1926848 | 1.8496755 | 0.0643603 |
|
| 4 | 1 | SOLVENTAR | SOLVENTARAyuda Familiar | 0.8362480 | 1.7756583 | 0.0757892 |
|
| 34 | 11 | EDAD | EDAD | 0.0360694 | 1.6560903 | 0.0977035 |
|
| 29 | 9 | TIPO_INGRESO | TIPO_INGRESOADMISION DIRECTA | -1.9203768 | -1.6457648 | 0.0998122 |
|
| 21 | 6 | TIPO_COL | TIPO_COLPrivado | 0.6658801 | 1.5064479 | 0.1319522 | No significativo |
| 16 | 4 | INGRESO | INGRESOMás de quince salarios mínimos | -1.5475625 | -1.2488312 | 0.2117268 | No significativo |
| 8 | 2 | ESTUDIOS_PADRES | ESTUDIOS_PADRES30-34 años | 0.7270487 | 1.1304398 | 0.2582909 | No significativo |
| 6 | 2 | ESTUDIOS_PADRES | ESTUDIOS_PADRES14-23 años | 0.3462762 | 0.8075397 | 0.4193556 | No significativo |
| 17 | 5 | RENDIMIENTO | (Intercept) | 0.1262937 | 0.6639692 | 0.5067100 | No significativo |
| 11 | 3 | SEXO | SEXOMASCULINO | -0.2040954 | -0.6201057 | 0.5351882 | No significativo |
| 13 | 4 | INGRESO | INGRESOMás de dos y hasta cinco salarios mínimos | -0.2666287 | -0.6097754 | 0.5420106 | No significativo |
| 2 | 1 | SOLVENTAR | SOLVENTARBeca/exoneración parcial | -0.1823216 | -0.2496541 | 0.8028549 | No significativo |
| 9 | 2 | ESTUDIOS_PADRES | ESTUDIOS_PADRESMás de 34 años | -0.1892420 | -0.1962015 | 0.8444525 | No significativo |
| 14 | 4 | INGRESO | INGRESOMás de cinco y hasta diez salarios mínimos | -0.1612681 | -0.1819438 | 0.8556268 | No significativo |
| 33 | 11 | EDAD | (Intercept) | -0.0775427 | -0.1458244 | 0.8840600 | No significativo |
| 26 | 8 | RESIDENCIA | RESIDENCIARESTO DEL PAÍS | -0.0759859 | -0.1328755 | 0.8942919 | No significativo |
| 20 | 6 | TIPO_COL | TIPO_COLsubvencionado | -0.0680891 | -0.1153954 | 0.9081317 | No significativo |
| 25 | 8 | RESIDENCIA | RESIDENCIACENTRAL | 0.0379584 | 0.1065602 | 0.9151379 | No significativo |
| 7 | 2 | ESTUDIOS_PADRES | ESTUDIOS_PADRES24-29 años | 0.0339016 | 0.0772055 | 0.9384601 | No significativo |
| 32 | 10 | EST_CIVIL | EST_CIVILDivordiado/a | 13.9129259 | 0.0157610 | 0.9874251 | No significativo |
| 28 | 9 | TIPO_INGRESO | TIPO_INGRESOTRASLADO | 13.7443032 | 0.0155700 | 0.9875774 | No significativo |
| 15 | 4 | INGRESO | INGRESOMás de diez y hasta quince salarios mínimos | 13.7116524 | 0.0155330 | 0.9876070 | No significativo |
| 1 | 1 | SOLVENTAR | (Intercept) | 0.0000000 | 0.0000000 | 1.0000000 | No significativo |
#Ajustar el modelo de regresión logística con ASIG_APROB como predictor
modelo_logistico1 <- glm(ESTADO_ACADEMICO ~ SOLVENTAR, data = data, family = binomial)
# Resumen del modelo para ver los coeficientes y p-valores
summary(modelo_logistico1)
##
## Call:
## glm(formula = ESTADO_ACADEMICO ~ SOLVENTAR, family = binomial,
## data = data)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 3.021e-15 4.082e-01 0.000 1.00000
## SOLVENTARBeca/exoneración parcial -1.823e-01 7.303e-01 -0.250 0.80285
## SOLVENTARTrabajo Personal 1.411e+00 5.395e-01 2.615 0.00891 **
## SOLVENTARAyuda Familiar 8.362e-01 4.710e-01 1.776 0.07579 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 214.05 on 171 degrees of freedom
## Residual deviance: 204.32 on 168 degrees of freedom
## AIC: 212.32
##
## Number of Fisher Scoring iterations: 4
# Calcular los odds ratios
odds_ratios1 <- exp(coef(modelo_logistico1))
# Mostrar los odds ratios
print(odds_ratios1)
## (Intercept) SOLVENTARBeca/exoneración parcial
## 1.0000000 0.8333333
## SOLVENTARTrabajo Personal SOLVENTARAyuda Familiar
## 4.1000000 2.3076923
#Ajustar el modelo de regresión logística con ASIG_APROB como predictor
modelo_logistico2 <- glm(ESTADO_ACADEMICO ~ RESIDENCIA, data = data, family = binomial)
# Resumen del modelo para ver los coeficientes y p-valores
summary(modelo_logistico2)
##
## Call:
## glm(formula = ESTADO_ACADEMICO ~ RESIDENCIA, family = binomial,
## data = data)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 0.76913 0.27753 2.771 0.00558 **
## RESIDENCIACENTRAL 0.03796 0.35621 0.107 0.91514
## RESIDENCIARESTO DEL PAÍS -0.07599 0.57186 -0.133 0.89429
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 214.05 on 171 degrees of freedom
## Residual deviance: 214.00 on 169 degrees of freedom
## AIC: 220
##
## Number of Fisher Scoring iterations: 4
# Calcular los odds ratios
odds_ratios2 <- exp(coef(modelo_logistico2))
# Mostrar los odds ratios
print(odds_ratios2)
## (Intercept) RESIDENCIACENTRAL RESIDENCIARESTO DEL PAÍS
## 2.1578947 1.0386880 0.9268293
#Ajustar el modelo de regresión logística con ASIG_APROB como predictor
modelo_logistico4 <- glm(ESTADO_ACADEMICO ~ TIPO_INGRESO, data = data, family = binomial)
# Resumen del modelo para ver los coeficientes y p-valores
summary(modelo_logistico4)
##
## Call:
## glm(formula = ESTADO_ACADEMICO ~ TIPO_INGRESO, family = binomial,
## data = data)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 0.8218 0.1680 4.891 1e-06 ***
## TIPO_INGRESOTRASLADO 13.7443 882.7434 0.016 0.9876
## TIPO_INGRESOADMISION DIRECTA -1.9204 1.1669 -1.646 0.0998 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 214.05 on 171 degrees of freedom
## Residual deviance: 210.03 on 169 degrees of freedom
## AIC: 216.03
##
## Number of Fisher Scoring iterations: 13
# Calcular los odds ratios
odds_ratios4 <- exp(coef(modelo_logistico4))
# Mostrar los odds ratios
print(odds_ratios4)
## (Intercept) TIPO_INGRESOTRASLADO
## 2.274510e+00 9.312688e+05
## TIPO_INGRESOADMISION DIRECTA
## 1.465517e-01
#Ajustar el modelo de regresión logística con ASIG_APROB como predictor
modelo_logistico5 <- glm(ESTADO_ACADEMICO ~ RENDIMIENTO, data = data, family = binomial)
# Resumen del modelo para ver los coeficientes y p-valores
summary(modelo_logistico5)
##
## Call:
## glm(formula = ESTADO_ACADEMICO ~ RENDIMIENTO, family = binomial,
## data = data)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 0.1263 0.1902 0.664 0.507
## RENDIMIENTONO APROBADO 3.2581 0.7437 4.381 1.18e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 214.05 on 171 degrees of freedom
## Residual deviance: 171.04 on 170 degrees of freedom
## AIC: 175.04
##
## Number of Fisher Scoring iterations: 6
# Calcular los odds ratios
odds_ratios5 <- exp(coef(modelo_logistico5))
# Mostrar los odds ratios
print(odds_ratios5)
## (Intercept) RENDIMIENTONO APROBADO
## 1.134615 26.000000
#Ajustar el modelo de regresión logística con ASIG_APROB como predictor
modelo_logistico6 <- glm(ESTADO_ACADEMICO ~ EDAD, data = data, family = binomial)
# Resumen del modelo para ver los coeficientes y p-valores
summary(modelo_logistico6)
##
## Call:
## glm(formula = ESTADO_ACADEMICO ~ EDAD, family = binomial, data = data)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -0.07754 0.53175 -0.146 0.8841
## EDAD 0.03607 0.02178 1.656 0.0977 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 214.05 on 171 degrees of freedom
## Residual deviance: 210.88 on 170 degrees of freedom
## AIC: 214.88
##
## Number of Fisher Scoring iterations: 4
# Calcular los odds ratios
odds_ratios6 <- exp(coef(modelo_logistico6))
# Mostrar los odds ratios
print(odds_ratios6)
## (Intercept) EDAD
## 0.9253875 1.0367278
library(MASS)
library(nnet)
# Ajustar el modelo nulo (sin predictores)
colSums(is.na(data))
## IDEM CI SEXO CARRERA
## 0 0 0 0
## ING_A ING_P TIPO_INGRESO MODALIDAD
## 0 0 0 0
## ANTES ASIG_APROB SIT_ACAD ESTADO_ACADEMICO
## 163 0 0 0
## RENDIMIENTO CIUDAD DEPARTAMENTO RESIDENCIA
## 0 1 0 0
## EDAD EST_CIVIL TIPO_COL TRABAJA
## 0 0 0 0
## SOLVENTAR EDUC_PAD PUNT_PAD OCUP_PAD
## 0 0 0 0
## EDUC_MAD PUNT_MAD OCUP_MAD OCUP_PAD_MAD
## 0 0 0 0
## ESTUDIOS_PADRES INGRESO DEPENDENCIA CASA
## 0 0 15 46
## CASA_CANT TERRENO AUTO AIRE
## 56 27 1 1
## CALEFON TELEFONO CABLE PC
## 136 1 28 1
## INTERNET TRANSPORTE TRANSPORTE_MEDIO NIVEL_SOCIO
## 50 1 158 0
## OCUP_PAD_REC OCUP_MAD_REC
## 172 172
null_model <- multinom(ESTADO_ACADEMICO ~ 1, data = data)
## # weights: 2 (1 variable)
## initial value 119.221315
## final value 107.023126
## converged
# Ajustar el modelo completo (con todas las variables predictoras)
# Instalar la librería 'nnet' si aún no está instalada
#install.packages("MASS")
library(MASS)
#install.packages("nnet")
library(nnet)
library(MASS)
library(nnet)
full_model <- multinom(ESTADO_ACADEMICO ~ SOLVENTAR +ESTUDIOS_PADRES +SEXO+INGRESO+RENDIMIENTO+TIPO_COL+TRABAJA+RESIDENCIA+TIPO_INGRESO+EST_CIVIL+EDAD, data = data)
## # weights: 26 (25 variable)
## initial value 119.221315
## iter 10 value 69.084039
## iter 20 value 67.220228
## iter 30 value 67.115294
## iter 40 value 67.114567
## final value 67.114566
## converged
# Mostrar el resumen del modelo ajustado
summary(full_model)
## Warning in sqrt(diag(vc)): Se han producido NaNs
## Call:
## multinom(formula = ESTADO_ACADEMICO ~ SOLVENTAR + ESTUDIOS_PADRES +
## SEXO + INGRESO + RENDIMIENTO + TIPO_COL + TRABAJA + RESIDENCIA +
## TIPO_INGRESO + EST_CIVIL + EDAD, data = data)
##
## Coefficients:
## Values Std. Err.
## (Intercept) 0.85180647 1.390888e+00
## SOLVENTARBeca/exoneración parcial -0.11188591 9.949214e-01
## SOLVENTARTrabajo Personal 0.18985129 8.986478e-01
## SOLVENTARAyuda Familiar 0.72887994 6.022868e-01
## ESTUDIOS_PADRES14-23 años 1.26411508 5.946407e-01
## ESTUDIOS_PADRES24-29 años 0.40775375 6.539931e-01
## ESTUDIOS_PADRES30-34 años 0.28300931 9.655656e-01
## ESTUDIOS_PADRESMás de 34 años 0.69285758 1.303656e+00
## SEXOMASCULINO -0.20155686 4.427256e-01
## INGRESOMás de dos y hasta cinco salarios mínimos -1.39955611 7.587284e-01
## INGRESOMás de cinco y hasta diez salarios mínimos 0.43522878 1.183122e+00
## INGRESOMás de diez y hasta quince salarios mínimos 18.50025554 NaN
## INGRESOMás de quince salarios mínimos -2.05806795 1.507878e+00
## RENDIMIENTONO APROBADO 4.32985661 1.095275e+00
## TIPO_COLsubvencionado -0.16019201 8.574113e-01
## TIPO_COLPrivado 1.35930892 6.999035e-01
## TRABAJANO -1.15351145 8.230146e-01
## RESIDENCIACENTRAL 0.20247386 4.899555e-01
## RESIDENCIARESTO DEL PAÍS 0.59978738 8.330949e-01
## TIPO_INGRESOTRASLADO 15.78261298 NaN
## TIPO_INGRESOADMISION DIRECTA -8.97445622 2.517425e+00
## EST_CIVILCasado/a 3.97453587 1.659967e+00
## EST_CIVILDivordiado/a 13.63626277 1.572728e-06
## EST_CIVILOtro 0.00000000 0.000000e+00
## EDAD -0.05247297 4.288386e-02
##
## Residual Deviance: 134.2291
## AIC: 182.2291
# Asegúrate de haber cargado la librería MASS
library(MASS)
library(nnet)
colSums(is.na(data))
## IDEM CI SEXO CARRERA
## 0 0 0 0
## ING_A ING_P TIPO_INGRESO MODALIDAD
## 0 0 0 0
## ANTES ASIG_APROB SIT_ACAD ESTADO_ACADEMICO
## 163 0 0 0
## RENDIMIENTO CIUDAD DEPARTAMENTO RESIDENCIA
## 0 1 0 0
## EDAD EST_CIVIL TIPO_COL TRABAJA
## 0 0 0 0
## SOLVENTAR EDUC_PAD PUNT_PAD OCUP_PAD
## 0 0 0 0
## EDUC_MAD PUNT_MAD OCUP_MAD OCUP_PAD_MAD
## 0 0 0 0
## ESTUDIOS_PADRES INGRESO DEPENDENCIA CASA
## 0 0 15 46
## CASA_CANT TERRENO AUTO AIRE
## 56 27 1 1
## CALEFON TELEFONO CABLE PC
## 136 1 28 1
## INTERNET TRANSPORTE TRANSPORTE_MEDIO NIVEL_SOCIO
## 50 1 158 0
## OCUP_PAD_REC OCUP_MAD_REC
## 172 172
# Aplicar el método stepwise utilizando stepAIC correctamente
stepwise_model <- stepAIC(null_model,
scope = list(lower = null_model, upper = full_model),
direction = "both",
trace = TRUE)
## Start: AIC=216.05
## ESTADO_ACADEMICO ~ 1
##
## # weights: 5 (4 variable)
## initial value 119.221315
## final value 102.158119
## converged
## # weights: 6 (5 variable)
## initial value 119.221315
## iter 10 value 105.986493
## iter 10 value 105.986493
## iter 10 value 105.986493
## final value 105.986493
## converged
## # weights: 3 (2 variable)
## initial value 119.221315
## iter 10 value 106.830845
## iter 10 value 106.830845
## iter 10 value 106.830845
## final value 106.830845
## converged
## # weights: 6 (5 variable)
## initial value 119.221315
## iter 10 value 105.678966
## iter 20 value 105.664524
## final value 105.663600
## converged
## # weights: 3 (2 variable)
## initial value 119.221315
## final value 85.520772
## converged
## # weights: 4 (3 variable)
## initial value 119.221315
## iter 10 value 105.737656
## final value 105.737586
## converged
## # weights: 3 (2 variable)
## initial value 119.221315
## final value 105.029993
## converged
## # weights: 4 (3 variable)
## initial value 119.221315
## final value 107.000092
## converged
## # weights: 4 (3 variable)
## initial value 119.221315
## iter 10 value 105.030384
## final value 105.015138
## converged
## # weights: 5 (4 variable)
## initial value 119.221315
## iter 10 value 104.518650
## iter 20 value 104.501206
## final value 104.501198
## converged
## # weights: 3 (2 variable)
## initial value 119.221315
## final value 105.441918
## converged
## Df AIC
## + RENDIMIENTO 1 175.04
## + SOLVENTAR 3 212.32
## + TRABAJA 1 214.06
## + EDAD 1 214.88
## + EST_CIVIL 2 215.00
## + TIPO_INGRESO 2 216.03
## <none> 216.05
## + TIPO_COL 2 217.47
## + SEXO 1 217.66
## + RESIDENCIA 2 220.00
## + INGRESO 4 221.33
## + ESTUDIOS_PADRES 4 221.97
## # weights: 3 (2 variable)
## initial value 119.221315
## final value 85.520772
## converged
##
## Step: AIC=175.04
## ESTADO_ACADEMICO ~ RENDIMIENTO
##
## # weights: 2 (1 variable)
## initial value 119.221315
## final value 107.023126
## converged
## # weights: 6 (5 variable)
## initial value 119.221315
## iter 10 value 82.968292
## final value 82.968276
## converged
## # weights: 7 (6 variable)
## initial value 119.221315
## iter 10 value 83.565042
## final value 83.565023
## converged
## # weights: 4 (3 variable)
## initial value 119.221315
## iter 10 value 84.891537
## final value 84.891518
## converged
## # weights: 7 (6 variable)
## initial value 119.221315
## iter 10 value 84.305603
## iter 20 value 84.271267
## final value 84.269111
## converged
## # weights: 5 (4 variable)
## initial value 119.221315
## final value 84.888082
## converged
## # weights: 4 (3 variable)
## initial value 119.221315
## iter 10 value 84.805507
## final value 84.800038
## converged
## # weights: 5 (4 variable)
## initial value 119.221315
## iter 10 value 85.404160
## iter 10 value 85.404160
## final value 85.404160
## converged
## # weights: 5 (4 variable)
## initial value 119.221315
## iter 10 value 81.094614
## iter 20 value 81.058453
## final value 81.056295
## converged
## # weights: 6 (5 variable)
## initial value 119.221315
## iter 10 value 83.917547
## iter 20 value 83.896131
## final value 83.894023
## converged
## # weights: 4 (3 variable)
## initial value 119.221315
## final value 84.962547
## converged
## Df AIC
## + TIPO_INGRESO 2 170.11
## <none> 175.04
## + TRABAJA 1 175.60
## + SEXO 1 175.78
## + EST_CIVIL 2 175.79
## + EDAD 1 175.93
## + SOLVENTAR 3 175.94
## + TIPO_COL 2 177.78
## + RESIDENCIA 2 178.81
## + ESTUDIOS_PADRES 4 179.13
## + INGRESO 4 180.54
## - RENDIMIENTO 1 216.05
## # weights: 5 (4 variable)
## initial value 119.221315
## iter 10 value 81.094614
## iter 20 value 81.058453
## final value 81.056295
## converged
##
## Step: AIC=170.11
## ESTADO_ACADEMICO ~ RENDIMIENTO + TIPO_INGRESO
##
## # weights: 4 (3 variable)
## initial value 119.221315
## iter 10 value 105.030384
## final value 105.015138
## converged
## # weights: 3 (2 variable)
## initial value 119.221315
## final value 85.520772
## converged
## # weights: 8 (7 variable)
## initial value 119.221315
## iter 10 value 78.853841
## iter 20 value 78.796641
## iter 30 value 78.795677
## final value 78.795581
## converged
## # weights: 9 (8 variable)
## initial value 119.221315
## iter 10 value 78.392572
## iter 20 value 78.311742
## final value 78.311736
## converged
## # weights: 6 (5 variable)
## initial value 119.221315
## iter 10 value 80.710304
## iter 20 value 80.696417
## iter 30 value 80.693815
## iter 40 value 80.693416
## iter 50 value 80.692531
## iter 50 value 80.692531
## iter 50 value 80.692531
## final value 80.692531
## converged
## # weights: 9 (8 variable)
## initial value 119.221315
## iter 10 value 79.707975
## iter 20 value 79.636991
## final value 79.636873
## converged
## # weights: 7 (6 variable)
## initial value 119.221315
## iter 10 value 80.046383
## iter 20 value 79.989048
## final value 79.981243
## converged
## # weights: 6 (5 variable)
## initial value 119.221315
## iter 10 value 79.632104
## iter 20 value 79.585248
## iter 30 value 79.579422
## final value 79.579151
## converged
## # weights: 7 (6 variable)
## initial value 119.221315
## iter 10 value 81.050467
## iter 20 value 81.008463
## iter 30 value 81.005104
## final value 81.005097
## converged
## # weights: 8 (7 variable)
## initial value 119.221315
## iter 10 value 76.965244
## iter 20 value 76.913753
## iter 30 value 76.906326
## final value 76.906083
## converged
## # weights: 6 (5 variable)
## initial value 119.221315
## iter 10 value 80.101852
## iter 20 value 80.062846
## final value 80.051989
## converged
## Df AIC
## + EST_CIVIL 2 165.81
## + TRABAJA 1 169.16
## + EDAD 1 170.10
## <none> 170.11
## + SEXO 1 171.38
## + SOLVENTAR 3 171.59
## + TIPO_COL 2 171.96
## + ESTUDIOS_PADRES 4 172.62
## + RESIDENCIA 2 174.01
## - TIPO_INGRESO 2 175.04
## + INGRESO 4 175.27
## - RENDIMIENTO 1 216.03
## # weights: 8 (7 variable)
## initial value 119.221315
## iter 10 value 76.965244
## iter 20 value 76.913753
## iter 30 value 76.906326
## final value 76.906083
## converged
##
## Step: AIC=165.81
## ESTADO_ACADEMICO ~ RENDIMIENTO + TIPO_INGRESO + EST_CIVIL
##
## # weights: 7 (6 variable)
## initial value 119.221315
## iter 10 value 100.137673
## iter 20 value 100.123457
## iter 30 value 100.122292
## final value 100.122288
## converged
## # weights: 6 (5 variable)
## initial value 119.221315
## iter 10 value 83.917547
## iter 20 value 83.896131
## final value 83.894023
## converged
## # weights: 5 (4 variable)
## initial value 119.221315
## iter 10 value 81.094614
## iter 20 value 81.058453
## final value 81.056295
## converged
## # weights: 11 (10 variable)
## initial value 119.221315
## iter 10 value 75.718403
## iter 20 value 75.608736
## iter 30 value 75.605994
## iter 40 value 75.604497
## final value 75.604459
## converged
## # weights: 12 (11 variable)
## initial value 119.221315
## iter 10 value 73.985984
## iter 20 value 73.872780
## final value 73.868469
## converged
## # weights: 9 (8 variable)
## initial value 119.221315
## iter 10 value 76.678047
## iter 20 value 76.622212
## iter 30 value 76.619369
## final value 76.618521
## converged
## # weights: 12 (11 variable)
## initial value 119.221315
## iter 10 value 74.281756
## iter 20 value 74.158842
## final value 74.156997
## converged
## # weights: 10 (9 variable)
## initial value 119.221315
## iter 10 value 76.320592
## iter 20 value 76.244081
## iter 30 value 76.243611
## final value 76.241594
## converged
## # weights: 9 (8 variable)
## initial value 119.221315
## iter 10 value 76.496075
## iter 20 value 76.427921
## iter 30 value 76.421418
## final value 76.420443
## converged
## # weights: 10 (9 variable)
## initial value 119.221315
## iter 10 value 76.968769
## iter 20 value 76.902237
## iter 30 value 76.901628
## final value 76.899917
## converged
## # weights: 9 (8 variable)
## initial value 119.221315
## iter 10 value 76.906266
## final value 76.833985
## converged
## Df AIC
## <none> 165.81
## + TRABAJA 1 166.84
## + SEXO 1 167.24
## + EDAD 1 167.67
## + ESTUDIOS_PADRES 4 167.74
## + INGRESO 4 168.31
## + TIPO_COL 2 168.48
## + SOLVENTAR 3 169.21
## + RESIDENCIA 2 169.80
## - EST_CIVIL 2 170.11
## - TIPO_INGRESO 2 175.79
## - RENDIMIENTO 1 210.25
# Mostrar el resumen del modelo resultante del paso a paso
summary(stepwise_model)
## Call:
## multinom(formula = ESTADO_ACADEMICO ~ RENDIMIENTO + TIPO_INGRESO +
## EST_CIVIL, data = data)
##
## Coefficients:
## Values Std. Err.
## (Intercept) -0.02212452 0.2029251
## RENDIMIENTONO APROBADO 3.95038581 1.0289759
## TIPO_INGRESOTRASLADO 8.25440259 61.3386653
## TIPO_INGRESOADMISION DIRECTA -6.31171149 1.9893078
## EST_CIVILCasado/a 2.34345912 1.0660020
## EST_CIVILDivordiado/a 6.72012721 205.2502769
## EST_CIVILOtro 0.00000000 0.0000000
##
## Residual Deviance: 153.8122
## AIC: 165.8122
library(MASS)
library(pander)
library(MASS) # Para el cálculo de intervalos de confianza
#Modelo Final
modelofinal<- glm(ESTADO_ACADEMICO ~ RENDIMIENTO + TIPO_INGRESO + EST_CIVIL, data = data, family = binomial)
summary(modelofinal)
##
## Call:
## glm(formula = ESTADO_ACADEMICO ~ RENDIMIENTO + TIPO_INGRESO +
## EST_CIVIL, family = binomial, data = data)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -0.02214 0.20293 -0.109 0.913133
## RENDIMIENTONO APROBADO 3.95032 1.02894 3.839 0.000123 ***
## TIPO_INGRESOTRASLADO 15.58820 1455.39755 0.011 0.991454
## TIPO_INGRESOADMISION DIRECTA -6.31146 1.98927 -3.173 0.001510 **
## EST_CIVILCasado/a 2.34341 1.06597 2.198 0.027923 *
## EST_CIVILDivordiado/a 11.63789 1455.39788 0.008 0.993620
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 214.05 on 171 degrees of freedom
## Residual deviance: 153.81 on 166 degrees of freedom
## AIC: 165.81
##
## Number of Fisher Scoring iterations: 14
# Predecir las probabilidades en los datos de entrenamiento
predicciones_probfinal <- predict(modelofinal, newdata = data, type = "response")
# Convertir las probabilidades en clases utilizando un umbral (0.5 por defecto)
predicciones_clasefinal <- ifelse(predicciones_probfinal > 0.5, 1, 0)
# Crear la matriz de confusión
matriz_confusionfinal <- table(Predicciones = predicciones_clasefinal, Real = data$ESTADO_ACADEMICO)
# Agregar los totales por filas y columnas
matriz_confusion_con_totalesfinal <- addmargins(matriz_confusionfinal)
# Mostrar la matriz de confusión con totales
print(matriz_confusion_con_totalesfinal)
## Real
## Predicciones NO DESERTOR DESERTOR Sum
## 0 52 49 101
## 1 2 69 71
## Sum 54 118 172
# Resumen del modelo para ver los coeficientes y p-valores
summary(modelofinal)
##
## Call:
## glm(formula = ESTADO_ACADEMICO ~ RENDIMIENTO + TIPO_INGRESO +
## EST_CIVIL, family = binomial, data = data)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -0.02214 0.20293 -0.109 0.913133
## RENDIMIENTONO APROBADO 3.95032 1.02894 3.839 0.000123 ***
## TIPO_INGRESOTRASLADO 15.58820 1455.39755 0.011 0.991454
## TIPO_INGRESOADMISION DIRECTA -6.31146 1.98927 -3.173 0.001510 **
## EST_CIVILCasado/a 2.34341 1.06597 2.198 0.027923 *
## EST_CIVILDivordiado/a 11.63789 1455.39788 0.008 0.993620
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 214.05 on 171 degrees of freedom
## Residual deviance: 153.81 on 166 degrees of freedom
## AIC: 165.81
##
## Number of Fisher Scoring iterations: 14
# Calcular los odds ratios
odds_ratiosdfinal <- exp(coef(modelofinal))
# Mostrar los odds ratios
print(odds_ratiosdfinal)
## (Intercept) RENDIMIENTONO APROBADO
## 9.781066e-01 5.195185e+01
## TIPO_INGRESOTRASLADO TIPO_INGRESOADMISION DIRECTA
## 5.886692e+06 1.815382e-03
## EST_CIVILCasado/a EST_CIVILDivordiado/a
## 1.041667e+01 1.133106e+05
# Calcular los intervalos de confianza para los coeficientes
confint_stepwisefinal <- confint(modelofinal)
## Waiting for profiling to be done...
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
# Calcular los intervalos de confianza para los Odds Ratios
OR_ci_lowerfinal <- exp(confint_stepwisefinal[, 1])
OR_ci_upperfinal <- exp(confint_stepwisefinal[, 2])
#Mostrar los intervaloes
print(OR_ci_lowerfinal)
## (Intercept) RENDIMIENTONO APROBADO
## 6.560552e-01 1.073386e+01
## TIPO_INGRESOTRASLADO TIPO_INGRESOADMISION DIRECTA
## 9.269529e-123 2.043723e-05
## EST_CIVILCasado/a EST_CIVILDivordiado/a
## 1.903368e+00 3.238145e-98
print(OR_ci_upperfinal)
## (Intercept) RENDIMIENTONO APROBADO
## 1.45727107 936.50274527
## TIPO_INGRESOTRASLADO TIPO_INGRESOADMISION DIRECTA
## NA 0.06981732
## EST_CIVILCasado/a EST_CIVILDivordiado/a
## 194.44665580 NA
# Mostrar la matriz de confusión con totales
print(matriz_confusion_con_totalesfinal)
## Real
## Predicciones NO DESERTOR DESERTOR Sum
## 0 52 49 101
## 1 2 69 71
## Sum 54 118 172
# Mostrar la matriz de confusión con totales
print(matriz_confusion_con_totalesfinal)
## Real
## Predicciones NO DESERTOR DESERTOR Sum
## 0 52 49 101
## 1 2 69 71
## Sum 54 118 172
# Ajustar el modelo de regresión logística
modelofinal2ajus <- glm(formula =ESTADO_ACADEMICO ~ RENDIMIENTO + TIPO_INGRESO +
EST_CIVIL, family = binomial, data = data)
# Predecir las probabilidades en los datos de entrenamiento
predicciones_probfinal2ajus <- predict(modelofinal2ajus, newdata = data, type = "response")
# Crear una función para calcular la tasa de clasificación correcta con diferentes umbrales
calcular_tasa_clasificacionfinal2ajus <- function(umbral) {
predicciones_clasefinal2ajus <- ifelse(predicciones_probfinal2ajus > umbral, 1, 0)
matriz_confusionfinal2ajus <- table(Predicciones = predicciones_clasefinal2ajus, Real = data$ESTADO_ACADEMICO)
tasa_clasificacion_correctafinal2ajus <- sum(diag(matriz_confusionfinal2ajus)) / sum(matriz_confusionfinal2ajus)
return(tasa_clasificacion_correctafinal2ajus)
}
# Probar una secuencia de umbrales de corte entre 0 y 1
umbralesfinal2ajus <- seq(0, 1, by = 0.01)
tasas_clasificacionfinal2ajus <- sapply(umbralesfinal2ajus, calcular_tasa_clasificacionfinal2ajus)
# Encontrar el umbral que maximiza la tasa de clasificación correcta
mejor_umbralfinal2ajus <- umbralesfinal2ajus[which.max(tasas_clasificacionfinal2ajus)]
mejor_tasa_clasificacionfinal2ajus <- max(tasas_clasificacionfinal2ajus)
# Mostrar el mejor umbral y la tasa de clasificación correcta correspondiente
cat("El mejor umbral es:", mejor_umbralfinal2ajus, "\n")
## El mejor umbral es: 0.5
cat("La mejor Tasa de Clasificación Correcta es:", round(mejor_tasa_clasificacionfinal2ajus * 100, 2), "%\n")
## La mejor Tasa de Clasificación Correcta es: 70.35 %
# Graficar la tasa de clasificación correcta en función del umbral
plot(umbralesfinal2ajus, tasas_clasificacionfinal2ajus, type = "l", col = "blue", lwd = 2,
xlab = "Umbral", ylab = "Tasa de Clasificación Correcta",
main = "Tasa de Clasificación Correcta vs Umbral")
abline(v = mejor_umbralfinal2ajus, col = "red", lwd = 2, lty = 2) # Línea en el mejor umbral
# Encontrar el umbral que maximiza la tasa de clasificación correcta
mejor_umbralfinal2ajus <- umbralesfinal2ajus[which.max(tasas_clasificacionfinal2ajus)]
mejor_tasa_clasificacionfinal2ajus <- max(tasas_clasificacionfinal2ajus)
print(mejor_umbralfinal2ajus)
## [1] 0.5
print(mejor_tasa_clasificacionfinal2ajus)
## [1] 0.7034884
system('g++ -v')
## Warning in system("g++ -v"): 'g++' not found
## [1] 127
#Curva ROC
#install.packages("pROC")
library(pROC)
## Type 'citation("pROC")' for a citation.
##
## Adjuntando el paquete: 'pROC'
## The following object is masked from 'package:gmodels':
##
## ci
## The following objects are masked from 'package:stats':
##
## cov, smooth, var
#Para construir la curva ROC:
rocplotfinala2jus <- roc(ESTADO_ACADEMICO ~ fitted(modelofinal2ajus), data = data)
## Setting levels: control = NO DESERTOR, case = DESERTOR
## Setting direction: controls < cases
rocplotfinala2jus #Area under the curve
##
## Call:
## roc.formula(formula = ESTADO_ACADEMICO ~ fitted(modelofinal2ajus), data = data)
##
## Data: fitted(modelofinal2ajus) in 54 controls (ESTADO_ACADEMICO NO DESERTOR) < 118 cases (ESTADO_ACADEMICO DESERTOR).
## Area under the curve: 0.7861
plot.roc(rocplotfinala2jus, legacy.axes = TRUE) #Si ponemos legacy.axes = FALSE, se representa la especificidad en X.
auc(rocplotfinala2jus) # auc = Área bajo la curva ROC
## Area under the curve: 0.7861
modelofinal2ajus <- glm(formula = ESTADO_ACADEMICO ~ RENDIMIENTO + TIPO_INGRESO +
EST_CIVIL, family = binomial, data = data)
summary(modelofinal2ajus)
##
## Call:
## glm(formula = ESTADO_ACADEMICO ~ RENDIMIENTO + TIPO_INGRESO +
## EST_CIVIL, family = binomial, data = data)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -0.02214 0.20293 -0.109 0.913133
## RENDIMIENTONO APROBADO 3.95032 1.02894 3.839 0.000123 ***
## TIPO_INGRESOTRASLADO 15.58820 1455.39755 0.011 0.991454
## TIPO_INGRESOADMISION DIRECTA -6.31146 1.98927 -3.173 0.001510 **
## EST_CIVILCasado/a 2.34341 1.06597 2.198 0.027923 *
## EST_CIVILDivordiado/a 11.63789 1455.39788 0.008 0.993620
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 214.05 on 171 degrees of freedom
## Residual deviance: 153.81 on 166 degrees of freedom
## AIC: 165.81
##
## Number of Fisher Scoring iterations: 14
# Instalar y cargar el paquete pROC
library(pROC)
# Crear la curva ROC
rocplotfinal2ajus <- roc(data$ESTADO_ACADEMICO, fitted(modelofinal2ajus))
## Setting levels: control = NO DESERTOR, case = DESERTOR
## Setting direction: controls < cases
rocplotfinal2ajus # Imprime la información de la curva, como el AUC
##
## Call:
## roc.default(response = data$ESTADO_ACADEMICO, predictor = fitted(modelofinal2ajus))
##
## Data: fitted(modelofinal2ajus) in 54 controls (data$ESTADO_ACADEMICO NO DESERTOR) < 118 cases (data$ESTADO_ACADEMICO DESERTOR).
## Area under the curve: 0.7861
# Graficar la curva ROC con AUC
plot.roc(rocplotfinal2ajus, legacy.axes = TRUE, main = "Curva ROC del Modelo")
text(x = 0.6, y = 0.4, labels = paste("AUC =", round(auc(rocplotfinal2ajus), 3)), col = "blue")
# Ajustar el modelo de regresión logística binaria
modelofinal2ajusev <- glm(formula = ESTADO_ACADEMICO ~ RENDIMIENTO + TIPO_INGRESO +
EST_CIVIL,family = binomial, data = data)
# Predecir las probabilidades en los datos de entrenamiento
predicciones_probfinal2ajusev <- predict(modelofinal2ajusev, newdata = data, type = "response")
# Convertir las probabilidades en clases (0 o 1), usando 0.51 como umbral de corte
umbralfinal2ajusev <- 0.5 #cambio de valor
predicciones_clasefinal2ajusev <- ifelse(predicciones_probfinal2ajusev > umbralfinal2ajusev, 1, 0)
# Crear la matriz de confusión
matriz_confusionfinal2ajusev <- table(Predicciones = predicciones_clasefinal2ajusev, Real = data$ESTADO_ACADEMICO)
# Calcular la tasa de clasificación correcta
tasa_clasificacion_correctafinal2ajusev <- sum(diag(matriz_confusionfinal2ajusev)) / sum(matriz_confusionfinal2ajusev)
# Agregar los totales por filas y columnas a la matriz de confusión
matriz_confusion_con_totalesfinal2ajusev <- addmargins(matriz_confusionfinal2ajusev)
# Mostrar la matriz de confusión con totales
print(matriz_confusion_con_totalesfinal2ajusev)
## Real
## Predicciones NO DESERTOR DESERTOR Sum
## 0 52 49 101
## 1 2 69 71
## Sum 54 118 172
# Mostrar la tasa de clasificación correcta
cat("Tasa de Clasificación Correcta:", round(tasa_clasificacion_correctafinal2ajusev * 100, 2), "%\n")
## Tasa de Clasificación Correcta: 70.35 %