Professional Documents
Culture Documents
Una de les qüestions que hem vist en anteriors pràctiques és que en algunes variables apareixen
valors que no són analitzables, com pot ser el 98 i 99, en variables que van del 0 al 10, o les
etiquetes No ho sap o No contesta, en variables de factor. En la major part de les anàlisis, aquests
valors han de ser exclosos, en tant que no tenen un significat substantiu en sí mateixos.
Especialment greu és el cas de les variables numèriques, on no tenir en compte que han de ser
exclosos comporta errors molt greus en càlculs posteriors.
Habitualment el què es fa és excloure’ls de les anàlisis, mitjançant la seva reconversió a valors
perduts o, en llenguatge de R, a valors NA (de l’anglès Not Available). Els valors NA es
corresponen a un "forat" d’informació de la matriu i són caselles que estan en blanc. Abans, o
en el moment d’eliminar-los, és convenient, per si mai tenim la necessitat d’analitzar aquests
valors diferenciant entre cada tipus de no-resposta ("no ho sap", "no contesta" o "no
pertinent"), duplicar la variable per tal de no perdre la informació original.
Per tant, la forma de tractar a R aquests valors és (1) crear una còpia de la variable original, (2)
codificar les no-respostes com a NA, i (3) fer les anàlisis corresponents seleccionant la versió de
la variable que interessi en cada moment, amb o sense NA, o combinant la informació
d’ambdues.
Encara que hi ha diferents maneres de transformar una variable per tal de reconvertir els valors
no vàlids a NA, aquí farem servir una instrucció que també ens servirà per altres qüestions. Es
tracta de la funció recode, que es troba en el paquet car. Per tant, abans de començar comprova
que tens instal·lat el paquet car, i si no, instal·la’l. Per això fes:
library(car) # de la biblioteca de paquets d’R, carrega l’anomenat car
Si la resposta a aquesta instrucció és que no s'ha pogut trobar el paquet, caldrà que l'instal·lis i
després el carreguis:
install.packages("car") # instal·la el paquet car
1
Ajenjo Cosp, Marc (2021) Pràctiques en RStudio de Mètodes Quantitatius per a la Recerca en
Criminologia. Pràctica 4. Departament de Sociologia, UAB; 33:45
33
MÈTODES QUANTITATIUS DE RECERCA EN CRIMINOLOGIA CURS 2021-2022
PRÀCTIQUES EN RSTUDIO PRÀCTICA 4. LA TRANSFORMACIÓ SIMPLE DE VARIABLES
Recorda! És convenient que les variables que hem d’analitzar siguin sempre factor o
numèriques.
On, en primer lloc, veiem que es tracta d’una variable numèrica; en el summary veiem que el
valor més alt és un 99, un valor que no és vàlid; mentre que en les freqüències observem que hi
ha 24 persones (21+3) que no han respost la pregunta i que, per tant, hauran de ser eliminades
abans de fer les anàlisis corresponents. Per passar els valors 98 i 99 a perduts, farem servir la
següent funció:
dd$PROB_SEGUR_VANDAL2<-car::recode(dd$PROB_SEGUR_VANDAL,
' 98:99=NA ',
as.factor=F)
34
MÈTODES QUANTITATIUS DE RECERCA EN CRIMINOLOGIA CURS 2021-2022
PRÀCTIQUES EN RSTUDIO PRÀCTICA 4. LA TRANSFORMACIÓ SIMPLE DE VARIABLES
● as.factor=F Amb aquest argument ens assegurem que no generi una variable de factor,
sinó numèrica.
Un cop ho hem fet, si demanem el tipus de variable, un summary i unes freqüències de la nova
variable, observarem que segueix sent una variable numèrica, i que només conté valors vàlids
(de 0 a 10), a banda de 24 NA:
Per tant, en termes generals, per reconvertir valors a NA en una variable numèrica farem servir:
var_nova<-car::recode(var_vella, ' valors=NA ', as.factor=F)
Observa que... en generar NA en la taula de freqüències apareix una nova informació que
anomena Valid Percent. Es tracta dels percentatges excloent els valors NA. Així la columna
Percent es correspon als percentatges respecte del total, 4.734, mentre que la columna Valid
Percent correspon al percentatges sobre les respostes vàlides, 4.710 (4.734-24).
En aquest cas tenim 48 persones que no han contestat i que hem de passar a NA, i una categoria
–Altres– que conté 0 casos i que també podem eliminar. Per fer els canvis corresponents farem
servir:
35
MÈTODES QUANTITATIUS DE RECERCA EN CRIMINOLOGIA CURS 2021-2022
PRÀCTIQUES EN RSTUDIO PRÀCTICA 4. LA TRANSFORMACIÓ SIMPLE DE VARIABLES
dd$ESTUDIS2<-car::recode(dd$ESTUDIS,
' "No contesta "=NA ',
as.factor=T,
levels=c("Menys Obligat", "Obligat",
"Secund gener", "Secund prof",
"Univers"))
● as.factor=T En aquest cas volem que la variable resultant (ESTUDIS2) sigui un factor.
● levels= c("Menys Obligat", "Obligat", "Secund gener", "Secund prof",
"Univers") Tot i que aquesta part no és essencial, sí que és convenient escriure-la. En
cas que no ho féssim, la variable final tindria les mateixes categories que l’original, però
ordenades alfabèticament. Així, observa que aquí hem exclòs la categoria Altres, que no
tenia cap individu, i hem escrit la resta de categories en l’ordre que les volem en la variable
de sortida –que coincideix amb l’original.
És important que escriguis les etiquetes exactament igual a les originals, ja que si no
generarà nous NA i etiquetes sense individus. Prova-ho.
Si ho hem escrit tot correctament el resultat final serà una variable de factor amb la següent
distribució:
Important! Alhora d’escriure el nom de la variable i de les categories tingues en compte que
ho has de fer tal i com estaven. Qualsevol petita diferència generarà errors que no sempre
són fàcils de detectar. En aquest sentit recorda que R és sensible (distingeix) a majúscules i
minúscules.
Per tant, en termes generals, per reconvertir valors a NA en una variable de factor farem servir:
var_nova<-car::recode(var_vella, ' valors=NA ', as.factor=T,
levels=c("etiqueta1", "etiqueta2"...))
36
MÈTODES QUANTITATIUS DE RECERCA EN CRIMINOLOGIA CURS 2021-2022
PRÀCTIQUES EN RSTUDIO PRÀCTICA 4. LA TRANSFORMACIÓ SIMPLE DE VARIABLES
Molt important! Un dels errors típics en treballar amb bases de dades, és considerar que una
variable no pot tenir valors NA. Això és completament fals. El què no hi hauria d’haver són
valors impossibles (valors fora del rang 0-10, en una avaluació de 0 a 10) o sense un significat
substantiu (No contesta, en un factor). Per això transformem aquests valors no vàlids a NA,
de manera que en les anàlisis és habitual que tinguem, precisament, valors NA.
Assignació directa
En el cas que la variable sigui numèrica i vulguem, com abans, passar el 98 i 99 a NA, podem fer:
dd$PROB_SEGUR_VANDAL3<-dd$PROB_SEGUR_VANDAL
dd$PROB_SEGUR_VANDAL3[dd$PROB_SEGUR_VANDAL3==98]<-NA
dd$PROB_SEGUR_VANDAL3[dd$PROB_SEGUR_VANDAL3==99]<-NA
En aquest cas en primer lloc hem creat una còpia de la variable, i a continuació hem reconvertit
el 98 i el 99 a NA utilitzant dues instruccions diferents.
Observa que... en aquests casos no fem servir una igualtat, sinó una doble igualtat. R utilitza
la doble igualtat per indicar que es tracta d’una assignació (per exemple, en el primer dels
casos, li estem dient: el valor que la variable té assignat com a 98.
Les dues instruccions darreres es podrien resumir en una de sola de la següent manera:
dd$PROB_SEGUR_VANDAL4<-dd$PROB_SEGUR_VANDAL
dd$PROB_SEGUR_VANDAL4[dd$PROB_SEGUR_VANDAL4>90]<-NA
Observa que... ara no hem modificat el nom de les categories. És a dir, si fas freqüències de
la nova variable –ESTUDIS3– veuràs que conté una etiqueta que es diu Altres i una altra
anomenada No contesta, ambdues amb 0 casos.
37
MÈTODES QUANTITATIUS DE RECERCA EN CRIMINOLOGIA CURS 2021-2022
PRÀCTIQUES EN RSTUDIO PRÀCTICA 4. LA TRANSFORMACIÓ SIMPLE DE VARIABLES
Si ara fas freqüències de la nova variable veuràs que ja no conté cap categoria amb 0 casos, i
que ha reconvertit els No contesta a NA.
Suposem que, per les necessitats del nostre estudi, volem generar quatre categories: cap
problema (0), algun problema (1-4), bastants problemes (5-8) i molts problemes (9-10), deixant
la resta de valors com a NA (98 i 99).2 Per fer-ho utilitzarem la funció recode, tot i que abans
comprovarem com és la variable original:
class (dd$PROB_DROGUES) #Comprovem que es tracta d’una variable numèrica
descr::freq (dd$PROB_DROGUES) #Demanem freqüències per poder valorar,
posteriorment, que la recodificació ha estat correcta
dd$PROB_DROGUES2<-car::recode(dd$PROB_DROGUES,
' 0="Cap"; 1:4="Algun"; 5:8="Bastants";
9:10="Molts"; 98:99=NA ',
as.factor=T,
levels=c("Cap","Algun","Bastants","Molts"))
class(dd$PROB_DROGUES2) #Comprovem que es tracta d’una variable de factor
descr::freq(dd$PROB_DROGUES2) #La comparem amb la variable original
2
Tal i com pots deduir, aquesta agrupació és totalment arbitrària i n’haguéssim pogut utilitzar qualsevol
altra. Pots comprovar que aprofitem la mateixa instrucció d’agrupar per eliminar valors no vàlids.
38
MÈTODES QUANTITATIUS DE RECERCA EN CRIMINOLOGIA CURS 2021-2022
PRÀCTIQUES EN RSTUDIO PRÀCTICA 4. LA TRANSFORMACIÓ SIMPLE DE VARIABLES
Les qüestions que hem de tenir en compte en la funció recode són (algunes ja les hem vist
abans):
● dd$PROB_DROGUES2 Hem generat una nova variable
● ' 0="Cap"; 1:4="Algun"; 5:8="Bastants"; 9:10="Molts"; 98:99=NA ' Els valors
numèrics no porten cometes i poden anomenar-se correlativament (5:8, per exemple),
mentre que els factors cal escriure’ls entre cometes. Tingues en compte, també, que per
separar les diferents agrupacions ho fem amb el punt i coma.
Observació! Entre els valors numèrics es poden fer servir certes formulacions que
faciliten l’escriptura. Per exemple, l’expressió:
lo:1, inclou els nombres des del més petit, (lo=lowest) fins a l’1. I l’expressió:
11:hi, inclou des de l’11 fins al més gran (hi=highest).
● as.factor=T Aquí escrivim com serà la variable final, que volem que sigui un factor.
● levels=c("Cap","Algun","Bastants","Molts") Especifiquem l’ordre com volem la
variable. En cas de no escriure-ho ens l’ordenaria alfabèticament (Algun, Bastants, Cap,
Molts), obtenint un resultat incorrecte.
I... un cop més! Comprova que els resultats de la variable final (PROB_DROGUES2) s’adeqüen
perfectament als de la variable inicial (PROB_DROGUES).
Anem a crear una variable que tingui només 3 categories vàlides (obligatoris o menys,
secundària i universitaris). Per fer-ho, la sintaxi complerta és:
class(dd$ESTUDIS) #Comprovem que es tracta d’una variable de factor
descr::freq (dd$ESTUDIS) #Demanem freqüències per poder comprovar,
després, si la recodificació ha estat correcta
dd$ESTUDIS5<-car::recode (dd$ESTUDIS,
' "Menys Obligat"="Obligat o menys";
"Obligat"="Obligat o menys";
"Secund gener"="Secund"; "Secund prof"="Secund";
"Univers"="Univers"; else=NA ',
as.factor=T,
levels=c("Obligat o menys", "Secund", "Univers"))
39
MÈTODES QUANTITATIUS DE RECERCA EN CRIMINOLOGIA CURS 2021-2022
PRÀCTIQUES EN RSTUDIO PRÀCTICA 4. LA TRANSFORMACIÓ SIMPLE DE VARIABLES
I... ja ho saps! Comprova que els resultats finals són coherents amb els inicials.
Doncs bé, el valor numèric que correspon a cada categoria és, correlativament de l’1 al 12. Anem
a recodificar l’anterior variable en tres categories vàlides: Menys1800, 1801-4000 i Mes4000,
que respectivament es corresponen als números d’odre 1-3, 4-7, 8-10, mentre que les categories
11-12 (No ho sap i No contesta) les passarem a NA. En aquest cas la sintaxi complerta és:
class(dd$INGRES_FAM) #Comprovem que es tracta d’una variable de factor
descr::freq (dd$INGRES_FAM) #Demanem freqüències per poder comprovar,
posteriorment, que la recodificació ha estat
correcta
dd$INGRES_FAM2 <-car::recode (as.numeric (dd$INGRES_FAM),
' 1:3="Menys1800"; 4:7="1801-4000";
8:10="Mes4000"; else=NA ',
as.factor=T,
levels= c("Menys1800", "1801-4000",
"Mes4000"))
class(dd$INGRES_FAM2) #Comprovem que es tracta d’una variable de factor
descr::freq(dd$INGRES_FAM2) #La comparem amb la variable original
40
MÈTODES QUANTITATIUS DE RECERCA EN CRIMINOLOGIA CURS 2021-2022
PRÀCTIQUES EN RSTUDIO PRÀCTICA 4. LA TRANSFORMACIÓ SIMPLE DE VARIABLES
Observa que no hem canviat el tipus de variable, sinó que només li hem dit que, per aquesta
instrucció concreta, la consideri com a numèrica (as.numeric).
Observació! Aquest tipus de tractament el pots utilitzar en totes les variables de factor que
hagis de recodificar. Tot i que no el demanaré a l’examen, si t’entretens una mica i l’entens,
veuràs que simplifica molt la recodificació en variables de factor i disminueix el risc d’error,
sobretot quan les variables tenen etiquetes molt llargues.
41
MÈTODES QUANTITATIUS DE RECERCA EN CRIMINOLOGIA CURS 2021-2022
PRÀCTIQUES EN RSTUDIO PRÀCTICA 4. LA TRANSFORMACIÓ SIMPLE DE VARIABLES
A manera de resum! Les diferències entre unes recodificacions i les altres es resumeixen en
tres: (1) els factors van entre cometes i els nombres no; (2) la instrucció as.factor=F o
as.factor=T correspon, respectivament, a si la variable de sortida és un nombre o un factor;
(3) quan la sortida és una variable de factor cal ordenar les categories en funció dels nostres
interessos fent servir la instrucció levels=c("categ1","categ2","categ3"...).
A més, per exemple, podem crear una variable que sigui una constant, per exemple el nombre
0:
var_nova <- 0
En aquest exemple anem a treballar amb les variables referides a la seguretat al barri i al
municipi de Barcelona (VAL_SEGUR_BARRI i VAL_SEGUR), que provenen d’aquestes dues
preguntes:
El què volem és construir una variable que sigui la mitjana entre ambdós nivells de seguretat.
Per fer-ho, en primer lloc analitzem les variables originals:
class(dd$VAL_SEGUR_BARRI)
class(dd$VAL_SEGUR) #Són numèriques, de manera que en podrem fer càlculs
descr::freq(dd$VAL_SEGUR_BARRI)
descr::freq(dd$VAL_SEGUR) #En ambdues, a banda dels valors 0-10, hi ha 98
i 99, que haurem d’excloure
dd$VAL_SEGUR_BARRI1<-car::recode(dd$VAL_SEGUR_BARRI, ' 98:99=NA ',
as.factor=F)
dd$VAL_SEGUR1<-car::recode(dd$VAL_SEGUR, ' 98:99=NA ', as.factor=F)
42
MÈTODES QUANTITATIUS DE RECERCA EN CRIMINOLOGIA CURS 2021-2022
PRÀCTIQUES EN RSTUDIO PRÀCTICA 4. LA TRANSFORMACIÓ SIMPLE DE VARIABLES
Important! En fer qualsevol operació aritmètica has de tenir en compte que els NA són
contagiosos. Així, per exemple, NA+NA=NA, però també 5+NA=NA. Això comporta que el
nombre de NA final ha de ser més gran o igual al total de NA que hi ha en la variable que en
té més (en aquest cas 71). Això és especialment greu quan operem moltes variables, ja que
la probabilitat que una de les variables contingui algun valor NA és bastant gran. Pensa que:
9+10+8+9+7+9+NA=NA.
Tot i que això forma part de la segona part del curs, per veure quina és la mitjana de puntuació
que es dona a la seguretat, per part de tots els entrevistats, pots utilitzar la següent instrucció:
mean(dd$MITJ_SEGUR, na.rm=T)
Quan tenim factors els hem d’escriure entre cometes, mentre que els nombres no. A més, si
hem d’escriure NA ho fem sense cometes.
Per fer operacions aritmètiques:
var_nova <- operacions aritmètiques entre variables existents
43
MÈTODES QUANTITATIUS DE RECERCA EN CRIMINOLOGIA CURS 2021-2022
PRÀCTIQUES EN RSTUDIO PRÀCTICA 4. LA TRANSFORMACIÓ SIMPLE DE VARIABLES
6. Exercicis
(a) Observa que tenim una variable anomenada DISTRICTE que divideix Barcelona en els seus
10 districtes. Volem, però, una nova variable que divideixi Barcelona en només dues zones,
la zona nord (Les Corts, Sarrià-Sant Gervasi, Gràcia, Horta-Guinardó, Nou Barris i Sant
Andreu) i la zona sud (Sants-Montjuïc, L’Eixample, Ciutat Vella i Sant Martí).
Tingues en compte que hauràs de fer algun canvi previ, ja que l’apòstrof de la categoria
L’EIXAMPLE et donarà problemes. També et poden donar problemes els accents, les
dièresis i els guionets. Per solucionar-ho tens dues opcions:
(1) Tractar-la com a numèrica, com he fet en la pràctica quan hem agrupat la variable
ingressis,
(2) A partir de la funció levels (Pràctica 3) canviar els nivells de la variable per uns altres
que no donin problemes.
Genera aquesta nova variable, i respon a aquestes preguntes:
i. Dels 10 districtes, a quin s’han fet més entrevistes i aquí se n’han fet menys?
Quin percentatge d’individus hi ha a cadascuna de les dues zones finals?
(b) A partir de les variables que fan referència a la valoració als mossos d’esquadra i a la guàrdia
urbana (VAL_MOSSOS i VAL_GUB, respectivament) volem crear una variable que tingui tres
categories vàlides: valoren millor els mossos que la guàrdia urbana, els valoren igual, valoren
millor la guàrdia urbana que els mossos. Per fer-ho hauràs de seguir les següents passes:
i. Comprova de quina classe són les variables i converteix-les, si s’escau, en variables
numèriques que continguin com a valors vàlids els nombres del 0 al 10.
ii. Genera una nova variable que sigui la resta entre ambdues.
iii. Agrupa la nova variable, de manera que obtinguis les tres categories esmentades.
Ves en compte amb el nom que utilitzis per definir els noves categories. Per exemple,
una categoria no pot contenir el símbol =. Així no podràs escriure MOSSOS=GUB.
iv. Respon les següents preguntes:
De quina classe eren les variables originals (VAL_MOSSOS i VAL_GUB)?
La variable que has creat restant les altres dues, quants casos vàlids i quants casos
perduts (NA) té? Quan val la mitjana de la variable resta?
Digues quin dels dos cossos podem considerar que obté una millor valoració. En què et
fonamentes per afirmar-ho?
Un cop més... Important! Recorda, en cada pas, d’anar comprovant que els resultats
són coherents.
(c) Hi ha un seguit de 10 variables que mesuren la gravetat dels problemes que hi ha al barri,
de manera que els valors propers a 0 indiquen que no són cap problema i els valors propers
a 10 indiquen que són un problema greu. Es tracta de les variables PROB_NETEJA,
44
MÈTODES QUANTITATIUS DE RECERCA EN CRIMINOLOGIA CURS 2021-2022
PRÀCTIQUES EN RSTUDIO PRÀCTICA 4. LA TRANSFORMACIÓ SIMPLE DE VARIABLES
• Exercici (a) Respon les dues preguntes que es formulen al punt (i).
45