El entorno de programación estadística R aplicado a la...

34
1 El entorno de programación estadística R aplicado a la producción de estadísticas públicas: La Encuesta de Presupuestos Familiares 1. DESCRIPCIÓN DE LOS FICHEROS DE DATOS Para elaborar los resultados se emplean tres tipos de ficheros de datos, HOGARES: conteniendo los datos de los hogares, donde cada registro es un hogar. GASTOS: conteniendo los gastos; cada registro es un gasto, con su correspondiente código de CINCO DÍGITOS. MIEMBROS: los datos de los miembros de cada hogar, donde cada registro es un integrante cada hogar. A continuación se indica el diseño de registro de cada fichero. La descripción pormenorizada puede verse en el documento epf_docu.docx

Transcript of El entorno de programación estadística R aplicado a la...

Page 1: El entorno de programación estadística R aplicado a la ...personal.us.es/jmayor/ficheros/curso_epf_pre.pdf · El entorno de programación estadística R aplicado a la producción

1

El entorno de programación estadística R aplicado a la

producción de estadísticas públicas: La Encuesta de

Presupuestos Familiares

1. DESCRIPCIÓN DE LOS FICHEROS DE DATOS

Para elaborar los resultados se emplean tres tipos de ficheros

de datos,

HOGARES: conteniendo los datos de los hogares, donde cada

registro es un hogar.

GASTOS: conteniendo los gastos; cada registro es un gasto, con su correspondiente código de CINCO DÍGITOS.

MIEMBROS: los datos de los miembros de cada hogar, donde cada registro es un integrante cada hogar.

A continuación se indica el diseño de registro de cada

fichero. La descripción pormenorizada puede verse en el

documento epf_docu.docx

Page 2: El entorno de programación estadística R aplicado a la ...personal.us.es/jmayor/ficheros/curso_epf_pre.pdf · El entorno de programación estadística R aplicado a la producción

2

Diseño de registro del fichero de hogar

VARIABLE Nº DE CARACTERES POSICIONES

1. INFORMACIÓN GENERAL ANOENC 4 1-4 NUMERO 5 5-9 CCAA 2 10-11 NUTS1 1 12 CAPROV 1 13 TAMAMU 1 14 DENSI 1 15 CLAVE 1 16 CLATEO 1 17 FACTOR 11 (6 decimales) 18-28 2. CARACTERÍSTICAS RELATIVAS AL HOGAR NMIEMB 2 29-30 TAMAÑO 1 31 NMIEMSD 2 32-33 NMIEMHU 2 34-35 NMIEMIN 2 36-37 NMIEM1 2 38-39 NMIEM2 2 40-41 NMIEM3 2 42-43

Page 3: El entorno de programación estadística R aplicado a la ...personal.us.es/jmayor/ficheros/curso_epf_pre.pdf · El entorno de programación estadística R aplicado a la producción

3

VARIABLE Nº DE CARACTERES POSICIONES

NMIEM4 2 44-45 NMIEM5 2 46-47 NMIEM6 2 48-49 NMIEM7 NMIEM8 NMIEM9 NMIEM10 NMIEM11 NMIEM12 NMIEM13 NUMACTI NUMINACTI NUMOCU NUMNOCU NUMESTU NUMNOESTU NNINOSD

2 2 2 2 2 2 2 2 2 2 2 2 2 2

50-51 52-53 54-55 56-57 58-59 60-61 62-63 64-65 66-67 68-69 70-71 72-73 74-75 76-77

NHIJOSD 2 78-79 UC1 3 (1 decimal) 80-82 UC2 3 (1 decimal) 83-85 PF2TEO 2 86-87 PF2RECO 2 88-89 TIPHOGAR1 2 90-91

Page 4: El entorno de programación estadística R aplicado a la ...personal.us.es/jmayor/ficheros/curso_epf_pre.pdf · El entorno de programación estadística R aplicado a la producción

4

VARIABLE Nº DE CARACTERES POSICIONES

TIPHOGAR2 2 92-93 TIPHOGAR3 2 94-95 TIPHOGAR4 2 96-97 TIPHOGAR5 2 98-99 TIPHOGAR6 2 100-101 TIPHOGAR7 2 102-103 TIPHOGAR8 2 104-105 TIPHOGAR9 2 106-107 TIPHOGAR10 2 108-109 TIPHOGAR11 2 110-111 SITUOCUHOG 2 112-113 SITUACTHOG 2 114-115 3. DATOS DEL SUSTENTADOR PRINCIPAL NORDENSP 2 116-117 EDADSP 2 118-119 SEXOSP PAISNACODSP

