You are on page 1of 6

MÈTODES QUANTITATIUS DE RECERCA EN CRIMINOLOGIA CURS 2021-2022

PRÀCTIQUES EN RSTUDIO PRÀCTICA 6. CREACIÓ DE SUBFITXERS I DEPURACIÓ

Pràctica 6: Creació de subfitxers i depuració1

En aquesta pràctica farem servir els paquets car i descr, que ja hem vist en pràctiques anteriors.
Treballarem amb el fitxer Practica6.rds.

1. La selecció de casos. La instrucció subset


És molt habitual haver de treballar amb una mostra del conjunt d’entrevistats. Per exemple, en
la matriu de victimització de Barcelona, si volguéssim treballar només amb les residents a Nou
Barris li podríem dir:
class(dd$DISTRICTE)
descr::freq(dd$DISTRICTE, plot=F) #Afegim plot=F a la instrucció freq per
tal que no ens doni el gràfic
NOUBARRIS <-subset (dd, dd$DISTRICTE=="NOU BARRIS")

Compte! El nom d’un fitxer no pot començar amb un nombre, de manera que no el podem
anomenar 9BARRIS.

Això ens genera un fitxer nou, que hem anomenat NOUBARRIS i que conté totes les variables,
però només els individus on DISTRICTE=NOU BARRIS. Fes freqüències de la variable DISTRICTE
en aquest fitxer nou i analitza què passa.
Pots observar que, tal i com passa amb la funció ifelse, aquesta també utilitza l’assignació (==) i
no la igualtat. A més, dintre de les instruccions es poden fer els mateixos connectors lògics que
en l’ifelse. Suposem, per exemple que volem generar un fitxer que contingui els residents a Nou
Barris, Sant Andreu i Sant Martí. Tenim dues formes diferents de fer-ho. La forma clàssica,
utilitzant l’operador | (o):
NOU_AND_MART <-subset (dd, dd$DISTRICTE=="NOU BARRIS" |
dd$DISTRICTE=="SANT ANDREU" |
dd$DISTRICTE=="SANT MARTÍ")

Observa que... hem utilitzat el connector | (o) i no el connector & (i). Si haguéssim fet servir
aquest darrer li estaríem dient que ha de seleccionar els individus que resideixen als tres
barris, cosa que ens donaria com a resultat un fitxer vuit.

La manera més eficient de crear-lo, però, és fer servir la funció %in% (dintre de). Així li podem
dir:
NOU_AND_MART2 <-subset (dd, dd$DISTRICTE %in% c("NOU BARRIS",
"SANT ANDREU", "SANT MARTÍ"))

1
Ajenjo Cosp, Marc (2021) Pràctiques en RStudio de Mètodes Quantitatius per a la Recerca en
Criminologia. Pràctica 6. Departament de Sociologia, UAB, 55:60.

55
MÈTODES QUANTITATIUS DE RECERCA EN CRIMINOLOGIA CURS 2021-2022
PRÀCTIQUES EN RSTUDIO PRÀCTICA 6. CREACIÓ DE SUBFITXERS I DEPURACIÓ

Recorda que... és més que recomanable comprovar que els resultats són coherents amb el
que obtenim. Així, per exemple, quan hem fet freqüències del districte en el fitxer original
hem vist que hi ha 547 entrevistats a Nou Barris, 463 a Sant Andreu i 506 a Sant Martí. Així,
el fitxer que acabem de generar ha de tenir 1.516 casos.

També, per exemple, si volguéssim estudiar la població femenina, major de 64 anys, resident a
algun dels barris anteriors, li podríem dir:
class(dd$EDAT)
descr::freq(dd$EDAT, plot=F)
descr::freq(dd$SEXE, plot=F)
NOU_AND_MART65 <-subset (dd, dd$DISTRICTE %in% c("NOU BARRIS",
"SANT ANDREU", "SANT MARTÍ") &
EDAT=="DE 65 ANYS I MÉS" & SEXE=="DONA")

Recorda que... els connectors que es poden fer servir són els mateixos que en l’ifelse. Per
exemple, respecte del connector %in% no en vàrem fer cap exemple, però tingues en compte
que sol ser molt útil en l’ifelse.

Aniràs comprovant que es van generant fitxers nous, i que estan tots oberts. Si vols eliminar
algun dels fitxers, escriu:
rm(NOU_AND_MART65)

A més, si volguessis esborrar tots els fitxers que hi ha actius, has de fer:
rm (list=ls())

Recomanació! Aquesta instrucció està bé utilitzar-la quan tenim molts fitxers i necessitem
fer net. Després d’aquesta, però, cal tornar a obrir el fitxer principal.

Una de les seleccions més freqüents és generar un fitxer que no contingui NA, molt útil com
veurem en l’assignatura d’anàlisi de dades. Per fer-ho podem utilitzar les següent funcions:
is.na(variable) #Estaríem agafant els NA
!is.na(variable) #Seleccionem els que no són NA

