Antes de empezar a hacer análisis univariado o bivariado propiamente dicho, lo que debes hacer es lo siguiente:
veremos cada uno de ellos en detalle:
Para cargar la data, corremos el siguiente código:
library(haven)
## Warning: package 'haven' was built under R version 3.4.4
fileToRead=file.path("data","PeruLAPOP2016.dta")
LAPOP2016=read_dta(fileToRead)
LAPOP2016=as.data.frame(LAPOP2016)
Con haven se hable archivos de STATA. Para abrir archivos de SPSS, usamos foreign.
ATENCIÓN: no olvidar que siempre debo volver un data frame la data cargada.
Para explorar las dimensiones de mi base de datos (números de filas y de columnas), corremos el siguiente código:
dim(LAPOP2016) #dimensiones: primero número de FILAS y luego número de columnas
## [1] 2647 188
nrow(LAPOP2016) #número de CASOS
## [1] 2647
ncol(LAPOP2016) #número de variables
## [1] 188
Para saber qué variables tenemos, usamos el siguiente código:
names(LAPOP2016)
## [1] "pais" "sobremuestra" "idnum" "uniq_id"
## [5] "upm" "prov" "municipio" "cluster"
## [9] "ur" "tamano" "idiomaq" "fecha"
## [13] "wt" "estratopri" "estratosec" "q2"
## [17] "q1" "perprov" "ls3" "a4"
## [21] "soct2" "idio2" "np1" "sgl1"
## [25] "cp6" "cp7" "cp8" "cp13"
## [29] "cp20" "it1" "l1" "prot3"
## [33] "jc10" "jc13" "jc15a" "vic1ext"
## [37] "vic1exta" "vic2new" "aoj11" "aoj12"
## [41] "b1" "b2" "b3" "b4"
## [45] "b6" "b43" "b12" "b13"
## [49] "b18" "b21" "b21a" "b32"
## [53] "b37" "b47a" "m1" "m2"
## [57] "sd2new2" "sd3new2" "sd6new2" "infrax"
## [61] "infra3" "ros1" "ros4" "ing4"
## [65] "eff1" "eff2" "aoj22new" "media3"
## [69] "media4" "exp_a" "dst1b" "drk1"
## [73] "env1c" "env2b" "envp3l" "envp3l_o"
## [77] "envp3n" "envp3n_o" "envp41" "envp42"
## [81] "pn4" "w14a" "e5" "e15"
## [85] "e16" "d1" "d2" "d3"
## [89] "d4" "d5" "d6" "ivv3"
## [93] "lib1" "lib2b" "lib2c" "lib4"
## [97] "exc2" "exc6" "exc20" "exc11"
## [101] "exc13" "exc14" "exc15" "exc16"
## [105] "exc18" "exc7" "exc7new" "vb1"
## [109] "vb2" "vb3n" "vb10" "vb11"
## [113] "pol1" "vb20" "dis7a" "dis8a"
## [117] "dis9a" "dis10a" "dis11a" "for5"
## [121] "mil10a" "mil10e" "ccq1" "ccq2"
## [125] "ccq3" "ccq4" "ie1" "ie2"
## [129] "ie3" "ie6" "ie9" "ie10"
## [133] "envp8" "wf1" "cct1b" "ed"
## [137] "ed2" "q5a" "q5b" "q3c"
## [141] "ocup4a" "ocup1a" "q10g" "q10new"
## [145] "q14" "q10d" "q10e" "q11n"
## [149] "q12c" "q12bn" "q12" "q12m"
## [153] "q12f" "vac1" "etid" "iiet1"
## [157] "iiet2" "iiet3" "www1" "gi0"
## [161] "pr1" "r3" "r4" "r4a"
## [165] "r5" "r6" "r7" "r8"
## [169] "r12" "r14" "r15" "r18"
## [173] "r1" "r16" "colorr" "conocim"
## [177] "iarea1" "iarea2" "iarea3" "iarea4"
## [181] "iarea6" "iarea7" "sexi" "colori"
## [185] "srvyrid" "nationality" "formatq" "sex"
Es sugerible [para ejemplo en particular], trabajar con el cuestionario de esta encuesta para saber a qué se refieren los diferentes nombres de las variables.
Trabajemos con la variable satisfacción con la vida (ls3).
Obtengamos la estructura de la variable:
str(LAPOP2016$ls3)
## Class 'labelled' atomic [1:2647] 1 3 2 NA 1 2 4 2 2 2 ...
## ..- attr(*, "label")= chr "Life Satisfaction"
## ..- attr(*, "format.stata")= chr "%36.0f"
## ..- attr(*, "labels")= Named num [1:6] 1 2 3 4 NA NA
## .. ..- attr(*, "names")= chr [1:6] "Very Satisfied" "Somewhat Satisfied" "Somewhat Dissatisfied" "Very Dissatisfied" ...
Nosotros sabemos que nuestra variable es ordinal, pero R no la reconoce así. Tenemos que formatearla y decirle a R que la reconozca como factor ordenado (es decir, como variable ordinal). Para ello corro el siguiente código:
LAPOP2016$ls3=factor(LAPOP2016$ls3,
levels=c(1:4),
labels=c("Muy satisfecho","Algo satisfecho","Algo insatisfecho","Muy insatisfecho"),
ordered=T)
Una vez hecho ello, verifico la nueva estructura:
str(LAPOP2016$ls3)
## Ord.factor w/ 4 levels "Muy satisfecho"<..: 1 3 2 NA 1 2 4 2 2 2 ...
Con lo cual, ya queda formateada mi variable y lista para el análisis.
Una vez hechos estos tres primeros pasos iniciales, ahora sí podemos empezar con el ANÁLISIS EXPLORATORIO.
Veamos primero el caso UNIVARIADO.
Sigamos trabajando con la variable satisfacción con la vida (ls3).
Al ser una variable categórica, podemos pedir una tabla de frecuencias. Para ello corro el siguiente código:
table(LAPOP2016$ls3)
##
## Muy satisfecho Algo satisfecho Algo insatisfecho Muy insatisfecho
## 1019 1182 299 91
Si deseamos, podemos obtener una tabla de propociones con el siguiente código:
prop.table(table(LAPOP2016$ls3))
##
## Muy satisfecho Algo satisfecho Algo insatisfecho Muy insatisfecho
## 0.39328445 0.45619452 0.11539946 0.03512157
#OJO: notar que saco prop.table de table(LAPOP2'16$ls3). No hago prop.table(LAPOP2016$ls3) directamente
Si deseo que en vez de proporciones aparezcan porcentajes, hago lo siguiente:
prop.table(table(LAPOP2016$ls3))*100
##
## Muy satisfecho Algo satisfecho Algo insatisfecho Muy insatisfecho
## 39.328445 45.619452 11.539946 3.512157
Si deseo esta tabla de porcentajes en un gráfico de barras, hago lo siguiente:
toPlot=prop.table(table(LAPOP2016$ls3))*100
barplot(toPlot,col="purple",
xlab="¿Qué tan satisfecho(a) está Ud. con su vida?",
ylab="Porcentaje de encuestadxs",
main="Satisfacción con la vida",ylim=c(0,50))
Ahora podemos sacar los estadísticos de tendencia central. Al tratarse de una variable ordinal, puedo sacar la MODA y la MEDIANA. Lo hacemos con los siguientes códigos:
library(DescTools)
## Warning: package 'DescTools' was built under R version 3.4.4
Mode(LAPOP2016$ls3)
## [1] "Algo satisfecho"
Median(LAPOP2016$ls3, na.rm=T) #OJO: es VITAL poner na.rm=T para que NO TOME EN CUENTA LOS VALORES PERDIDOS y sí puedas obtener el valor de la mediana
## [1] Algo satisfecho
## 4 Levels: Muy satisfecho < Algo satisfecho < ... < Muy insatisfecho
vamos que la moda y le mediana coinciden.
Finalmente, sacamos un boxplot. Pero esta vez usamos ggplot. Este paquete requiere, para que el boxplot salga, que la variable sea convertida en numérica. Creemos una nueva variable a partir de nuestra variable ordinal original, sobre la que aplicamos ggplot:
LAPOP2016$ls3_2=as.numeric(LAPOP2016$ls3)
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 3.4.4
ggplot(LAPOP2016, aes(x=1, y=ls3_2)) + geom_boxplot() + coord_flip()
## Warning: Removed 56 rows containing non-finite values (stat_boxplot).