2 2

120-121 122-123

NACIONASP 2 124-125 PAISCODSP 2 126-127 SITURESSP 2 128-129 ECIVILLEGALSP 2 130-131 NORDENCOSP UNIONSP

2 2

132-133 134-135

Page 5: El entorno de programación estadística R aplicado a la ...personal.us.es/jmayor/ficheros/curso_epf_pre.pdf · El entorno de programación estadística R aplicado a la producción

5

VARIABLE Nº DE CARACTERES POSICIONES

CONVIVENCIASP 2 136-137 NORDENPASP PAISPADRESP

2 2

138-139 140-141

NORDENMASP PAISMADRESP

2 2

142-143 144-145

ESTUDIOSSP 2 146-147 ESTUDREDSP 2 148-149 SITUACTSP 2 150-151 SITUREDSP OCUSP JORNADASP

2 2 2

152-153 154-155 156-157

PERCEPSP 2 158-159 IMPEXACPSP 5 160-164 IMPUEXACPSP 1 165 INTERINPSP 2 166-167 IMPUINTERPSP 1 168 TRABAJO 2 169-170 OCUPA 2 171-172 OCUPARED 2 173-174 ACTESTB 2 175-176 ACTESTBRED 2 177-178 SITPROF 2 179-180 SECTOR 2 181-182

Page 6: El entorno de programación estadística R aplicado a la ...personal.us.es/jmayor/ficheros/curso_epf_pre.pdf · El entorno de programación estadística R aplicado a la producción

6

VARIABLE Nº DE CARACTERES POSICIONES

TIPOCONT 2 183-184 SITSOCI 2 185-186 SITSOCIRE 2 187-188 4. CARACTERÍSTICAS DE LA VIVIENDA PRINCIPAL REGTEN 1 189 TIPOEDIF 2 190-191 ZONARES 2 192-193 TIPOCASA 2 194-195 NHABIT 2 196-197 ANNOCON 2 198-199 SUPERF 3 200-202 AGUACALI 2 203-204 FUENAGUA 2 205-206 CALEF 2 207-208 FUENCALE 2 209-210 5. OTRAS VIVIENDAS A DISPOSICIÓN DEL HOGAR DISPOSIOV 1 211 NUMOVD 1 212 REGTENV1 2 213-214 MESES V1 2 215-216 DIASV1 2 217-218 AGUACV1 2 219-220 FUENACV1 2 221-222

Page 7: El entorno de programación estadística R aplicado a la ...personal.us.es/jmayor/ficheros/curso_epf_pre.pdf · El entorno de programación estadística R aplicado a la producción

7

VARIABLE Nº DE CARACTERES POSICIONES

CALEFV1 2 223-224 FUENCAV1 2 225-226 REGTENV2 2 227-228 MESES V2 2 229-230 DIASV2 2 231-232 AGUACV2 2 233-234 FUENACV2 2 235-236 CALEFV2 2 237-238 FUENCAV2 2 239-240 REGTENV3 2 241-242 MESES V3 2 243-244 DIASV3 2 245-246 AGUACV3 2 247-248 FUENACV3 2 249-250 CALEFV3 2 251-252 FUENCAV3 2 253-254 REGTENV4 2 255-256 MESES V4 2 257-258 DIASV4 2 259-260 AGUACV4 2 261-262 FUENACV4 2 263-264 CALEFV4 2 265-266 FUENCAV4 2 267-268

Page 8: El entorno de programación estadística R aplicado a la ...personal.us.es/jmayor/ficheros/curso_epf_pre.pdf · El entorno de programación estadística R aplicado a la producción

8

VARIABLE Nº DE CARACTERES POSICIONES

REGTENV5 2 269-270 MESES V5 2 271-272 DIASV5 2 273-274 AGUACV5 2 275-276 FUENACV5 2 277-278 CALEFV5 2 279-280 FUENCAV6 2 281-282 REGTENV6 2 283-284 MESES V6 2 285-286 DIASV6 2 287-288 AGUACV6 2 289-290 FUENACV6 2 291-292 CALEFV6 2 293-294 FUENCAV6 2 295-296 REGTENV7 2 297-298 MESES V7 2 299-300 DIASV7 2 301-302 AGUACV7 2 303-304 FUENACV7 2 305-306 CALEFV7 2 307-308 FUENCAV7 2 309-310 REGTENV8 2 311-312 MESES V8 2 313-314

