En esta sesión vamos analizar a los admitidos No TEC de Agosto Diciembre 2019 de profesional.
Vamos a utilizar la base de datos (Base_CADI.xlsx) que incluye las siguientes varaiables:
| Variable | Descripción |
|---|---|
| Escuela | Escuela del alumno |
| Sexo | Hombre, Mujer |
| PNAi | Promedio de prepa al 2do año |
| PNA | Promedio de prepa de graduación |
| PAA | Puntaje del examen de admisión |
###Intalación de librerias
##Procesamiento de bases de datos Selección de variables en la base de datos
#Datos1<-filter(Datos,V1=="Categoría")
#Datos1<-filter(Datos,V2>Número)
B0<-select(Datos1,c("Escuela","Sexo","PNA","PNAi","PAA"))
###Identificación y corrección de valores faltantes
colSums(is.na(B0))
## Escuela Sexo PNA PNAi PAA
## 0 0 0 0 2
Hay dos valores faltantes en PAA
Podemos quitarlos o reemplazarlos por la media
#Borrar los registros faltantes
#B0<- na.omit(B0)
#Reemplazarlos por la media de las variables
B0$PAA <- na.aggregate(B0$PAA,FUN=mean) #se puede usar la media, moda o la mediana
colSums(is.na(B0)) #para validar que funcionó
## Escuela Sexo PNA PNAi PAA
## 0 0 0 0 0
#Datos1 <- na.aggregate(B0,FUN=mean) Este funcionaria si no tuviera variables categoricas
###Validar valores atípicos
summary(B0)
## Escuela Sexo PNA PNAi
## Length:2571 Length:2571 Min. : 72.80 Min. : 73.30
## Class :character Class :character 1st Qu.: 85.61 1st Qu.: 87.60
## Mode :character Mode :character Median : 91.00 Median : 92.90
## Mean : 90.09 Mean : 91.89
## 3rd Qu.: 95.00 3rd Qu.: 96.90
## Max. :110.00 Max. :100.00
## PAA
## Min. :1040
## 1st Qu.:1260
## Median :1340
## Mean :1339
## 3rd Qu.:1420
## Max. :1590
boxplot(B0$PAA)
boxplot(B0$PNA)
boxplot(B0$PNAi)
Q1=quantile(B0$PNAi,prob=0.25)
Q3=quantile(B0$PNAi,prob=0.75)
#Rango intercuartilico
fs=Q3-Q1
#observaciones extremas si
#si es mayor a Q3+1.5*fs
#si es menor a Q1-1.5*fs
OLsupPNAi<-which(B0$PNAi>(Q3+1.5*fs))
OLinfPNAi<-which(B0$PNAi<(Q1-1.5*fs))
OLsupPNAi
## integer(0)
OLinfPNAi
## [1] 167
#__________________________________________________________________
Q1=quantile(B0$PAA,prob=0.25)
Q3=quantile(B0$PAA,prob=0.75)
#Rango intercuartilico
fs=Q3-Q1
#observaciones extremas si
#si es mayor a Q3+1.5*fs
#si es menor a Q1-1.5*fs
OLsupPAA<-which(B0$PAA>(Q3+1.5*fs))
OLinfPAA<-which(B0$PAA<(Q1-1.5*fs))
OLsupPAA
## integer(0)
OLinfPAA
## integer(0)
#__________________________________________________________________
Q1=quantile(B0$PNA,prob=0.25)
Q3=quantile(B0$PNA,prob=0.75)
#Rango intercuartilico
fs=Q3-Q1
#observaciones extremas si
#si es mayor a Q3+1.5*fs
#si es menor a Q1-1.5*fs
OLsupPNA<-which(B0$PNA>(Q3+1.5*fs))
OLinfPNA<-which(B0$PNA<(Q1-1.5*fs))
OLsupPNA
## [1] 2423
OLinfPNA
## integer(0)
Hay observaciones atípicas en PNA y PNAi
#describe(B0,omit=TRUE)
#t(describe(B0,omit=TRUE)) #t es para trasponer los datos y tener otra vista
round(t(describe(B0,omit=TRUE)),3) #para redondear los valores y que no sea mucho cero
## PNA PNAi PAA
## vars 3.000 4.000 5.000
## n 2571.000 2571.000 2571.000
## mean 90.092 91.891 1339.207
## sd 5.982 5.753 99.540
## median 91.000 92.900 1340.000
## trimmed 90.378 92.311 1339.278
## mad 6.509 6.523 118.608
## min 72.800 73.300 1040.000
## max 110.000 100.000 1590.000
## range 37.200 26.700 550.000
## skew -0.393 -0.542 -0.022
## kurtosis -0.574 -0.595 -0.788
## se 0.118 0.113 1.963
Convertir los valores atipicos en NA para su corrección.
B0$PNA[which(B0$PNA>100)] <- NA
B0$PNA <- na.aggregate(B0$PNA,FUN=mean)
summary(B0)
## Escuela Sexo PNA PNAi
## Length:2571 Length:2571 Min. : 72.80 Min. : 73.30
## Class :character Class :character 1st Qu.: 85.61 1st Qu.: 87.60
## Mode :character Mode :character Median : 91.00 Median : 92.90
## Mean : 90.08 Mean : 91.89
## 3rd Qu.: 95.00 3rd Qu.: 96.90
## Max. :100.00 Max. :100.00
## PAA
## Min. :1040
## 1st Qu.:1260
## Median :1340
## Mean :1339
## 3rd Qu.:1420
## Max. :1590
####Creación de tablas
#Por escuela
library(dplyr)
Tabla<-B0 %>%
group_by(Escuela) %>%
summarize("n"=n(),
'Porc'=round(100*(n/nrow(B0)),1),
'PNA'=round(mean(PNA,na.rm=TRUE),1),
'PAA'=round(mean(PAA,na.rm=TRUE),0))
Tabla
#pipe(%>%) para la base de datos 0
#los repite por variable categorica
#cuantos alumnos hay por escuela
#Por Sexo (genero)
library(dplyr)
Tabla1<-B0 %>%
group_by(Sexo) %>%
summarize("n"=n(),
'Porc'=round(100*(n/nrow(B0)),1),
'PNA'=round(mean(PNA,na.rm=TRUE),1),
'PAA'=round(mean(PAA,na.rm=TRUE),0))
Tabla
#Grafico de barras grafico con las n, %de observaciones y donde PAA o del PNA aes(indica qué vas a gráficas ..x=Escuela, y=n) qué tipo de gráfico quieres =geom_col(barras) fill=color geom_text le indico configuraciones para la etiqueta
#Por PNA
ggplot(Tabla,aes(x=Escuela,y=PNA))+
geom_col(fill = 3)+
geom_text(aes(label = PNA),vjust=-1)+
ylim(c(0, 100))+
scale_x_discrete(limits = c('EIC', 'EN','EAAD','ECSG','EMCS','EHE'))
#Por PAA
ggplot(Tabla,aes(x=Escuela,y=PAA))+
geom_col(fill = 3)+
geom_text(aes(label = PAA),vjust=-1)+
ylim(c(0, 1500))+
scale_x_discrete(limits = c('EIC', 'EN','EAAD','ECSG','EMCS','EHE'))
#Por PNA
ggplot(Tabla1,aes(x=Sexo,y=PNA))+
geom_col(fill = 3)+
geom_text(aes(label = PNA),vjust=-1)+
ylim(c(0,100))
#Por PAA
ggplot(Tabla1,aes(x=Sexo,y=PAA))+
geom_col(fill = 3)+
geom_text(aes(label = PAA),vjust=-1)+
ylim(c(0,1400))
###Histograma
ggplot(B0,aes(x=PAA))+
geom_histogram(fill=4,color=1,binwidth = 50)
#bins=30 quiero 30 intervalos
###Grafico de densidad
ggplot(B0, aes(x = PAA)) +
geom_density(fill=4, color=1, binwidth = 100,alpha=.3)
## Warning in geom_density(fill = 4, color = 1, binwidth = 100, alpha = 0.3):
## Ignoring unknown parameters: `binwidth`
###Histogramas agrupados
ggplot(B0, aes(x = PAA, fill = Sexo, colour=Sexo)) +
geom_histogram(alpha=.4,position="identity", binwidth = 50)
ggplot(B0, aes(x = PAA, fill = Sexo, colour=Sexo)) +
geom_density(alpha=.4)
###Caja y bigote
#Sencillo
ggplot(B0, aes(x=PAA)) +
geom_boxplot()
#Agrupado
ggplot(B0, aes(x=Sexo, y=PAA)) +
geom_boxplot()
#Grafico de caja y bigotes con errores y u observaciones extremas
ggplot(B0, aes(x=Sexo, y=PAA, fill = Sexo)) +
stat_boxplot(geom = "errorbar",width = 0.25)+
geom_boxplot()
ggplot(B0, aes(x=Sexo, y=PNA, fill = Sexo)) +
stat_boxplot(geom = "errorbar",width = 0.25)+
geom_boxplot()
ggplot(B0, aes(x=Sexo, y=PNAi, fill = Sexo)) +
stat_boxplot(geom = "errorbar",width = 0.25)+
geom_boxplot()
##Tablas dinamicas
Tablapivot<-rpivotTable(B0, rows="Escuela", col="Sexo",
aggregatorName="Average", vals="PAA",
rendererName = "Table")
print(Tablapivot)
#ESTADISTICA INFERENCIAL
##PRUEBA DE HIPOTESIS H0: normalidad (asimetria=0y curtosis=3) H1: no normalidad Rechazar H0 a favor de H1 si alpha>=Valor P alpha==0.5
options(scipen = 100, digits = 2)
library(tseries)
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
jarque.bera.test(B0$PAA)
##
## Jarque Bera Test
##
## data: B0$PAA
## X-squared = 66, df = 2, p-value = 0.000000000000004
Como alfa =0.05 es mayor al valor P se rechaza H0 a favor de H1
No hay normalidad
Como vamos a realizar inferencias comparando hombres y mujeres vs examen de admisión vamos a dividir los datos la base, B0
Mujeres<-filter(B0,Sexo=="M")
Hombres<-filter(B0,Sexo=="H")
Probemos normalidad para hombres y mujeres
jarque.bera.test(Mujeres$PAA)
##
## Jarque Bera Test
##
## data: Mujeres$PAA
## X-squared = 40, df = 2, p-value = 0.000000002
jarque.bera.test(Hombres$PAA)
##
## Jarque Bera Test
##
## data: Hombres$PAA
## X-squared = 30, df = 2, p-value = 0.0000004
Como alfa =0.05 es mayor al valor P nos quedamos con la hipótesis de que no hay normalidad para ninguna de las categorias
##Prueba de hipotesis de una muestra para la media
supuesto: normalidad
H0: miu= (cierto valor) media torica del examen de admisión es 1,000 H1: miu=/= 1000 (dos colas)
H1: miu> 1000 (cola superior) para este ejercicio H1: miu< 1000 (cola inferior)
library(stats)
t.test(Mujeres$PAA,alternative="greater",conf.level=0.95,mu=1000)
##
## One Sample t-test
##
## data: Mujeres$PAA
## t = 125, df = 1372, p-value <0.0000000000000002
## alternative hypothesis: true mean is greater than 1000
## 95 percent confidence interval:
## 1328 Inf
## sample estimates:
## mean of x
## 1332
t.test(Hombres$PAA,alternative="greater",conf.level=0.95,mu=1000)
##
## One Sample t-test
##
## data: Hombres$PAA
## t = 120, df = 1197, p-value <0.0000000000000002
## alternative hypothesis: true mean is greater than 1000
## 95 percent confidence interval:
## 1342 Inf
## sample estimates:
## mean of x
## 1347
Se rechaza H0 a favor de H1, la media es mayor a 1300 puntos
##Pureba de hipotesis NO parametricos de una muestra para la media
H0: miu= (cierto valor) media torica del examen de admisión es 1,000 H1: miu=/= 1000 (dos colas)
H1: miu> 1000 (cola superior) para este ejercicio H1: miu< 1000 (cola inferior)
library("ggpubr")
wilcox.test(Mujeres$PAA, mu = 1000, alternative = "greater")
##
## Wilcoxon signed rank test with continuity correction
##
## data: Mujeres$PAA
## V = 943251, p-value <0.0000000000000002
## alternative hypothesis: true location is greater than 1000
wilcox.test(Hombres$PAA, mu = 1000, alternative = "greater")
##
## Wilcoxon signed rank test with continuity correction
##
## data: Hombres$PAA
## V = 718201, p-value <0.0000000000000002
## alternative hypothesis: true location is greater than 1000
Se rechaza h0 a favor de h1, la media es mayor a 1300 puntos.
##Pureba de hipotesis para la difernecia de dos medias con muestras independientes.
Supuestos:
Normalidad en las poblaciones
Muestras sean independientes (que la muestra A es indiependiente de B, en este caso mujer y hombre son independientes) Variazas poblacionales desconocidas pero asumidas iguales
Normalidad no se cumple Muestras independientes entre sí
##Prueba de hipotesis para varianzas
H0: varianza 1 / varianza 2 ==1, (creencia a priori) H1: varianza 1 / varianza 2 =/=1, (creencia a priori)
var.test(x = Hombres$PAA, y = Mujeres$PAA, null.value=1, alternative="two.sided",
conf.level=0.95)
##
## F test to compare two variances
##
## data: Hombres$PAA and Mujeres$PAA
## F = 1, num df = 1197, denom df = 1372, p-value = 0.6
## alternative hypothesis: true ratio of variances is not equal to 1
## 95 percent confidence interval:
## 0.92 1.15
## sample estimates:
## ratio of variances
## 1
Como alfa es menor al valor p, nos queamos con H0, las varianzas son iguales
Normalidad no se cumple(por teorema de limite central si, pero probaremos pruebas no parametricas) Muestras independientes sí se cumple Varianza constantes sí
Ho: MediaH-MediaM=0, (Δ=0 creencia a priori) Ha: MediaH-MediaM>0 (prueba cola superir)
t.test(x = Hombres$PAA, y = Mujeres$PAA,
alternative="greater",
mu=0, paired=FALSE, var.equal=TRUE, conf.level = 0.95)
##
## Two Sample t-test
##
## data: Hombres$PAA and Mujeres$PAA
## t = 4, df = 2569, p-value = 0.00009
## alternative hypothesis: true difference in means is greater than 0
## 95 percent confidence interval:
## 8.2 Inf
## sample estimates:
## mean of x mean of y
## 1347 1332
Como alfa > valor P, se rechaza H0 a favor de H1 al PAA promedio de los hombres es mayor al de las mujeres
###Pureba de hipotesisi no parametrica para comparar dos medias Supuesto no requiere, solo que las muestras sean independientes.
wilcox.test(x=Hombres$PAA,y=Mujeres$PAA,
alternative = "greater",paired = FALSE,conf.level = 0.95)
##
## Wilcoxon rank sum test with continuity correction
##
## data: Hombres$PAA and Mujeres$PAA
## W = 885586, p-value = 0.0004
## alternative hypothesis: true location shift is greater than 0
Misma conclusión parametrica o no parametricas
Como alfa > valor P, se rechaza H0 a favor de H1 al PAA promedio de los hombres es mayor al de las mujeres
Estudia el efecto de una variable categórica (con más de una categória) sobre una variable numérica.
y=PAA(Puntaje examen de admisión) x=Escuela (escuela de inscripción)
H0: m1=m2=m3=m4=m5=m6 = m H1: al menos una es diferente ~ = “en función a”
Estimacion<-aov(PAA ~ Escuela,B0)
summary(Estimacion)
## Df Sum Sq Mean Sq F value Pr(>F)
## Escuela 5 1044939 208988 21.9 <0.0000000000000002 ***
## Residuals 2565 24419012 9520
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Conclusión: como alfa es mayor al valor p, se rechaza H0, al menos una media es diferente.
Residual = Observado - Estimado …Obtenemos la t para cada error
B0$RS<-rstudent(Estimacion)
Obs_extremas<-which(abs(B0$RS) >= 2)
Obs_extremas
## 30 88 180 222 251 277 327 332 341 347 420 444 445 455 468 510
## 30 88 180 222 251 277 327 332 341 347 420 444 445 455 468 510
## 529 558 625 638 640 641 720 776 803 849 965 975 1001 1026 1036 1162
## 529 558 625 638 640 641 720 776 803 849 965 975 1001 1026 1036 1162
## 1176 1229 1240 1249 1257 1334 1393 1474 1507 1594 1655 1662 1688 1717 1725 1735
## 1176 1229 1240 1249 1257 1334 1393 1474 1507 1594 1655 1662 1688 1717 1725 1735
## 1799 1812 1829 1847 1853 1861 1874 1878 2084 2143 2282 2286 2293 2313 2387 2412
## 1799 1812 1829 1847 1853 1861 1874 1878 2084 2143 2282 2286 2293 2313 2387 2412
## 2433 2470 2479 2489 2522 2536 2554 2561
## 2433 2470 2479 2489 2522 2536 2554 2561
B0$DC<-cooks.distance(Estimacion)
#Valor F de tablas
Fc<-qf(0.5, (6+1), (nrow(B0)-(6+1)))
#k = 6 escuelas
Obs_influyentes<-which(B0$DC > Fc)
Obs_influyentes
## named integer(0)
No hay influyentes
B0<-B0[-Obs_extremas,]
H0: Normalidad
H1: No normalida d
jarque.bera.test(resid(Estimacion))
##
## Jarque Bera Test
##
## data: resid(Estimacion)
## X-squared = 49, df = 2, p-value = 0.00000000002
No hay normalidad.
Alternativa
1.-Transformación Box-cox (busca que la variable tenga una distribución normal, con una potencia que asegure normalidad)
2.-Prueba no parametrica de ANOVA
3.-Teorema del limite central (tengo una muestra grande)
Transformación Box-Cox lambda= potencia
library(MASS)
##
## Attaching package: 'MASS'
## The following object is masked from 'package:dplyr':
##
## select
BC<-boxcox(Estimacion,lambda=seq(-100,100,.01))
lambda<-BC$x[which.max(BC$y)]
lambda
## [1] 1.5
El valor de lambda de 1.5 maximiza la probabilidad de que tengamos normalidad
with= transformar variables
B0$PAAT<-with(B0,PAA^lambda)
EstimacionT<-aov(PAAT ~ Escuela,B0)
summary(EstimacionT)
## Df Sum Sq Mean Sq F value Pr(>F)
## Escuela 5 5107285276 1021457055 34.5 <0.0000000000000002 ***
## Residuals 2493 73879406429 29634740
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
jarque.bera.test(resid(EstimacionT))
##
## Jarque Bera Test
##
## data: resid(EstimacionT)
## X-squared = 72, df = 2, p-value = 0.0000000000000002
No se lora corregir la normalidad, tenemos dos opciones más
H0: Varianza Constante
H1: Varianza no constante
Estimacion<- aov(PAA ~ Escuela, B0)
summary(Estimacion)
## Df Sum Sq Mean Sq F value Pr(>F)
## Escuela 5 1434540 286908 34 <0.0000000000000002 ***
## Residuals 2493 21056071 8446
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
library(lmtest)
bptest(Estimacion)
##
## studentized Breusch-Pagan test
##
## data: Estimacion
## BP = 5, df = 5, p-value = 0.4
como alfa < valor p, nos quedamos con Ho la varianza es constante
Debido a que nos quedamos con que las medias son parametricas ahora hay que probar cuales son firerentes a iguales.
Tukey<-TukeyHSD(Estimacion)
Tukey
## Tukey multiple comparisons of means
## 95% family-wise confidence level
##
## Fit: aov(formula = PAA ~ Escuela, data = B0)
##
## $Escuela
## diff lwr upr p adj
## ECSG-EAAD -0.93 -20.0 18.1 1.00
## EHE-EAAD 4.81 -16.1 25.8 0.99
## EIC-EAAD 26.88 10.4 43.3 0.00
## EMCS-EAAD 72.50 51.3 93.7 0.00
## EN-EAAD -9.52 -26.3 7.3 0.59
## EHE-ECSG 5.74 -16.0 27.4 0.97
## EIC-ECSG 27.81 10.4 45.2 0.00
## EMCS-ECSG 73.43 51.5 95.4 0.00
## EN-ECSG -8.59 -26.3 9.1 0.74
## EIC-EHE 22.08 2.6 41.5 0.02
## EMCS-EHE 67.70 44.1 91.3 0.00
## EN-EHE -14.33 -34.1 5.4 0.30
## EMCS-EIC 45.62 25.9 65.4 0.00
## EN-EIC -36.40 -51.3 -21.5 0.00
## EN-EMCS -82.02 -102.0 -62.0 0.00
plot(Tukey,las=2)
Donde alfa > al valor p ajustados, la diferencia en las medias será estadisticamente diferente de cero.
Medicina Seguida de Ingenieria
Cualquier intervalo que no cruce cero, tiene media mayor
supuestos, solo requiere que las muestras sean indepenties
KT<-kruskal.test(PAA~Escuela,B0)
KT
##
## Kruskal-Wallis rank sum test
##
## data: PAA by Escuela
## Kruskal-Wallis chi-squared = 156, df = 5, p-value <0.0000000000000002
Como el ANOVA, las medias son diferentes alfa > valor p
B0$Escuela<-as.factor(B0$Escuela)
library(PMCMRplus)
kwAllPairsConoverTest(PAA~Escuela,B0, p.adjust.method ="holm")
## Warning in kwAllPairsConoverTest.default(c(1240, 1370, 1390, 1370, 1180, : Ties
## are present. Quantiles were corrected for ties.
##
## Pairwise comparisons using Conover's all-pairs test
## data: PAA by Escuela
## EAAD ECSG EHE
## ECSG 1.000 - -
## EHE 1.000 1.000 -
## EIC 0.000073089730191 0.000073089730191 0.012
## EMCS < 0.0000000000000002 < 0.0000000000000002 0.000000000000011
## EN 0.462 0.688 0.231
## EIC EMCS
## ECSG - -
## EHE - -
## EIC - -
## EMCS 0.000000000509954 -
## EN 0.000000000114425 < 0.0000000000000002
##
## P value adjustment method: holm
en la tabla viene el valor p de la comparación de medias , si alfa > valor p se concluye que las medias son diferentes
Terminan las pruebas de la estadística inferencial _______________________________________________________________________________________