Així, per exemple, si volguéssim fer un estudi de com són les persones que no han respost al
nombre d’ingressos i volguéssim un fitxer que només contingués aquests, faríem:
class(dd$INGRES_FAM)
descr::freq(dd$INGRES_FAM, plot=F)
ING_NA<-subset (dd, is.na(dd$INGRES_FAM))

Ara bé, el més habitual és voler seleccionar aquells que no tenen NA, aquells que tenen la
informació complerta. Així, en aquest cas li diríem:
ING_no_NA<-subset (dd, !is.na(dd$INGRES_FAM))

Si volguéssim generar un fitxer que no contingués cap NA en les variables INGRES_FAM, ESTUDIS
i LLOC_NAIX, li diríem:
class(dd$INGRES_FAM)

56
MÈTODES QUANTITATIUS DE RECERCA EN CRIMINOLOGIA CURS 2021-2022
PRÀCTIQUES EN RSTUDIO PRÀCTICA 6. CREACIÓ DE SUBFITXERS I DEPURACIÓ

descr::freq(dd$INGRES_FAM, plot=F)
class(dd$ESTUDIS)
descr::freq(dd$ESTUDIS, plot=F)
class(dd$LLOC_NAIX)
descr::freq(dd$ LLOC_NAIX, plot=F)
FITX_NET<-subset(dd, !is.na(dd$INGRES_FAM) & !is.na(dd$ESTUDIS) &
!is.na(dd$LLOC_NAIX))

Observa que... en aquest cas, com a connector, hem fet servir una & (i) i no una | (o). Així li
estem dient que seleccioni aquells que no tenen NA en ingrés, i no tenen NA en lloc de
naixement, i no tenen NA en estudis. En canvi, la utilització d’una | (o) ens agafaria tots els
que no tenen NA en alguna de les variables.

Important. Per comprovar que el resultat és coherent, has de pensar que perdràs molts
individus, com a mínim el nombre màxim de NA que té la variable que en té més (en aquest
cas, com a mínim els 1.233 de la variable ingressos). Prova d’utilitzar una | (o) i veuràs com
en perds molt pocs.

2. La selecció de variables
Els fitxers generats fins ara contenen totes les variables. Si vols crear un fitxer que contingui
només unes quantes variables li hauràs de dir:
FITX_NOU1<-subset(dd, select=c("INGRES_FAM","ESTUDIS","LLOC_NAIX"))

La instrucció anterior ens genera un fitxer que només conté les tres variables esmentades.
Podem, però combinar aquesta instrucció amb l’anterior. Per exemple, si volem un fitxer que
només contingui aquestes tres variables però quan estiguin plenes (no NA) li haurem de dir:
FITX_NOU2<-subset(dd, !is.na(dd$INGRES_FAM) & !is.na(dd$ESTUDIS) &
!is.na(dd$LLOC_NAIX),
select=c("INGRES_FAM","ESTUDIS","LLOC_NAIX"))

3. L’ordenació de casos
Encara que és poc habitual fer-ho, ja que no té cap efecte en les anàlisis, podem ordenar el fitxer
en funció d’una o més variables,.
dd<-dd[order(dd$DISTRICTE),]
dd<-dd[order(dd$SEXE, dd$EDAT),] # Ordenació en funció de dues variables

Observa que... no ordena alfabèticament, sinó en funció de l’ordre que tenien els factors.

Important. Cal posar la coma que hi ha després del parèntesi. En cas contrari et donarà error.

4. Depuració dels fitxers


Sovint ens trobem que els fitxers contenen errors puntuals en variables, o errors en la
coherència entre dues variables. La millor manera de detectar errors puntuals és fer freqüències

57
MÈTODES QUANTITATIUS DE RECERCA EN CRIMINOLOGIA CURS 2021-2022
PRÀCTIQUES EN RSTUDIO PRÀCTICA 6. CREACIÓ DE SUBFITXERS I DEPURACIÓ

de totes les variables i comprovar que totes les categories són coherents. Per exemple, en una
enquesta a majors de 15 anys, si tinguéssim algú que en té 14 es tractaria d’un error que hauríem
de corregir; o si ens trobéssim que algú té 125 anys, probablement també es tractaria d’un error
de codificació.
En la nostra enquesta, si fem freqüències de la variable NIVELL_SOCIO veiem que, per error, dos
individus que haurien de tenir el nivell BAIX els hem codificat malament, com a Baix. Anem en
primer lloc a identificar-los. Per fer-ho, una manera senzilla és crear un subfitxer que només
contingui els casos erronis i la variable NUMQ,2 així sabríem en quin qüestionari es troben:
class(dd$NIVELL_SOCIO)
descr::freq(dd$NIVELL_SOCIO, plot=F)
error<-subset (dd, dd$NIVELL_SOCIO=="Baix",
select=c("NUMQ","NIVELL_SOCIO"))

On podem veure que els qüestionaris erronis són els números 202712 i 202426. Ara si
volguéssim canviar Baix per BAIX, només hauríem de fer una recodificació. Fes-ho.