Page 9: El entorno de programación estadística R aplicado a la ...personal.us.es/jmayor/ficheros/curso_epf_pre.pdf · El entorno de programación estadística R aplicado a la producción

9

VARIABLE Nº DE CARACTERES POSICIONES

DIASV8 2 315-316 AGUACV8 2 317-318 FUENACV8 2 319-320 CALEFV8 2 321-322 FUENCAV8 2 323-324 REGTENV9 2 325-326 MESES V9 2 327-328 DIASV9 2 329-330 AGUACV9 2 331-332 FUENACV9 2 333-334 CALEFV9 2 335-336 FUENCAV9 2 337-338 6. GASTOS DE CONSUMO DEL HOGAR GASTOT 16 (2 decimales) 339-354 IMPUTGAS 5 (2 decimales) 355-359 GASTMON 16 (2 decimales) 360-375 GASTNOM1 13 (2 decimales) 376-388 GASTNOM2 13 (2 decimales) 389-401 GASTNOM3 13 (2 decimales) 402-414 GASTNOM4 13 (2 decimales) 415-427 7. INGRESOS REGULARES MENSUALES DEL HOGAR CAPROP 2 428-429 CAJENA 2 430-431

Page 10: El entorno de programación estadística R aplicado a la ...personal.us.es/jmayor/ficheros/curso_epf_pre.pdf · El entorno de programación estadística R aplicado a la producción

10

VARIABLE Nº DE CARACTERES POSICIONES

PENSIO 2 432-433 DESEM 2 434-435 OTRSUB 2 436-437 RENTAS 2 438-439 OTROIN 2 440-441 FUENPRIN 2 442-443 FUENPRINRED

2 444-445

IMPEXAC 5 446-450 IMPUEXAC 1 451 INTERIN 2 452-453 IMPUINTER 1 454 NUMPERI 2 455-456 8. NÚMERO DE COMIDAS Y CENAS EFECTUADAS DURANTE LA BISEMANA MUESTRAL COMIMH 3 457-459 COMISD 3 460-462 COMIHU 3 463-465 COMIINV 3 466-468 COMITOT 3 469-471

Page 11: El entorno de programación estadística R aplicado a la ...personal.us.es/jmayor/ficheros/curso_epf_pre.pdf · El entorno de programación estadística R aplicado a la producción

11

Diseño de registro del fichero de gastos.

VARIABLE Nº DE CARACTERES POSICIONES

ANOENC 4 1-4 NUMERO 5 5-9 CODIGO 5 10-14 GASTO 15(2 decimales) 15-29 PORCEN 5 (2 decimales) 30-34 CANTIDAD 12(2 decimales) 35-46 GASTMON 15(2 decimales) 47-61 GASTNOM1 13(2 decimales) 62-74 GASTNOM2 13(2 decimales) 75-87 GASTNOM3 13(2 decimales) 88-100 GASTNOM4 13(2 decimales) 101-113 GASTNOM5 13(2 decimales) 114-126 FACTOR 11 (6 decimales) 127-137

Page 12: El entorno de programación estadística R aplicado a la ...personal.us.es/jmayor/ficheros/curso_epf_pre.pdf · El entorno de programación estadística R aplicado a la producción

12

Diseño de registro del fichero de miembros del hogar.

VARIABLE Nº DE CARACTERES

POSICIONES

ANOENC 4 1-4 NUMERO 5 5-9 NORDEN 2 10-11 CATEGMH 2 12-13 SUSPRIN 1 14 RELASP 2 15-16 EDAD 2 17-18 SEXO PAISNACIM

2 2

19-20 21-22

NACIONA 2 23-24 PAISNACION 2 25-26 SITURES 2 27-28 ECIVILLEGAL 2 29-30 NORDENCO UNION CONVIVENCIA

2 2 2

31-32 33-34 35-36

NORDENPA PAISPADRE

2 2

37-38 39-40

Page 13: El entorno de programación estadística R aplicado a la ...personal.us.es/jmayor/ficheros/curso_epf_pre.pdf · El entorno de programación estadística R aplicado a la producción

13

VARIABLE Nº DE CARACTERES

POSICIONES

NORDENMA PAISMADRE

2 2

41-42 43-44

ESTUDIOS 2 45-46 ESTUDRED 2 47-48 SITUACT 2 49-50 SITURED OCU JORNADA

2 2 2

51-52 53-54 55-56

