Carguemos los datos de “infoPeru”. Como los datos están en un archivo de EXCEL, debemos llamar a las funciones de openxlsx (esta biblioteca de funciones debe estar previamente instalada):
library(openxlsx)
dataPeru=read.xlsx("infoPeru.xlsx",2)
El objeto dataPeru tiene los datos de la segunda hoja (la primera tenia el diccionario de datos).
Esta data es observacional, pues no ha sido producida en un experimento (ni cuasi-experimento).
Confirmemos que variables tenemos:
names(dataPeru)
## [1] "IDDPTO" "IDPROV" "NOMBDEP"
## [4] "NOMBPROV" "vida" "educacion"
## [7] "permanenciaescolar" "ingresofamilia" "identidad"
## [10] "salud" "asistenciaedu" "saneamiento"
## [13] "electrificacion" "costa" "capital"
## [16] "tamano" "fecundidad" "desnutricion"
## [19] "densidadpob" "mortalidad" "analfa"
## [22] "analfa1" "analfa2" "analfa3"
## [25] "analfa4" "pob" "pob_ur"
## [28] "pob_rural" "pob_h" "pob_m"
Se dice que tenemos diferencias entre grupos cuando queremos saber si el valor promedio de cada grupo difiere de los demás.
# explorando
table(dataPeru$capital)
##
## NO SI
## 166 26
De lo anterior, vemos que tenemos 26 provincias donde está la ciudad capital del Departamento.
summary(dataPeru$vida)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 64.22 70.14 71.71 71.61 73.17 76.67
En este caso la mediana (median) nos indica que a nivel de todas las provincias del Perú, el 50% de las provincias tienen una esperanza de vida promedio de 71.6 años.
# media de esperanza de vida por grupo:
aggregate(vida ~ capital, data=dataPeru,median)
## capital vida
## 1 NO 71.37
## 2 SI 72.86
Las “diferencias” que vemos entre la esperanza de vida entre las provincias donde esta la ciudad capital y las demas nos parece indicar que la esperanza de vida promedio es mayor en las primeras.
Una prueba estadistica para saber si tales diferencias son significativas nos la ofrece la prueba de wilcoxon:
# si obtienes "TRUE", los valores medios serán diferentes:
wilcox.test(vida ~ capital,
data=dataPeru)$p.value<=0.05
## [1] TRUE
Esta prueba nos hace pensar que en efecto los valores medios serían diferentes.
library(ggpubr)
## Loading required package: ggplot2
## Loading required package: magrittr
ggerrorplot(dataPeru, x = "capital",
y = "vida",
desc_stat = "median_iqr"
)
La prueba de Wilcox sugiere que las medianas son diferentes, pero la gráfica sugiere lo contrario. Veamos más detalles:
library(ggpubr)
ggerrorplot(dataPeru, x = "capital",
y = "vida",
desc_stat = "median_iqr",
add='dotplot'
)
## `stat_bindot()` using `bins = 30`. Pick better value with `binwidth`.
Sucede que la mayor cantidad de provincias en el NO puede ‘confundir’ al test; sobre todo por que tiene un grupo grande de valores bajos. Jugando a lo sano, deberíamos seguir al gráfico.
Podemos hacer este análisis si tenemos una variable categorica con más de dos valores, por ejemplo:
table(dataPeru$tamano)
##
## 1 2 3 4 5
## 68 63 44 16 1
Ese es el tamaño de la provincia segun poblacion. Ahi está Lima, pero mejor analizamos sin ella:
dataPeru2=dataPeru[dataPeru$tamano<5,]
Entonces:
aggregate(vida ~ tamano, data=dataPeru2,median)
## tamano vida
## 1 1 71.16
## 2 2 71.10
## 3 3 72.77
## 4 4 74.03
Las medianas son diferentes, queremos saber si esa diferencia es significativa:
# si obtienes "TRUE", al menos un val medio serán diferente a los demás:
kruskal.test(vida ~ tamano,
data=dataPeru2)$p.value<=0.05
## [1] TRUE
ggerrorplot(dataPeru2, x = "tamano",
y = "vida",
desc_stat = "median_iqr",
add='dotplot'
)
## `stat_bindot()` using `bins = 30`. Pick better value with `binwidth`.
Del gráfico podríamos concluir que el cuarto grupo podría diferir de los dos primeros; y que los dos primeros son prácticamente idénticos.
Esto utilizamos para ver si ha habido cambios cuando se ha medido en repetidas veces a las unidades de analisis. Carguemos otra data sobre paises del mundo:
filename="dataMundo.csv"
dataM=read.csv(filename,stringsAsFactors =F)
verificando tipos:
names(dataM)
## [1] "Country" "gasto2000" "gasto2005" "gasto2010"
## [5] "drop2000" "drop2005" "drop2010" "drop2015"
## [9] "incomeIneq2017" "pisaRead2015" "pisaMath2015" "pisaSci2015"
En este caso se ha producido varias veces, en cada país, un indicador de abando escolar y de gasto.
Veamos los de abandono:
# esto solo guarda los nombres de esas columnas
varsRepeated=c('drop2000','drop2005','drop2010','drop2015')
Calculemos los estadísticos de cada caso:
summary(dataM[,varsRepeated])
## drop2000 drop2005 drop2010 drop2015
## Min. : 0.1 Min. : 0.10 Min. : 0.10 Min. : 0.20
## 1st Qu.: 2.1 1st Qu.: 3.10 1st Qu.: 2.15 1st Qu.: 1.60
## Median : 8.9 Median :11.10 Median : 6.20 Median : 5.20
## Mean :15.5 Mean :18.38 Mean :15.59 Mean :12.64
## 3rd Qu.:24.1 3rd Qu.:29.80 3rd Qu.:25.00 3rd Qu.:18.95
## Max. :69.9 Max. :68.90 Max. :75.20 Max. :64.90
## NA's :88 NA's :82 NA's :84 NA's :112
Vemos que las medianas son diferentes. Veamos que dice el test para este caso:
# si obtienes "TRUE", al menos un val medio serán diferente a los demás:
friedman.test(as.matrix(dataM[,varsRepeated]))$p.value
## [1] 0.03092354
Veamos que nos dice la gráfica:
ggerrorplot(dataM, merge=T,
y = varsRepeated,
desc_stat = "median_iqr",
add='dotplot'
)
## `stat_bindot()` using `bins = 30`. Pick better value with `binwidth`.
## Warning: Removed 366 rows containing non-finite values (stat_bindot).
## Warning: Removed 366 rows containing non-finite values (stat_summary).
Nuevamente, el gráfico corregiría al test, los valores medianos no difieren.