Lo primero que vamos a hacer es importar una base de datos en formato SPSS. Trabajaremos com el estudio de Familia y Roles de Género 2012, realizado por el Instituto de Opinión Pública de la PUCP. Los archivos se puedes descargar desde este enlace haciendo clic con el botón derecho y escogiendo la opción de “abrir en otra pestaña”: IOP-PUCP 2012
Debe descargar (en formato original):
Y grabarlos en su directorio de trabajo del proyecto en RStudio que hayan creado
Podemos importar la base de datos de dos formas:
# Primero se necesita cargar el paquete foreign
library(foreign)
genero12 <- read.spss("IOP_1212_01_D.sav", to.data.frame = TRUE,
use.value.labels = FALSE)
table(genero12$SEXO)
##
## 1 2
## 589 614
genero12.e <- read.spss("IOP_1212_01_D.sav", to.data.frame = TRUE,
use.value.labels = TRUE)
table(genero12.e$SEXO)
##
## Masculino Femenino
## 589 614
names(genero12)
## [1] "NRO" "SEXO" "GEDAD" "EDAD" "P1" "P2" "P3A"
## [8] "P3B" "P3C" "P3D" "P4A" "P4B" "P4C" "P5"
## [15] "P6A" "P6B" "P6C" "P6D" "P6E" "P7A" "P7B"
## [22] "P8A" "P8B" "P9A" "P9B" "P9C" "P9D" "P9E"
## [29] "P9F" "P10" "P10A" "P11" "P12" "P13A" "P13B"
## [36] "P14" "P15" "P16" "P17" "P18A" "P18B" "P18C"
## [43] "P18D" "P19A" "P19B" "P20" "P21" "P22" "P22A"
## [50] "P23" "P24" "P25" "P26" "P27" "P28A" "P28B"
## [57] "P29" "P30" "P31A" "P31B" "P31C" "P31D" "P31E"
## [64] "P31F" "P32" "P33A" "P33B" "P33C" "P33D" "P34"
## [71] "P35A" "P35B" "P35C" "P35D" "P35E" "P35F" "P35G"
## [78] "P36" "P37" "P38" "P39" "P40" "P41" "P42"
## [85] "P43" "P44" "P44A" "P44B" "P44C" "P45A" "P45B"
## [92] "P46A" "P46B" "P47" "P48" "P48A" "P48B" "P48C"
## [99] "P49" "P50A" "P50B" "P50C" "P50D" "P50E" "P50F"
## [106] "P50G" "P50H" "P51A" "P51B" "P51C" "P51D" "P51E"
## [113] "P51F" "P51G" "P51H" "P51I" "P51J" "P51K" "P52A"
## [120] "P52B" "P52C" "P52D" "P52E" "P52F" "P52G" "P53A"
## [127] "P53B" "P53C" "P53D" "P53E" "P53F" "P53G" "P54A"
## [134] "P54B" "P54C" "P54D" "P54E" "P55A" "P55B" "P55C"
## [141] "P55D" "P55E" "P55F" "P56" "P57" "P58" "P59A"
## [148] "P59B" "P59C" "P59D" "P59E" "P59F" "P59G" "P59H"
## [155] "P59I" "P60A" "P60B" "P60C" "P60D" "P60E" "P60F"
## [162] "P61A" "P61B" "P61C" "P61D" "P61E" "P62A" "P62B"
## [169] "P62C" "P63A" "P63B" "P63C" "P64A" "P64B" "P64C"
## [176] "P64D" "P64E" "P64F" "P64G" "P64H" "P65A" "P65B"
## [183] "P65C" "P65D" "P65E" "P65F" "P65G" "P65H" "P66A"
## [190] "P66B" "P67A" "P67B" "P67C" "P68" "P69" "P70"
## [197] "P71" "P72" "P72A" "P73" "P73A" "P74" "P75"
## [204] "P76" "P77" "P78" "P79" "P80" "P81A" "P81B"
## [211] "P81C" "P81D" "P81E" "P82" "P87" "P89" "P90"
## [218] "P92" "Región" "Ambito" "DOMINIO" "NSEGrup" "sumaNSE" "NSE"
# De la batería de preguntas sobre acoso sexual callejero:
table(genero12$P64A)
##
## 1 2
## 320 866
table(genero12$P64A, exclude = NULL) # Para ver si hay casos con valores perdidos
##
## 1 2 <NA>
## 320 866 17
# Las horas dedicadas al trabajo doméstico
table(genero12$P19A)
##
## 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 18 20 21
## 76 10 30 29 36 13 48 89 28 7 38 1 22 1 148 20 5 22 16 116
## 22 23 24 25 26 28 30 34 35 36 40 42 43 44 45 48 49 50 56 60
## 1 2 11 10 1 107 19 1 65 5 3 61 2 2 1 8 16 2 49 2
## 63 64 66 70 72 77 80 81 84 91 100 112 140 168
## 7 3 1 27 6 1 1 1 22 1 2 1 1 4
# La primera fila y la primera columna:
genero12[1,1]
## [1] 1
# La priumera fila y la segunda columna:
genero12[1, 2]
## [1] 2
# Las 10 primeras filas y las tres primeras columnas:
as.matrix(genero12[c(1:10), c(1:3)])
## NRO SEXO GEDAD
## 1 1 2 3
## 2 2 1 3
## 3 3 2 3
## 4 4 2 1
## 5 5 2 1
## 6 6 1 1
## 7 7 1 3
## 8 8 1 2
## 9 9 1 3
## 10 10 2 3
ejemplo3 <- genero12[c(1:10), c(1:3)]
# Un grupo de filas y otro de columnas
as.matrix(genero12[c(1,4,10, 11:15), c(2:4, 10, 40)])
## SEXO GEDAD EDAD P3D P18A
## 1 2 3 55 2 2
## 4 2 1 20 2 2
## 10 2 3 53 3 3
## 11 2 2 43 3 8
## 12 1 3 68 2 3
## 13 2 1 27 3 2
## 14 1 1 21 4 3
## 15 1 2 42 2 2
Podemos seleccionar casos que cumplan con una condición:
mujeres <- genero12[genero12$SEXO == 2, ]
mujeres30m <- genero12[genero12$SEXO== 2 & genero12$EDAD < 30, ]
También podemos seleccionar un grupo de variables, por ejemplo la batería de preguntas sobre acoso sexual callejero:
v.acoso.c <- genero12[, c(173:180)]
hombres <- subset(genero12, SEXO == 1)
hombres.lima <- subset(genero12, SEXO == 1 & Ambito == 1)
mujeres.p <- subset(genero12, SEXO == 2 & Ambito != 1)
table(genero12$DOMINIO)
##
## 1 2 3 4 5
## 448 320 245 105 85
datos.sel <- subset(genero12, (DOMINIO == 3 | DOMINIO == 4) & EDAD > 30)
Vamos a crear 5 grupos de edad:
genero12$gedad1[genero12$EDAD < 25] <- 1
genero12$gedad1[genero12$EDAD > 24 & genero12$EDAD < 35] <- 2
genero12$gedad1[genero12$EDAD > 34 & genero12$EDAD < 45] <- 3
genero12$gedad1[genero12$EDAD > 44 & genero12$EDAD < 55] <- 4
genero12$gedad1[genero12$EDAD > 54] <- 5
table(genero12$gedad1)
##
## 1 2 3 4 5
## 256 284 255 199 209
Ahora podemos etiquetas los valores
genero12$gedad1 <- factor(genero12$gedad1, labels = c("De 18 a 24", "25 a 34",
"35 a 44", "45 a 54",
"55 a más"))
table(genero12$gedad1)
##
## De 18 a 24 25 a 34 35 a 44 45 a 54 55 a más
## 256 284 255 199 209
library(car)
## Loading required package: carData
genero12$gedad2 <- recode(genero12$EDAD, "lo:24 = 1; 25:34 = 2;
35:44 = 3; 45:54 = 4; 55:hi = 5")
table(genero12$gedad2)
##
## 1 2 3 4 5
## 256 284 255 199 209
genero12$gedad2 <- factor(genero12$gedad2, labels = c("De 18 a 24", "25 a 34",
"35 a 44", "45 a 54", "55 a más"))
table(genero12$gedad2)
##
## De 18 a 24 25 a 34 35 a 44 45 a 54 55 a más
## 256 284 255 199 209
## Tabla en porcentajes:
prop.table(table(genero12$gedad2))*100
##
## De 18 a 24 25 a 34 35 a 44 45 a 54 55 a más
## 21.28013 23.60765 21.19701 16.54198 17.37323
Vamos a generar una variable que nos indique si las personas han experimentado alguna (cualquiera) de las situaciones de acoso sexual callejero descritas en las variables P64A hasta la P64H.
Para eso vamos a convertir todas las respuestas NO y NS/NR en cero, luego sumaremos todas las variables recodificadas. Finalmente, en la variable sumada, haremos otro cambio: todos los valores iguales o superiores a 1, los cambiaremos a 1.
Recodificar variables por variable. La función recode se encuentra también en otro paquete, llamado dplyr, para especificar que queremos usar la función recode el paquete car debemos escribir la función como se indica a continuación:
table(genero12$P64A, exclude = NULL)
##
## 1 2 <NA>
## 320 866 17
p64a.r <- car::recode(genero12$P64A, "2=0; NA = 0")
table(p64a.r)
## p64a.r
## 0 1
## 883 320
De ahí procedemos a recodificar todas las otras variables:
p64b.r <- car::recode(genero12$P64B, "2=0; NA = 0")
p64c.r <- car::recode(genero12$P64C, "2=0; NA = 0")
p64d.r <- car::recode(genero12$P64D, "2=0; NA = 0")
p64e.r <- car::recode(genero12$P64E, "2=0; NA = 0")
p64f.r <- car::recode(genero12$P64F, "2=0; NA = 0")
p64g.r <- car::recode(genero12$P64G, "2=0; NA = 0")
p64h.r <- car::recode(genero12$P64H, "2=0; NA = 0")
Luego sumamos las variables:
i.acoso <- p64a.r + p64b.r + p64c.r + p64d.r + p64e.r + p64f.r + p64g.r +
p64h.r
table(i.acoso)
## i.acoso
## 0 1 2 3 4 5 6 7 8
## 693 116 106 115 75 47 25 17 9
i.acoso[i.acoso > 1] <- 1
table(i.acoso)
## i.acoso
## 0 1
## 693 510
Finalmente adjuntamos la variable creada a nuestro data frame:
genero12$i.acoso <- i.acoso
Podemos usar otras funciones más avanzadas para recodificar variables en bloque. Primero creamos un objeto con las variables con las que vamos a trabajar:
names(genero12)
## [1] "NRO" "SEXO" "GEDAD" "EDAD" "P1" "P2" "P3A"
## [8] "P3B" "P3C" "P3D" "P4A" "P4B" "P4C" "P5"
## [15] "P6A" "P6B" "P6C" "P6D" "P6E" "P7A" "P7B"
## [22] "P8A" "P8B" "P9A" "P9B" "P9C" "P9D" "P9E"
## [29] "P9F" "P10" "P10A" "P11" "P12" "P13A" "P13B"
## [36] "P14" "P15" "P16" "P17" "P18A" "P18B" "P18C"
## [43] "P18D" "P19A" "P19B" "P20" "P21" "P22" "P22A"
## [50] "P23" "P24" "P25" "P26" "P27" "P28A" "P28B"
## [57] "P29" "P30" "P31A" "P31B" "P31C" "P31D" "P31E"
## [64] "P31F" "P32" "P33A" "P33B" "P33C" "P33D" "P34"
## [71] "P35A" "P35B" "P35C" "P35D" "P35E" "P35F" "P35G"
## [78] "P36" "P37" "P38" "P39" "P40" "P41" "P42"
## [85] "P43" "P44" "P44A" "P44B" "P44C" "P45A" "P45B"
## [92] "P46A" "P46B" "P47" "P48" "P48A" "P48B" "P48C"
## [99] "P49" "P50A" "P50B" "P50C" "P50D" "P50E" "P50F"
## [106] "P50G" "P50H" "P51A" "P51B" "P51C" "P51D" "P51E"
## [113] "P51F" "P51G" "P51H" "P51I" "P51J" "P51K" "P52A"
## [120] "P52B" "P52C" "P52D" "P52E" "P52F" "P52G" "P53A"
## [127] "P53B" "P53C" "P53D" "P53E" "P53F" "P53G" "P54A"
## [134] "P54B" "P54C" "P54D" "P54E" "P55A" "P55B" "P55C"
## [141] "P55D" "P55E" "P55F" "P56" "P57" "P58" "P59A"
## [148] "P59B" "P59C" "P59D" "P59E" "P59F" "P59G" "P59H"
## [155] "P59I" "P60A" "P60B" "P60C" "P60D" "P60E" "P60F"
## [162] "P61A" "P61B" "P61C" "P61D" "P61E" "P62A" "P62B"
## [169] "P62C" "P63A" "P63B" "P63C" "P64A" "P64B" "P64C"
## [176] "P64D" "P64E" "P64F" "P64G" "P64H" "P65A" "P65B"
## [183] "P65C" "P65D" "P65E" "P65F" "P65G" "P65H" "P66A"
## [190] "P66B" "P67A" "P67B" "P67C" "P68" "P69" "P70"
## [197] "P71" "P72" "P72A" "P73" "P73A" "P74" "P75"
## [204] "P76" "P77" "P78" "P79" "P80" "P81A" "P81B"
## [211] "P81C" "P81D" "P81E" "P82" "P87" "P89" "P90"
## [218] "P92" "Región" "Ambito" "DOMINIO" "NSEGrup" "sumaNSE" "NSE"
## [225] "gedad1" "gedad2" "i.acoso"
Las variables que forman parte del indice de acoso son las que están entre las columnas 173 a 180, con ellas creamos un data frame aparte:
v.acoso.c <- genero12[, c(173:180)]
Vamos a emplear funciones que están en el paquete dplyr para modificar el data frame generado:
library(dplyr)
v.acoso.c.2 <- v.acoso.c %>%
mutate_all(~recode(., '2'=0, .missing=0))
Ahora sumamos los valores de cada fila:
i.acoso2 <- rowSums(v.acoso.c.2)
i.acoso2[i.acoso2 > 1] <- 1
genero12$i.acoso2 <- i.acoso2
Comparamos los resultados de ambos métodos:
table(genero12$i.acoso)
##
## 0 1
## 693 510
table(genero12$i.acoso2)
##
## 0 1
## 693 510