PERCEP 2 57-58 IMPEXACP 5 59-63 IMPUEXACP 1 64 INTERINP 2 65-66 IMPUINTERP 1 67 NINODEP 2 68-69 HIJODEP 2 70-71 ADULTO 2 72-73 FACTOR 11 (6 decimales) 74-84

Page 14: El entorno de programación estadística R aplicado a la ...personal.us.es/jmayor/ficheros/curso_epf_pre.pdf · El entorno de programación estadística R aplicado a la producción

14

2. LECTURA DE FICHEROS CON LA ESTRUCTURA DESCRITA

Para leer este tipo de ficheros, en los cuales no hay ningún

tipo de separador entre las variables, se puede emplear la

instrucción de R, read.fwf(),

read.fwf(file, widths, header = FALSE, sep = "\t",

skip = 0, row.names, col.names, n = -1,

buffersize = 2000, ...)

donde,

file: nombre del fichero a leer.

widths: vector de números enteros con las anchuras de las

variables. Un entero negativo indica salto de columna. P.E. -5

indica que hay que saltar 5 columnas.

header: TRUE o FALSE según haya o no nombres de variables en la

primera fila. Por defecto FALSE.

Page 15: El entorno de programación estadística R aplicado a la ...personal.us.es/jmayor/ficheros/curso_epf_pre.pdf · El entorno de programación estadística R aplicado a la producción

15

EJEMPLO. Lectura del fichero de hogares. Lo hacemos por bloques

para un mayor control de posibles errores. Se podría hacer

globalmente. Los nombres de las variables son definidos a

posteriori pero se podría hacer directamente con col.names.

nf='C:\\r_epf\\FUSUHOG.SFPE.A2011.CCAA01.TXT'

formato=c(4,5,2,1,1,1,1,1,1,11)

datos_hogar=read.fwf(nf,widths=formato)

#le damos nombres; se puede hacer dentro de read.fwf()

#1. InformaciOn general

names(datos_hogar)[1]='ANOENC'

names(datos_hogar)[2]='NUMERO'

names(datos_hogar)[3]='CCAA'

names(datos_hogar)[4]='NUTS1'

names(datos_hogar)[5]='CAPROV'

names(datos_hogar)[6]='TAMAMU'

names(datos_hogar)[7]='DENSI'

names(datos_hogar)[8]='CLAVE'

names(datos_hogar)[9]='CLATEO'

names(datos_hogar)[10]='FACTOR'

#La columna 10 es 11.6; la dividimos por 10^6

datos_hogar$FACTOR=datos_hogar$FACTOR/10^6

Page 16: El entorno de programación estadística R aplicado a la ...personal.us.es/jmayor/ficheros/curso_epf_pre.pdf · El entorno de programación estadística R aplicado a la producción

16

#2. CaracterIsticas relativas al hogar

salto=sum(formato)

formato_aux=c(2,1,rep(2,24),3,3,rep(2,15))

formato=c(-salto,formato_aux)

datos=read.fwf(nf,widths=formato)

names(datos)[1]='NMIEMB'

names(datos)[2]='TAMAÑO'

names(datos)[3]='NMIEMSD'

names(datos)[4]='NMIEMHU'

names(datos)[5]='NMIEMIN'

names(datos)[6]='NMIEM1'

names(datos)[7]='NMIEM2'

names(datos)[8]='NMIEM3'

names(datos)[9]='NMIEM4'

names(datos)[10]='NMIEM5'

names(datos)[11]='NMIEM6'

names(datos)[12]='NMIEM7'

names(datos)[13]='NMIEM8'

names(datos)[14]='NMIEM9'

names(datos)[15]='NMIEM10'

names(datos)[16]='NMIEM11'

names(datos)[17]='NMIEM12'

names(datos)[18]='NMIEM13'

names(datos)[19]='NUMACTI'

names(datos)[20]='NUMINACTI'

names(datos)[21]='NUMOCU'

names(datos)[22]='NUMNOCU'

Page 17: El entorno de programación estadística R aplicado a la ...personal.us.es/jmayor/ficheros/curso_epf_pre.pdf · El entorno de programación estadística R aplicado a la producción

17

names(datos)[23]='NUMESTU'

names(datos)[24]='NUMNOESTU'

names(datos)[25]='NNINOSD'

names(datos)[26]='NHIJOSD'

names(datos)[27]='UC1'

names(datos)[28]='UC2'

names(datos)[29]='PF2TEO'

names(datos)[30]='PF2RECO'

names(datos)[31]='TIPHOGAR1'

names(datos)[32]='TIPHOGAR2'

names(datos)[33]='TIPHOGAR3'

