cargando datos:
filename="dataMundo.csv"
data=read.csv(filename,stringsAsFactors =F)
verificando tipos:
str(data)
## 'data.frame': 175 obs. of 12 variables:
## $ Country : chr "Afghanistan" "Albania" "Andorra" "Angola" ...
## $ gasto2000 : num NA 3.3 NA 2.6 4.6 2.8 4.9 5.6 3.9 2.9 ...
## $ gasto2005 : num NA 3.2 1.6 2.8 3.9 2.7 4.9 5.2 3 NA ...
## $ gasto2010 : num 3.5 NA 3.1 3.5 5 3.2 5.6 5.7 2.8 NA ...
## $ drop2000 : num NA NA NA NA 5.5 1.5 NA NA 3.1 18.6 ...
## $ drop2005 : num NA 10.4 NA NA 9.2 NA NA NA 4 NA ...
## $ drop2010 : num NA 2.1 NA NA 6.9 4 NA 0.6 2.8 NA ...
## $ drop2015 : num NA 11.2 NA NA NA 5.3 NA 0.4 1.1 NA ...
## $ incomeIneq2017: num NA 29 NA 42.7 42.4 32.5 34.7 30.5 16.6 NA ...
## $ pisaRead2015 : int NA 405 NA NA 425 NA 503 485 NA NA ...
## $ pisaMath2015 : int NA 413 NA NA 456 NA 494 497 NA NA ...
## $ pisaSci2015 : int NA 427 NA NA 475 NA 510 495 NA NA ...
Habrá bajado el abandono PROMEDIO?
Un problema con la presente data es que solo se cuenta con información cuantitativa. No se tiene información desde la teoría o de la experiencia de cada país para saber cuáles son las razones de los cambios de sus indicadores. Así, no se sabe si los países realizaron acciones específicas con el objetico de modificar el resultado de sus indicadores o sucedió algún hecho de carácter exógeno que tuvo efecto en estos. Por ello, no se pueden interpretar ni plantear hipótesis sobre las causas de estos resultados.
Por otro lado, es preciso señalar que para poder realizar cualquier intervención y conocer los resultados de esta es necesario contar con una línea de base. Una línea de base nos permitirá conocer como estaban las cosas antes de nuestra intervención y para que a la hora que evaluemos nuestra intervención tengamos contra que comparar si es que hubo cambios o no. El no tener una línea de base no nos permitirá tener una comparación, ni saber si es que nuestra intervención logró un resultado o no. Este es un error muy común en nuestro país, se realizan intervenciones sin tener línea de base lo cual no permite medir los impactos de estas. Más adelante se tratará sobre los grupos de control, los cuales también nos permiten medir si los cambios realizados se deben o no a nuestra intervención.
varsRepeated=c('drop2000','drop2005','drop2010','drop2015')
drops1=data[complete.cases(data[,varsRepeated]),] #data sin perdidos
boxplot(drops1[,varsRepeated])
Este gráfico permite visualizar la distribución de los datos. Así, en este caso permite comparar a través de los años como se han distribuido los datos de abandono escolar en los años 2000, 2005, 2010 y 2015. De esta manera, se puede observar en los años 2000 y 2005 que existe una cola de países que tienen un valor alto de abandono escolar. Sin embargo, esto varía en los años 2010 y 2015 donde solo un país (Madagascar), en ambos años, tiene un nivel alto de abandono escolar. El resto de países nivelaron o alcanzaron los parametros de abandono escolar y estuvieron como parte del grupo general de países.
Un detalle importante que se debe tener en cuenta a la hora de realizar comparaciones a través del tiempo o la evolución de un indicador, es que uno debe ser consciente de los cambios que se quieren lograr y el tiempo que esto implica. Así por ejemplo, para saber los cambios que logró una intervención como distribución de materiales educativos a una IIEE se puede saber si esta intervención tuvo influencia o no realizando la medición al final del año escolar. Por otro lado, si la intervención pretende cambiar comportamientos como la violencia de género o el machismo se debe dar un tiempo mayor para poder medir los resultados ya que estos cambios son más profundos por lo que toman mayor tiempo.
# prueba a dos colas: solo pregunta si las medias de los años difieren.
# si p-value es menor que 0.05 se acepta que HAY DIFERENCIAS
t.test(drops1$drop2000, drops1$drop2005, paired = TRUE, alternative = "two.sided")
##
## Paired t-test
##
## data: drops1$drop2000 and drops1$drop2005
## t = -1.086, df = 27, p-value = 0.2871
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -3.580692 1.102120
## sample estimates:
## mean of the differences
## -1.239286
CUando el p valor es menor a 0.05 se dice que hay diferencia
# prueba a la cola izquierda: pregunta si la media del primer año es menor a la del año posterior.
# si p-value es menor que 0.05 se acepta que es MENOR
t.test(drops1$drop2000, drops1$drop2005,
paired = TRUE, alternative = "less")
##
## Paired t-test
##
## data: drops1$drop2000 and drops1$drop2005
## t = -1.086, df = 27, p-value = 0.1435
## alternative hypothesis: true difference in means is less than 0
## 95 percent confidence interval:
## -Inf 0.7043883
## sample estimates:
## mean of the differences
## -1.239286
DATA NO está balanceada para hacer calculo para todos los años.
En esta parte es necesario precisar la importancia de contar con un grupo de control para saber como está cambiando nuestro objeto de estudio. De esta manera, un grupo de control permite ver si los cambios o variables introducidas han tenido un impacto en las poblaciones a las cuales se les aplican; ya que también es posible que dichos cambios sean producto del desarrollo regular del grupo poblacional o que otras variables, no consideradas en nuestro estudio, esté afectando a todos en igual o menor simetría. Un grupo de control es importante para reconocer si efectivamente las acciones realizadas para lograr un cambio son las causas de dicho cambio o esto responde a otras variables exógenas a nuestro trabajo. Por ejemplo, si se ve un incremento en el % de personas que asisten a votar similar en todos los casos (civic duty, hawthorne y neighbours) pero sin contar con un grupo de control, se podría considerar que todos los casos han resultado ser efectivos. En cambio si se tiene un grupo de control y se observa que este también incrementa su % entonces podemos observar que este cambio no necesariamente se da por nuestras acciones, sino por factores externos, como mejores canales de comunicación o mejor oferta programática o candidatos con mayor carisma. El grupo de control permite ver si efectivament existen cambios relacionados a las nuevas variables introducidas.
social <- read.csv("social.csv",stringsAsFactors = T)
summary(social) #
## sex yearofbirth primary2004 messages
## female:152702 Min. :1900 Min. :0.0000 Civic Duty: 38218
## male :153164 1st Qu.:1947 1st Qu.:0.0000 Control :191243
## Median :1956 Median :0.0000 Hawthorne : 38204
## Mean :1956 Mean :0.4014 Neighbors : 38201
## 3rd Qu.:1965 3rd Qu.:1.0000
## Max. :1986 Max. :1.0000
## primary2006 hhsize
## Min. :0.0000 Min. :1.000
## 1st Qu.:0.0000 1st Qu.:2.000
## Median :0.0000 Median :2.000
## Mean :0.3122 Mean :2.184
## 3rd Qu.:1.0000 3rd Qu.:2.000
## Max. :1.0000 Max. :8.000
Es preciso señalar que para eliminar los factores externos que puedan afectar la consistencia de nuestra data; es decir, la medición de la efectividad de las variables; resulta idóneo buscar grupos homogeneos. Ello quiere decir que los grupos deben presentar las mismas características. Para este caso las variables homogeneizadas han sido edad, votación en las elecciones primarias y número de personas por casa. También se debe contar con un numero equitativo de hombres y mujeres, para no afectar nuestra data. Si se diera el caso que en el levantamiento de información hubieran por ejemplo, más mujeres que hombre, se puede tomar una muestra de la data que permita mantener grupos homogéneos.
## turnout promedio segun mensaje para el 2006:
tapply(social$primary2006, social$messages, mean)
## Civic Duty Control Hawthorne Neighbors
## 0.3145377 0.2966383 0.3223746 0.3779482
Para los tres casos se buscó tener un grupo homogéneo para que las probabilidades de que los resultados se hayan visto afecta esdos por factores externos disminuyan. En base a ello, se hallaron diferencias entre las tres variables introducidas vs. el grupo de control. Las diferencias vs el grupo de control son marcadas, sobre todo en el caso de “neighbors”. Por lo tanto podríamos concluir que el temor al juicio público,es la mejor estrategia para lograr nuestro objetivo, frente a las otras dos estrategias. Además, se puede afirmar que las intervenciones propuestas han sido exitosas para aumentar el número de votantes.
## turnout del control group
(ctTO=tapply(social$primary2006, social$messages, mean)[2])
## Control
## 0.2966383
Qué tanto se diferencian del grupo de control?
## control group turnout - mean de cada grupo
tapply(social$primary2006, social$messages, mean) -ctTO
## Civic Duty Control Hawthorne Neighbors
## 0.01789934 0.00000000 0.02573631 0.08130991
La variable de interés es reacción a los mensajes, pero el efecto de estos no debería ser tal en las otras variables:
tapply(social$yearofbirth, social$messages, mean)
## Civic Duty Control Hawthorne Neighbors
## 1956.341 1956.186 1956.295 1956.147
tapply(social$primary2004, social$messages, mean)
## Civic Duty Control Hawthorne Neighbors
## 0.3994453 0.4003388 0.4032300 0.4066647
tapply(social$hhsize, social$messages, mean)
## Civic Duty Control Hawthorne Neighbors
## 2.189126 2.183667 2.180138 2.187770
Efecto del experimento:
library(ggpubr)
## Loading required package: ggplot2
## Loading required package: magrittr
ggerrorplot(social, x = "messages", y = "primary2006",
desc_stat = "mean_se")
La data está completa, pero NO balanceada. Para balancearla data se puede seleccionar una muestra de nuestra data. Así,se podría seleccionar al azar un número específico de individuos para evaluar el análisis y homogeneizar la data.
minwage <- read.csv("minwage.csv")
Veamos sueldos de dos Estados en USA:
summary(minwage)
## chain location wageBefore wageAfter
## burgerking:149 centralNJ: 45 Min. :4.250 Min. :4.250
## kfc : 75 northNJ :146 1st Qu.:4.250 1st Qu.:5.050
## roys : 88 PA : 67 Median :4.500 Median :5.050
## wendys : 46 shoreNJ : 33 Mean :4.618 Mean :4.994
## southNJ : 67 3rd Qu.:4.987 3rd Qu.:5.050
## Max. :5.750 Max. :6.250
## fullBefore fullAfter partBefore partAfter
## Min. : 0.000 Min. : 0.000 Min. : 0.00 Min. : 0.00
## 1st Qu.: 2.125 1st Qu.: 2.000 1st Qu.:11.00 1st Qu.:11.00
## Median : 6.000 Median : 6.000 Median :16.25 Median :17.00
## Mean : 8.475 Mean : 8.362 Mean :18.75 Mean :18.69
## 3rd Qu.:12.000 3rd Qu.:12.000 3rd Qu.:25.00 3rd Qu.:25.00
## Max. :60.000 Max. :40.000 Max. :60.00 Max. :60.00
Queremos saber el efecto del aumento de ingresos en el empleo. Este se dió en un Estado (NJ) pero no en otro (PA). Se compara ambos Estados luego de la intervención realizada a fin de saber si los cambios obtenidos son producto de nuestra intervención, para este caso la intervención fue la normativa aplicada de alza del salario mínimo. En los casos en los cuales, por sus circunstancias particulares no se puede tener un grupo de control, lo que se debe buscar es un caso o escenario lo más similar posible para que cumpla esta función. Por ejemplo, escuelas públicas vs. escuelas privadas.
Es necesario que el grupo de control tenga características muy similares al grupo de estudio. Así, en este caso PA poseía características muy similares a NJ antes de la aprobación de la norma, por lo cual el desarrollo de ambos Estados sin la intervención de la nueva normativa podría ser el mismo o o lo más parecido posible.
# se respeto ley en NJ?
minwageBefore=5.05
minwageNJ <- subset(minwage, subset = (location != "PA"))
mean(minwageNJ$wageBefore < minwageBefore) # NJ before
## [1] 0.9106529
mean(minwageNJ$wageAfter < minwageBefore) # NJ after
## [1] 0.003436426
En PA no hay ley, pero veamos como se comporta antes y despues de que en NJ se dio ley:
minwagePA <- subset(minwage, subset = (location == "PA"))
mean(minwagePA$wageBefore < minwageBefore) # PA before
## [1] 0.9402985
mean(minwagePA$wageAfter < minwageBefore) # PA after
## [1] 0.9552239
Si la teoría dice que el aumento de sueldo genera desempleo, la diferencia de proporciones de empleo debe LUEGO ser menor (negativa) si se compara NJ con PA (donde no hubo aumento):
## proporcion de trabajadores a fulltime en NJ
minwageNJ$fullPropAfter <- minwageNJ$fullAfter /
(minwageNJ$fullAfter + minwageNJ$partAfter)
## proporcion de trabajadores a fulltime en PA
minwagePA$fullPropAfter <- minwagePA$fullAfter /
(minwagePA$fullAfter + minwagePA$partAfter)
## diferencias: si sale negativa conforma teoría!!!!
mean(minwageNJ$fullPropAfter) - mean(minwagePA$fullPropAfter)
## [1] 0.04811886
Este resultado dice que el empleo aumentó en NJ luego de subir los ingresos, o al menos no bajo.
Claro, ese aumento puedo haber sido provocado por otra razon: recuerden que estoy probando causalidad sin que controle el entorno.
Por lo que lo anterior es valido, solo si no hubiera algo mas que haya provocado la diferencia:
Para verificar, la diferencia a pesar de:
## proporcion full-time en NJ "antes":
minwageNJ$fullPropBefore <- minwageNJ$fullBefore /
(minwageNJ$fullBefore + minwageNJ$partBefore)
## Diference entre antes y despues del incremento para NJ:
NJdiff <- mean(minwageNJ$fullPropAfter) - mean(minwageNJ$fullPropBefore)
# diferencia DESPUES-ANTES en CASO observado
NJdiff
## [1] 0.02387474
## proporcion full-time en PA "antes":
minwagePA$fullPropBefore <- minwagePA$fullBefore/(minwagePA$fullBefore + minwagePA$partBefore)
## Diference entre antes y despues del incremento para PA:
PAdiff <- mean(minwagePA$fullPropAfter) -mean(minwagePA$fullPropBefore)
# diferencia DESPUES-ANTES en CASO de comparación
PAdiff
## [1] -0.03768357
Si es negativa, podemos afirmar que la teoría de la baja de empleo antes aumento de sueldo se debe mantener en este caso.
## difference-in-differences
NJdiff - PAdiff
## [1] 0.06155831
Esto es evaluación de impacto, donde hay grupo intervenido y de comparación. Recuerda: 1. No puedes hacer esta tecnica si NO convences que los grupos antes de la intervención son similares. 2. No puedes hacer esta tecnica si NO convences que lo que pase en un grupo no tiene que afectar al otro. 3. El grupo de comparación te sirve como contrafactual, pues éste no es observable.