Laboratorio 3.
Contenido:
En este laboratorio abordaremos los siguientes temas:
Las librerías
sjmiscysjlabelled.¿Qué significa usar labels?
Referencias:
1. Las librerías sjmisc y sjlabelled.
Las librerías sjmisc y sjlabelled son librerías que nos permiten realizar diversas funciones con bases de datos. Se usan, especialmente, para trabajar con datos de encuestas.
El paquete sjmisc presenta una ventaja comparativa al poder trabajar bien con datos etiquetados, debido a que ofrece opciones para transformación de datos con estas características.
Para el ejemplo de hoy, utilizaremos los datos de la encuesta efc, la cual contiene información sobre la situación de los cuidadores de adultos mayores en Europa (proyecto EUROFAMCARE).
Instalación.
Las librerías se instalan como cualquier otro paquete de R.
Datos labeleados
## c12hour e15relat e16sex e17age e42dep c82cop1 c83cop2 c84cop3 c85cop4
## 1 16 2 2 83 3 3 2 2 2
## 2 148 2 2 88 3 3 3 3 3
## 3 70 1 2 82 3 2 2 1 4
## 4 168 1 2 67 4 4 1 3 1
## 5 168 2 2 84 4 3 2 1 2
## 6 16 2 2 85 4 2 2 3 3
## c86cop5 c87cop6 c88cop7 c89cop8 c90cop9 c160age c161sex c172code
## 1 1 1 2 3 3 56 2 2
## 2 4 1 3 2 2 54 2 2
## 3 1 1 1 4 3 80 1 1
## 4 1 1 1 2 4 69 1 2
## 5 2 2 1 4 4 47 2 2
## 6 3 2 2 1 1 56 1 2
## c175empl barthtot neg_c_7 pos_v_4 quol_5 resttotn tot_sc_e n4pstu
## 1 1 75 12 12 14 0 4 0
## 2 1 75 20 11 10 4 0 0
## 3 0 35 11 13 7 0 1 2
## 4 0 0 10 15 12 2 0 3
## 5 0 25 12 15 19 2 1 2
## 6 1 60 19 9 8 1 3 2
## nur_pst
## 1 NA
## 2 NA
## 3 2
## 4 3
## 5 2
## 6 2
## [1] "c12hour" "e15relat" "e16sex" "e17age" "e42dep" "c82cop1"
## [7] "c83cop2" "c84cop3" "c85cop4" "c86cop5" "c87cop6" "c88cop7"
## [13] "c89cop8" "c90cop9" "c160age" "c161sex" "c172code" "c175empl"
## [19] "barthtot" "neg_c_7" "pos_v_4" "quol_5" "resttotn" "tot_sc_e"
## [25] "n4pstu" "nur_pst"
# Ahora la vemos en el View
# View(efc)
# Ves la diferencia?
# Obteniendo las etiquetas:
library(sjlabelled)
# Funcion para obtener las etiquetas de una variable
sjlabelled::get_labels(efc$e42dep)## [1] "independent" "slightly dependent" "moderately dependent"
## [4] "severely dependent"
# Funcion para obtener las etiquetas de todas las variables del data.frame
sjlabelled::get_label(efc)## c12hour
## "average number of hours of care per week"
## e15relat
## "relationship to elder"
## e16sex
## "elder's gender"
## e17age
## "elder' age"
## e42dep
## "elder's dependency"
## c82cop1
## "do you feel you cope well as caregiver?"
## c83cop2
## "do you find caregiving too demanding?"
## c84cop3
## "does caregiving cause difficulties in your relationship with your friends?"
## c85cop4
## "does caregiving have negative effect on your physical health?"
## c86cop5
## "does caregiving cause difficulties in your relationship with your family?"
## c87cop6
## "does caregiving cause financial difficulties?"
## c88cop7
## "do you feel trapped in your role as caregiver?"
## c89cop8
## "do you feel supported by friends/neighbours?"
## c90cop9
## "do you feel caregiving worthwhile?"
## c160age
## "carer' age"
## c161sex
## "carer's gender"
## c172code
## "carer's level of education"
## c175empl
## "are you currently employed?"
## barthtot
## "Total score BARTHEL INDEX"
## neg_c_7
## "Negative impact with 7 items"
## pos_v_4
## "Positive value with 4 items"
## quol_5
## "Quality of life 5 items"
## resttotn
## "Job restrictions"
## tot_sc_e
## "Services for elderly"
## n4pstu
## "Care level"
## nur_pst
## "Care level"
## [1] 1 2 3 4
Funciones
Imprimir frecuencias con etiquetas.
Qué contiene esta base de datos?
Lo primero que nos podría interesar es probablemente la distribución del sexo. Podemos checar las frecuencias de los datos etiquetados con la función frq. Esta función requiere un vector o data.frame como entrada e imprime la etiqueta de la variable en la primera linea, seguida de una tabla de frecuencia con valores, etiquetas, conteos y porcentajes de los datos del vector.
##
## carer's gender (x) <numeric>
## # total N=908 valid N=901 mean=1.76 sd=0.43
##
## val label frq raw.prc valid.prc cum.prc
## 1 Male 215 23.68 23.86 23.86
## 2 Female 686 75.55 76.14 100.00
## NA <NA> 7 0.77 NA NA
Las mujeres son el 75.55 % de la muestra.
Encontrando variables en un data.frame
Para encontrar variables en un data.frame etiquetado, utilizamos la función find_var():
# Esta función nos encuentra la columna con la palabra especificada
find_var(efc, "dependency", out = "table")## col.nr var.name var.label
## 1 5 e42dep elder's dependency
# Esta función nos da la columna con la palabra especificada
find_var(efc, "dependency", out = "df") %>% head()## e42dep
## 1 3
## 2 3
## 3 3
## 4 4
## 5 4
## 6 4
# Esta función nos encuentra el numero de la columna con la palabra especificada
find_var(efc, "dependency", out = "index")## e42dep
## 5
Tablas cruzadas.
El paquete nos permite cruzar dos variables para ver la relación que hay entre ellas. Por ejemplo, a partir de cruzar la variable de sexo con la de dependencia del cuidado respecto al cuidador.
# Tabla que muestra la distribución de personas con cuidados con respecto al sexo del cuidador.
flat_table(efc, e42dep, c161sex)## c161sex Male Female
## e42dep
## independent 18 48
## slightly dependent 54 170
## moderately dependent 80 226
## severely dependent 63 241
## c161sex Male Female
## e42dep
## independent 8.37 7.01
## slightly dependent 25.12 24.82
## moderately dependent 37.21 32.99
## severely dependent 29.30 35.18
Recodificando variables.
Vamos a generar una nueva variable llamada “carga” a partir de la variable neg_c_7 (Impacto negativo con 7 items).
Para esto, vamos a utilizar la función de recodificación, rec, para asignar etiquetas a los valores numéricos de una variable.
## [1] "Negative impact with 7 items"
## NULL
## [1] 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 27 28
##
## Negative impact with 7 items (x) <numeric>
## # total N=908 valid N=892 mean=11.85 sd=3.86
##
## val frq raw.prc valid.prc cum.prc
## 7 75 8.26 8.41 8.41
## 8 99 10.90 11.10 19.51
## 9 106 11.67 11.88 31.39
## 10 120 13.22 13.45 44.84
## 11 96 10.57 10.76 55.61
## 12 85 9.36 9.53 65.13
## 13 64 7.05 7.17 72.31
## 14 54 5.95 6.05 78.36
## 15 45 4.96 5.04 83.41
## 16 30 3.30 3.36 86.77
## 17 35 3.85 3.92 90.70
## 18 26 2.86 2.91 93.61
## 19 16 1.76 1.79 95.40
## 20 16 1.76 1.79 97.20
## 21 2 0.22 0.22 97.42
## 22 7 0.77 0.78 98.21
## 23 4 0.44 0.45 98.65
## 24 3 0.33 0.34 98.99
## 25 6 0.66 0.67 99.66
## 27 1 0.11 0.11 99.78
## 28 2 0.22 0.22 100.00
## NA 16 1.76 NA NA
# generamos la nueva variable, con rec
efc$carga = rec(efc$neg_c_7,
rec = c("min:9=1 [baja]; 10:12=2[moderada]; 13:max=3[alta]; else=NA"),
var.label = "Carga subjetiva",
as.num = FALSE # Para que nos de un factor
)
# Obtenemos etiquetas
get_labels(efc$carga)## [1] "baja" "moderada" "alta"
## [1] 1 2 3
##
## Carga subjetiva (x) <categorical>
## # total N=908 valid N=892 mean=2.03 sd=0.81
##
## val label frq raw.prc valid.prc cum.prc
## 1 baja 280 30.84 31.39 31.39
## 2 moderada 301 33.15 33.74 65.13
## 3 alta 311 34.25 34.87 100.00
## NA <NA> 16 1.76 NA NA