names(datos)[34]='TIPHOGAR4'

names(datos)[35]='TIPHOGAR5'

names(datos)[36]='TIPHOGAR6'

names(datos)[37]='TIPHOGAR7'

names(datos)[38]='TIPHOGAR8'

names(datos)[39]='TIPHOGAR9'

names(datos)[40]='TIPHOGAR10'

names(datos)[41]='TIPHOGAR11'

names(datos)[42]='SITUOCUHOG'

names(datos)[43]='SITUACTHOG'

datos$UC1=datos$UC1/10

datos$UC2=datos$UC2/10

datos_hogar=cbind(datos_hogar,datos)

Etc. Etc.

Page 18: El entorno de programación estadística R aplicado a la ...personal.us.es/jmayor/ficheros/curso_epf_pre.pdf · El entorno de programación estadística R aplicado a la producción

18

Es importante observar que esta instrucción, por defecto lee las

cantidades numéricas como números, y las alfanuméricas como cadenas

de caracteres. Por ejemplo 12a34 lo leerá como cadena, 12534 como

cantidad numérica igual a 12534, y 02344 como cantidad numérica

igual a 2344.

Esto significa que si queremos que 01234 lo lea como cadena de

caracteres, será necesario forzar a un tipo determinado con el

cualificador colClasses. Por ejemplo, en el fichero de gastos, la

variable CODIGO es de este tipo. Para leerla como alfanumérica

empleamos el siguiente código,

nf='C:\\r_epf\\FUSUGAST.SFPE.A2011.CCAA01.TXT'

#La tercera variable, CODIGO, ha de ser leIda como carActer

tipo=rep(NA,13);tipo[3]='character'

formato=c(4,5,5,15,5,12,15,rep(13,5),11)

datos_gastos=read.fwf(nf,widths=formato,colClasses = tipo)

#le damos nombres; se puede hacer dentro de read.fwf()

names(datos_gastos)[1]='ANOENC'

names(datos_gastos)[2]='NUMERO'

names(datos_gastos)[3]='CODIGO'

names(datos_gastos)[4]='GASTO'

Page 19: El entorno de programación estadística R aplicado a la ...personal.us.es/jmayor/ficheros/curso_epf_pre.pdf · El entorno de programación estadística R aplicado a la producción

19

names(datos_gastos)[5]='PORCEN'

names(datos_gastos)[6]='CANTIDAD'

names(datos_gastos)[7]='GASTMON'

names(datos_gastos)[8]='GASTONOM1'

names(datos_gastos)[9]='GASTONOM2'

names(datos_gastos)[10]='GASTONOM3'

names(datos_gastos)[11]='GASTONOM4'

names(datos_gastos)[12]='GASTONOM5'

names(datos_gastos)[13]='FACTOR'

for (i in 4:12) datos_gastos[i]=datos_gastos[i]/100

datos_gastos[13]=datos_gastos[13]/10^6

Es decir, el cualificador colClasses, que por defecto es un

vectos de NA, se puede definir como un vector de tipos para cada

variable. Los tipos pueden ser character, numeric, integer, etc.

NÓTESE como las variables con decimales hay que procesarlas después

de la lectura, dividiendo por la potencia de 10 adecuada.

Page 20: El entorno de programación estadística R aplicado a la ...personal.us.es/jmayor/ficheros/curso_epf_pre.pdf · El entorno de programación estadística R aplicado a la producción

20

Otra forma, más controlada, de leer este tipo de ficheros, es

emplear la función read.fortran(), que es similar a la anterior,

pero emplea los formatos de lectura del lenguaje Fortran. Su forma

básica es,

read.fortran(file, format, ...)

donde format es un vector conteniendo los formatos. Los más

empleados son,

In : entero de n posiciones.

An : alfanumérico de n posiciones.

Xn : salto de n posiciones.

Fn.m : número real con nposiciones, y m decimales.

Por ejemplo, para leer el fichero de gastos, el código sería,

nf='C:\\r_epf\\FUSUGAST.SFPE.A2011.CCAA01.TXT'

#lectura con formato; se puede saltar al principio; ver ayuda

formato=c('A4','I5','A5','F15.2','F5.2','F12.2','F15.2',rep('F13.2'

,5),'F11.6')

datos_gastos=read.fortran(nf,formato)

#le damos nombres; se puede hacer dentro de read.fortran()

names(datos_gastos)[1]='ANOENC'

Page 21: El entorno de programación estadística R aplicado a la ...personal.us.es/jmayor/ficheros/curso_epf_pre.pdf · El entorno de programación estadística R aplicado a la producción