Observa que... en aquest cas haguéssim pogut fer corregir l’error fent directament la
recodificació, i sense necessitat de saber el número de qüestionari.

Una mica més problemàtic és quan l’error és de coherència entre variables. Això es dona, per
exemple, quan un individu de 10 anys afirma ser vidu o tenir 2 fills. O quan, com en el nostre
cas, algú que afirma no haver estat víctima d’un delicte, resulta que afirma haver-lo patit 2
vegades, per exemple.3
En aquest cas pots comprovar que hi ha certa incoherència entre les persones que afirmen haver
estat víctimes d’un delicte consumat a la llar (V_LLAR_C) i el nombre de vegades que han estat
víctimes (Q_LLAR_C).
class(dd$V_LLAR_C)
descr::freq(dd$V_LLAR_C, plot=F) # hi ha 78 persones que afirmen haver
estat víctimes d’un robatori a llar
class(dd$Q_LLAR_C)
descr::freq(dd$Q_LLAR_C, plot=F) # en total hi ha 79 persones que
contesten quants delictes han patit a la llar

Per saber on és l’error, podríem creuar ambdues variables:


table(dd$V_LLAR_C, dd$Q_LLAR_C)

I observem que el que diu 6 delictes, és un error.


Per situar en quin qüestionari es troba aquest, farem:
error2<-subset (dd, dd$V_LLAR_C=="NO" & dd$Q_LLAR_C==6,
select=c("NUMQ","V_LLAR_C", "Q_LLAR_C"))

2
Totes les matrius de dades solen tenir una variable per identificar el número de qüestionari. Així, si es
detecta un error podrem anar-lo a buscar. En aquest cas, l’identificador és la variable NUMQ.
3
Tingues en compte que la matriu de dades amb la que treballem estava completament depurada i que
els errors s’han introduït posteriorment, per il·lustrar situacions que se solen donar habitualment.

58
MÈTODES QUANTITATIUS DE RECERCA EN CRIMINOLOGIA CURS 2021-2022
PRÀCTIQUES EN RSTUDIO PRÀCTICA 6. CREACIÓ DE SUBFITXERS I DEPURACIÓ

Observa que... tal i com passa amb la funció ifelse, si volem seleccionar un valor d’una
variable numèrica, ho farem sense les cometes: dd$Q_LLAR_C==6.

On veiem que es tracta del qüestionari 200376.


De fet, nosaltres haguéssim pogut localitzar-lo sense saber les seves característiques,
simplement fent:
error3<-subset (dd, dd$V_LLAR_C=="NO" & !is.na(dd$Q_LLAR_C),
select=c("NUMQ","V_LLAR_C", "Q_LLAR_C"))

5. Resum d’instruccions bàsiques


Per generar fitxers amb totes les variables i només alguns casos:
fitxer_nou <-subset (fitxer_orig, condicions)

Per generar-lo seleccionant també algunes variable:


fitxer_nou <-subset (fitxer_orig, condicions, select=c("var1","var2"...)

Per dir-li que vols els NA o que no els vols, has de fer servir:
is.na(variable)
!is.na(variable)

Per esborrar un fitxer:


rm(fitxer)

Per esborrar tots els fitxers que hi ha actius:


rm (list=ls())

Per ordenar un fitxer en funció d’una variable o més d’una::


dd<-dd[order(variable),]
dd<-dd[order(variable1, variable2...),]

6. Exercicis

Treballa a partir de la mateixa base de dades (Practica6.rds).


(a) Tenim set variables que es refereixen a la possessió d’algun vehicle (TE_COTXE, TE_MOTO,
TE_BICI, TE_FURGO, TE_CAMIO, TE_PATINET, TE_VEHI_ALTRES). Crea un fitxer que només
contingui els individus que tenen algun tipus de vehicle, i que contingui les set variables
utilitzades i el sexe (SEXE).
Fes un summary del fitxer generat.
(b) A partir de les dues variables que es refereixen a la valoració als mossos i a la guàrdia urbana
(VAL_MOSSOS i VAL_GUB) es demana que generis dos fitxers diferents:
i. Fitxer que contingui només els valors perduts en alguna de les dues variables (i que
contingui només les dues variables). Fes un summary del nou fitxer.

59
MÈTODES QUANTITATIUS DE RECERCA EN CRIMINOLOGIA CURS 2021-2022
PRÀCTIQUES EN RSTUDIO PRÀCTICA 6. CREACIÓ DE SUBFITXERS I DEPURACIÓ

ii. Fitxer que contingui només els valors vàlids en les dues variables (i que contingui només
les dues variables), és a dir que no hi hagi perduts en cap de les dues. Fes un summary
del nou.
Pots fer la pràctica en Markdown o en un Script d’R. Tant en un cas com en l’altre, el resultat
que has de penjar al campus és un Word on, a més del procediment, hi hagi els tres summary
que es demanen.

Important! Com que la pràctica és mol curta, i els exercicis proposats, també, i a la propera
sessió hi ha examen, el lliurament s’avança a demà dijous, 21 d’octubre a les 18:00.

60

You might also like