21

names(datos_gastos)[2]='NUMERO'

names(datos_gastos)[3]='CODIGO'

names(datos_gastos)[4]='GASTO'

names(datos_gastos)[5]='PORCEN'

names(datos_gastos)[6]='CANTIDAD'

names(datos_gastos)[7]='GASTMON'

names(datos_gastos)[8]='GASTONOM1'

names(datos_gastos)[9]='GASTONOM2'

names(datos_gastos)[10]='GASTONOM3'

names(datos_gastos)[11]='GASTONOM4'

names(datos_gastos)[12]='GASTONOM5'

names(datos_gastos)[13]='FACTOR'

#Fin de lectura del fichero de gastos

Page 22: El entorno de programación estadística R aplicado a la ...personal.us.es/jmayor/ficheros/curso_epf_pre.pdf · El entorno de programación estadística R aplicado a la producción

22

3. LECTURA DE FICHEROS CON DATOS DELIMITADOS

Si las variables estuvieran separadas por algún tipo de

separador, podríamos emplear la instrucción clásica de lectura de

datos que es read.table(). Por ejemplo, si los datos de gastos

tienen la siguiente estructura,

"ANOENC";"NUMERO";"CODIGO";"GASTO";"PORCEN";"CANTIDAD";"GASTMON";"G

ASTNOM1";"GASTNOM2";"GASTNOM3";"GASTNOM4";"GASTNOM5";"FACTOR"

"2011";"00012";"01111";"7789.3";"0.6";".";"7789.3";".";".";".";".";

".";"1618.35266"

"2011";"00012";"01112";"1056956.39";"1.77";"343853.33";"1056956.39"

;".";".";".";".";".";"1618.35266"

"2011";"00012";"01113";"266228.06";"3.8";"35534.36";"266228.06";"."

;".";".";".";".";"1618.35266"

"2011";"00012";"01114";"84063.88";"0.03";"46411.99";"84063.88";".";

".";".";".";".";"1618.35266"

"2011";"00012";"01115";"106562.52";"6.23";".";"106562.52";".";".";"

.";".";".";"1618.35266"

"2011";"00012";"01116";"348.08";"0.6";".";"348.08";".";".";".";".";

".";"1618.35266"

Page 23: El entorno de programación estadística R aplicado a la ...personal.us.es/jmayor/ficheros/curso_epf_pre.pdf · El entorno de programación estadística R aplicado a la producción

23

los podemos leer con el siguiente código,

#Nombre del fichero de datos

nf="C:\\r_epf\\GASTOAND_2011.txt"

#R por defecto asigna los tipos de las variables por similitud.

#Nosotros queremos que la tercera variable, que son los cOdigos

#de gastos, la lea como carActer. Entonces tenemos que emplear

#la especificación colClasses.

formato=rep(NA,13)

formato[3]='character'

#NOTA: la especificaciOn na.strings=c(".") hace que todos los datos del

#tipo "." los lea como NA. Esto lo hacemos porque en el fichero de gastos

#hay variables que tienen valores "." en lugar de "0.0"

#Y ya leemos

datos_gastos=read.table(nf,header=T,sep=";",quote="\"",colClasses=formato,

na.strings=c("."),dec=".")

#Fin de lectura del fichero de gastos.

Page 24: El entorno de programación estadística R aplicado a la ...personal.us.es/jmayor/ficheros/curso_epf_pre.pdf · El entorno de programación estadística R aplicado a la producción

24

OBSERVACIONES: En la instrucción de lectura,

datos_gastos=read.table(nf,header=T,sep=";",quote="\"",colClasses=formato,

na.strings=c("."),dec=".")

tenemos,

header=T: Lo ponemos porque la primera línea contiene los nombres

de las variables.

sep=";" : El carácter separador de variables.

dec="." : El carácter empleado como separador de decimales.

na.strings=c(".") : Nótese que hay datos iguales a "."; entonces

read.table() los lee, por defecto, como cadena de caracteres igual

a ".", lo que origina problemas a la hora de realizar operaciones.

Con na.strings=c(".") forzamos a que dichos datos sean leídos

como NA, es decir, el tipo 'not available'. Que no produce

problemas pues son interpretados como cero a la hora de sumar,

operar, etc.

Page 25: El entorno de programación estadística R aplicado a la ...personal.us.es/jmayor/ficheros/curso_epf_pre.pdf · El entorno de programación estadística R aplicado a la producción

25

4. CODIFICACIÓN Y RECODIFICACIÓN DE VARIABLES

A veces es necesario codificar una variable, agrupando conjuntos de

valores y codificando los mismos. Por ejemplo, la variable EDADSP,

perteneciente al fichero de hogares, y que representa la edad del

sustentador principal, viene en años, y hay que agrupar en los

grupos de 16 a 29, de 30 a 44, de 45a 64, y mayores o iguales de

65. Con la instrucción,

datos_hogar$EDADC=cut(datos_hogar$EDADSP,c(16,29,44,64,150),labels=F)

creamos una nueva variable, EDADC, con códigos para cada grupo. Al

especificar labels=F, se crean por defecto los códigos 1, 2, 3 y 4.

En otras situaciones, es necesario recodificar, es decir,

modificar los códigos de una variable ya codificada, usualmente por

actualizaciones en la definición de los códigos.

Page 26: El entorno de programación estadística R aplicado a la ...personal.us.es/jmayor/ficheros/curso_epf_pre.pdf · El entorno de programación estadística R aplicado a la producción

26

Por ejemplo, la variable ESTUDIOSP, en el fichero de hogares,

está codificada de una forma obsoleta, y hay que actualizar dichos

códigos.

Lo hacemos creando una nueva variable, NEST, con el siguiente

código que es casi autoexplicativo. Recuérdese que | es el Ó

lógico,

#Recodificamos la variable estudios del sustentador principal,

ESTUDIOSSP,

#para adaptarlo a los nuevos cOdigos, y creamos la variable NEST

datos_hogar$NEST=datos_hogar$ESTUDIOSSP

#RecodificaciOn

datos_hogar$NEST[datos_hogar$NEST==1 | datos_hogar$NEST==2]=1

datos_hogar$NEST[datos_hogar$NEST==3]=2

datos_hogar$NEST[datos_hogar$NEST==4 | datos_hogar$NEST==5]=3

datos_hogar$NEST[datos_hogar$NEST==6]=4

datos_hogar$NEST[datos_hogar$NEST==7 | datos_hogar$NEST==8]=5

datos_hogar$NEST[datos_hogar$NEST==9 | datos_hogar$NEST==10 |

datos_hogar$NEST==11]=6

datos_hogar$NEST[datos_hogar$NEST==-9]=7

Page 27: El entorno de programación estadística R aplicado a la ...personal.us.es/jmayor/ficheros/curso_epf_pre.pdf · El entorno de programación estadística R aplicado a la producción

27

#otra forma que emplea el operador lOgico de inclusiOn

#datos_hogar$NEST[datos_hogar$NEST %in% c(1,2)] =1

#datos_hogar$NEST[datos_hogar$NEST %in% c(3)] =2

#datos_hogar$NEST[datos_hogar$NEST %in% c(4,5)] =3

#datos_hogar$NEST[datos_hogar$NEST %in% c(6)] =4

#datos_hogar$NEST[datos_hogar$NEST %in% c(7,8)] =5

#datos_hogar$NEST[datos_hogar$NEST %in% c(9,10,11)]=6

#datos_hogar$NEST[datos_hogar$NEST %in% c(-9)] =7

Page 28: El entorno de programación estadística R aplicado a la ...personal.us.es/jmayor/ficheros/curso_epf_pre.pdf · El entorno de programación estadística R aplicado a la producción

28

5. MANIPULACIÓN DE TABLAS

Entendemos por tablas, tanto matrices como dataframes.

Básicamente son arreglos bidimensionales.

Si TABLA1 y TABLA2 son estructuras de este tipo de este tipo, y

suponemos que todas sus componentes son numéricas,

colSums(TABLA1) : es un vector con la suma de las columnas de

TABLA1.

rowSums(TABLA1) : es un vector con la suma de las filas de

TABLA1.

apply(TABLA1,1,fun) : aplica a cada fila de TABLA1 la función fun.

apply(TABLA1,2,fun) : aplica a cada columna de TABLA1 la función

fun.

rbind(TABLA1,TABLA2): fusiona TABLA1 y TABLA2 por filas. Supuesta

compatibilidad.

cbind(TABLA1,TABLA2): fusiona TABLA1 y TABLA2 por columnas.

Supuesta compatibilidad

Page 29: El entorno de programación estadística R aplicado a la ...personal.us.es/jmayor/ficheros/curso_epf_pre.pdf · El entorno de programación estadística R aplicado a la producción

29

EJEMPLO:

> d=data.frame(x=1:5,y=(1:5)^2)

> apply(d,1,sum) #suma los elementos de cada fila

> apply(d,2,sum) #suma los elementos de cada columna

> apply(d,2,sample) #permuta los elementos de cada columna

> apply(d,2,function(x)sample(x,3)) #muestra de tamaño 3, de cada columna

NÓTESE como es posible aplicar otras funciones más complicadas,

definiéndolas en el momento.

Page 30: El entorno de programación estadística R aplicado a la ...personal.us.es/jmayor/ficheros/curso_epf_pre.pdf · El entorno de programación estadística R aplicado a la producción

30

6. CREACIÓN DE VECTORES Y TABLAS DE RESULTADOS

Supongamos que var1 es una variable conteniendo los valores de

una determinada característica; y var2 y var3 son variables, de la

misma longitud que var1, que contienen categorías, por ejemplo sexo

codificado como 1 y 2, o edad codificada como 1, 2, 3 y 4.

Entonces,

tapply(var1,var2,FUN)

aplica la función FUN a cada grupo de valores de var1 definido por

las categorías de var2. Si FUN es una función de resumen, como sum,

length, mean, etc., entonces obviamente genera un vector de tantas

componentes como categorías hay.

EJEMPLO:

> var1=c(20,34,34,23,12,45,67,34)

> var2=c(1,2,1,2,2,1,1,1)

> tapply(var1,var2,sum)

Page 31: El entorno de programación estadística R aplicado a la ...personal.us.es/jmayor/ficheros/curso_epf_pre.pdf · El entorno de programación estadística R aplicado a la producción

31

Y para dos variables,

tapply(var1,list(var2,var3),FUN)

aplica la función FUN a cada grupo de valores de var1 definido por

los cruces de las categorías de var2 con las de var3.

Si FUN es una función de resumen, como sum, length, mean, etc.,

entonces obviamente genera una tabla de tantas filas y columnas

como categorías respectivas de var2 y var3 hay.

EJEMPLO:

> var1=rexp(1000,0.1) #1000 valores Exp(10)

> var2=sample(c("1:<20","2:21-40","3:>40"),1000,rep=T) #edades categorizadas

> var3=sample(c("H","M"),1000,rep=T) #sexo

> tapply(var1,list(var2,var3),mean) #media

> tapply(var1,list(var2,var3),length) #número de elementos

> tapply(var1,list(var2,var3),mean)-> tabla

> apply(tabla,2,function(x)x/rowSums(tabla)*100) #porcentajes por filas

Page 32: El entorno de programación estadística R aplicado a la ...personal.us.es/jmayor/ficheros/curso_epf_pre.pdf · El entorno de programación estadística R aplicado a la producción

32

7. ALGUNAS FUNCIONES INTERESANTES

tail(v,n) : cola de n elementos del vector v. Si n=1, el último.

Es aplicable también a tablas.

t(TABLA) : traspone la tabla TABLA.

diag(v) : matriz diagonal con diagonal el vector v.

sweep(TABLA,2,v,"/") : divide cada columna de tabla por los respectivos

componentes de v. Y 1 para filas.

Lo anterior es equivalente a TABLA%*%diag(1/v)

Page 33: El entorno de programación estadística R aplicado a la ...personal.us.es/jmayor/ficheros/curso_epf_pre.pdf · El entorno de programación estadística R aplicado a la producción

33

8. ESCRITURA DE TABLAS

Formato de texto básico:

Para escribir la tabla TABLA, con nombre tabla.txt empleamos,

write.table(TABLA,'tabla.txt',sep='\t',row.names=F)

Por defecto escribe en el directorio o carpeta de trabajo.

Admite fijar una trayectoria.

Formato Excel:

Para escribir la tabla TABLA, con nombre tabla.xlsx empleamos,

write.xlsx(TABLA,'tabla.xlsx',row.names='F')

Por defecto escribe en el directorio o carpeta de trabajo.

Admite fijar una trayectoria.

Page 34: El entorno de programación estadística R aplicado a la ...personal.us.es/jmayor/ficheros/curso_epf_pre.pdf · El entorno de programación estadística R aplicado a la producción

34

NOTAS:

(a) Requiere cargar la librería xlsx.

(b) Posibles problemas con Java y versión R de 64 bits si Java no

está convenientemente actualizado. Hay que tener instalada la

versión de de 64 bits.

(c) Librería con muchas posibilidades.

(d) Hay otras librerías que permiten el intecambio con Excel. Por

ejemplo XLConnect y xlsReadWrite.