sábado, 1 de junio de 2024

Libro de códigos

Procesaminetos basicos. Libro de codigos

En ocasiones disponemos de data que no dispone de libro de códigos. En ese caso, puede ser una buena práctica, una vez que la data esté totalmente limpia, recrear el libro de códigos. Es decir, un libro en el que explicas qué variables hemos eliminado, qué variables hemos dejado, qué transformaciones hemos hecho sobre estas variables, el tipo de variable, entre otros elementos.

Para generar el libro de código describiendo las variables que hemos utilizado, transformado, etc, necesitamos el paquete memisc.

require(memisc)

Entre los parámetros para crear el libro de códigos son - description: la empleamos para describir qué quiere decir/a qué se refiere la variable. - measurement : el tipo de medida/clase de la variable - ording : especifica por ejemplo el tipo de pregunta que dió origen a la variable - labels :los valores de las variables ordinales o nominales y su correspondiente etiqueta - missing.values: qué valores se interpretan como valores faltantes

Usemos el ejemplo que nos da el paquete memisc, modificandolo ligeramente (traduciendo al castellano los nombres y conceptos relacionados con las variables):

head(Data)
## 
## Data set with 300 observations and 3 variables
## 
##    voto region  ingresos
##  1   99      1 5246.9522
##  2    1      1 2479.4199
##  3   99      1 1564.8831
##  4    2      1 2131.6809
##  5    1     99 3865.4578
##  6    9      2 1209.5416
##  7    9      1 1233.1830
##  8    9      1 2319.3813
##  9   99      1 2613.9046
## 10   99      1 9897.8577
## 11   99     99 2964.4593
## 12    3      2 5165.4065
## 13    8     99 4125.4050
## 14   97     99 1940.9500
## 15    8      1 2624.9745
## 16   99     99 3901.8533
## 17    9      1 1801.5066
## 18    9     99 3472.3475
## 19    3      1 2042.6780
## 20    9      2 2570.0118
## 21    9      2  409.9108
## 22    1      3 5431.7007
## 23   99      1 1178.5521
## 24    9      2 2272.2048
## 25    2     99  956.8221
## .. .... ...... .........
## (27 of 300 observations shown)

Construimos el libro:

Data <- within(Data,{
        description(voto) <- "intencion de voto"
        description(region) <- "Region de residencia"
        description(ingresos) <- "Ingreso del hogar"
        wording(voto) <- "Si las elecciones generales ocurrieran el proximo martes, por cual candidato votaria usted?"
        wording(ingresos) <- "Cuanto ingreso se obtiene en cada hogar, contando y sumando todas las fuentes mencionadas"
        foreach(x=c(voto,region),{
                measurement(x) <- "nominal"
        })
        measurement(ingresos) <- "ratio"
        labels(voto) <- c(
                Conservadores            =  1,
                Laboristas               =  2,
                "Democratas liberales"   =  3,
                "No se"                  =  8,
                "No constesta"           =  9,
                "No aplica"              = 97,
                "NA"                     = 99)
        labels(region) <- c(
                "Gran Caracas"             =  1,
                "Oriente"                  =  2,
                "Occidente"                =  3,
                "No aplica"              = 97,
                "NA"                     = 99)
        foreach(x=c(voto,region,ingresos),{
                annotation(x)["Aclaratoria"] <- "Este no es un item de una encuentas real, eh? ..."
        })
        missing.values(voto) <- c(8,9,97,99)
        missing.values(region) <- c(97,99)
})

Este libro de código quedaría así:

codebook(Data)
## ===========================================================================
## 
##    voto 'intencion de voto'
## 
##    "Si las elecciones generales ocurrieran el proximo martes, por cual
##    candidato votaria usted?"
## 
## ---------------------------------------------------------------------------
## 
##    Storage mode: double
##    Measurement: nominal
##    Missing values: 8, 9, 97, 99
## 
##              Values and labels    N    Percent 
##                                                
##     1   'Conservadores'          31   28.4 10.3
##     2   'Laboristas'             34   31.2 11.3
##     3   'Democratas liberales'   44   40.4 14.7
##     8 M 'No se'                  34        11.3
##     9 M 'No constesta'           57        19.0
##    97 M 'No aplica'              49        16.3
##    99 M 'NA'                     51        17.0
## 
##    Aclaratoria:
## 
##        Este no es un item de una encuentas real, eh? ...
## 
## ===========================================================================
## 
##    region 'Region de residencia'
## 
## ---------------------------------------------------------------------------
## 
##    Storage mode: double
##    Measurement: nominal
##    Missing values: 97, 99
## 
##      Values and labels    N    Percent 
##                                        
##     1   'Gran Caracas'  129   51.0 43.0
##     2   'Oriente'        86   34.0 28.7
##     3   'Occidente'      38   15.0 12.7
##    97 M 'No aplica'       0         0.0
##    99 M 'NA'             47        15.7
## 
##    Aclaratoria:
## 
##        Este no es un item de una encuentas real, eh? ...
## 
## ===========================================================================
## 
##    ingresos 'Ingreso del hogar'
## 
##    "Cuanto ingreso se obtiene en cada hogar, contando y sumando todas las
##    fuentes mencionadas"
## 
## ---------------------------------------------------------------------------
## 
##    Storage mode: double
##    Measurement: ratio
## 
##             Min:    275.674
##             Max:  19362.183
##            Mean:   2730.607
##        Std.Dev.:   2305.636
##        Skewness:      2.821
##        Kurtosis:     12.735
## 
##    Aclaratoria:
## 
##        Este no es un item de una encuentas real, eh? ...

Para crear nuestro libro de código usando estas funciones, podríamos simplemente crear un nuevo objeto y emplear la función data.set(). Hagamoslo usando sola las cinco primeras variables de nuestro data.frame

a <-nvH[,1:5]
names(a)<-tolower(names(a))
ejemplo<-data.set(a)

codebook(ejemplo)
## ===========================================================================
## 
##    a.consejo.comunal
## 
## ---------------------------------------------------------------------------
## 
##    Storage mode: integer
##    Measurement: nominal
## 
##                        Values and labels    N    Percent 
##                                                          
##    1   'Ali Primera'                      315   27.2 27.2
##    2   'Con la Unión la Nueva Esperanza'  260   22.4 22.4
##    3   'La esperanza de Rómulo Gallegos'  183   15.8 15.8
##    4   'La Pica'                           42    3.6  3.6
##    5   'Nuevo Horizonte III'              359   31.0 31.0
## 
## ===========================================================================
## 
##    a.plantas
## 
## ---------------------------------------------------------------------------
## 
##    Storage mode: integer
##    Measurement: nominal
## 
##    Values and labels    N    Percent 
##                                      
##             1   '1'   707   61.0 61.0
##             2   '2'   314   27.1 27.1
##             3   '3'    96    8.3  8.3
##             4   'NR'   42    3.6  3.6
## 
## ===========================================================================
## 
##    a.viviends
## 
## ---------------------------------------------------------------------------
## 
##    Storage mode: integer
##    Measurement: nominal
## 
##    Values and labels    N    Percent 
##                                      
##             1   '1'   839   72.4 72.4
##             2   '2'   195   16.8 16.8
##             3   '3'    87    7.5  7.5
##             4   '4'    29    2.5  2.5
##             5   '8'     8    0.7  0.7
##             6   'NR'    1    0.1  0.1
## 
## ===========================================================================
## 
##    a.terreno
## 
## ---------------------------------------------------------------------------
## 
##    Storage mode: integer
##    Measurement: nominal
## 
##    Values and labels    N    Percent 
##                                      
##             1   'No'  230   19.8 19.8
##             2   'NR'  205   17.7 17.7
##             3   'Si'  724   62.5 62.5
## 
## ===========================================================================
## 
##    a.hogars
## 
## ---------------------------------------------------------------------------
## 
##    Storage mode: integer
##    Measurement: nominal
## 
##    Values and labels    N    Percent 
##                                      
##             1   '1'   693   59.8 59.8
##             2   '2'   280   24.2 24.2
##             3   '3'    93    8.0  8.0
##             4   '4'    71    6.1  6.1
##             5   '5'    15    1.3  1.3
##             6   '6'     6    0.5  0.5
##             7   'NR'    1    0.1  0.1

la función nos genera, pues, un libro de código por defecto. El libro de código creado nos ofrece informacion sobre la forma en que se ha guarddo la variable, por ejemplo la variable ‘consejo comunal’ (note que la primera parte del corresponde al nombre del data.frame desde donde se creó el data.set), el modo de almacenammiento es ‘integer’; la medida: ‘nominal’; y luego obtenemos una tabla en la que se nos dan, primero los valores y la categorias de la variable, la cantidad de observaciones, frecuencia absoluta, en cada categoría y la frecuencia relativa

Esta información ya es valiosa; sin embargo, es mucho mejor si agregamos información más específica, de forma tal que el libro de código resulte de utilidad para quien reciba nuestros análisis, y la data que hemos empleado para generar esos análisis:

ejemplo<- within(ejemplo,{
        # descripciones de las variables
        description( a.consejo.comunal)<-'Consejo Comunal de adscripcion de la zona'
        description(a.plantas) <-'Cantidad de pisos de la casa'
        description(a.viviends) <-'cantidad viviendas en el area de la casa'
        description(a.terreno) <-'Extension adicional de tierra'
        description(a.hogars)<-'Cantidad de hogares independiente en la vivienda'
        # reorganizar el tipo de variable. Note el uso de 'foreach'
        labels(a.plantas) <- c(
               "Una planta"            =1,
               "Dos plantas"           =2,
               "Tres plantas"          =3,
               "NR"                    =4
               )
        labels(a.viviends)<-c(
                "Una vivienda"            =1,
                "Dos vivendas"           =2,
                "Tres viviendas"          =3,
                "Cuatro viviendas"        =4,
                "Cinco o mas viv."        =5,
                "NR"                     =6
                )
        
        labels( a.hogars)<-c(
                "Un hogar"              =1,
                "Dos hogares"           =2,
                "Tres hogares"          =3,
                "Cuatro hogares"        =4,
                "Cinco hogares"         =5,
                "Seis hogares"          =6,
                "NR"                    =7
                )
        foreach(x=c(a.plantas, a.viviends,  a.hogars),{
                measurement(x) <- "ordinal"
                })
        
})

codebook(ejemplo)
## ===========================================================================
## 
##    a.consejo.comunal 'Consejo Comunal de adscripcion de la zona'
## 
## ---------------------------------------------------------------------------
## 
##    Storage mode: integer
##    Measurement: nominal
## 
##                        Values and labels    N    Percent 
##                                                          
##    1   'Ali Primera'                      315   27.2 27.2
##    2   'Con la Unión la Nueva Esperanza'  260   22.4 22.4
##    3   'La esperanza de Rómulo Gallegos'  183   15.8 15.8
##    4   'La Pica'                           42    3.6  3.6
##    5   'Nuevo Horizonte III'              359   31.0 31.0
## 
## ===========================================================================
## 
##    a.plantas 'Cantidad de pisos de la casa'
## 
## ---------------------------------------------------------------------------
## 
##    Storage mode: integer
##    Measurement: ordinal
## 
##     Values and labels    N    Percent 
##                                       
##    1   'Una planta'    707   61.0 61.0
##    2   'Dos plantas'   314   27.1 27.1
##    3   'Tres plantas'   96    8.3  8.3
##    4   'NR'             42    3.6  3.6
## 
## ===========================================================================
## 
##    a.viviends 'cantidad viviendas en el area de la casa'
## 
## ---------------------------------------------------------------------------
## 
##    Storage mode: integer
##    Measurement: ordinal
## 
##         Values and labels    N    Percent 
##                                           
##    1   'Una vivienda'      839   72.4 72.4
##    2   'Dos vivendas'      195   16.8 16.8
##    3   'Tres viviendas'     87    7.5  7.5
##    4   'Cuatro viviendas'   29    2.5  2.5
##    5   'Cinco o mas viv.'    8    0.7  0.7
##    6   'NR'                  1    0.1  0.1
## 
## ===========================================================================
## 
##    a.terreno 'Extension adicional de tierra'
## 
## ---------------------------------------------------------------------------
## 
##    Storage mode: integer
##    Measurement: nominal
## 
##    Values and labels    N    Percent 
##                                      
##             1   'No'  230   19.8 19.8
##             2   'NR'  205   17.7 17.7
##             3   'Si'  724   62.5 62.5
## 
## ===========================================================================
## 
##    a.hogars 'Cantidad de hogares independiente en la vivienda'
## 
## ---------------------------------------------------------------------------
## 
##    Storage mode: integer
##    Measurement: ordinal
## 
##       Values and labels    N    Percent 
##                                         
##    1   'Un hogar'        693   59.8 59.8
##    2   'Dos hogares'     280   24.2 24.2
##    3   'Tres hogares'     93    8.0  8.0
##    4   'Cuatro hogares'   71    6.1  6.1
##    5   'Cinco hogares'    15    1.3  1.3
##    6   'Seis hogares'      6    0.5  0.5
##    7   'NR'                1    0.1  0.1

Al visuaizar el contenido del data set:

ejemplo
## 
## Data set with 1159 observations and 5 variables
## 
##      a.consejo.comunal    a.plantas       a.viviends a.terreno    a.hogars
##  1 Nuevo Horizonte III   Una planta     Una vivienda        Si    Un hogar
##  2 Nuevo Horizonte III   Una planta     Una vivienda        Si    Un hogar
##  3 Nuevo Horizonte III  Dos plantas     Una vivienda        Si    Un hogar
##  4 Nuevo Horizonte III   Una planta     Una vivienda        Si    Un hogar
##  5 Nuevo Horizonte III  Dos plantas     Una vivienda        Si    Un hogar
##  6 Nuevo Horizonte III   Una planta     Una vivienda        Si    Un hogar
##  7 Nuevo Horizonte III   Una planta     Una vivienda        Si    Un hogar
##  8 Nuevo Horizonte III   Una planta     Una vivienda        Si    Un hogar
##  9 Nuevo Horizonte III   Una planta     Una vivienda        No    Un hogar

## .. ................... ............ ................ ......... ...........
## (27 of 1159 observations shown)

Para utilizar estos valores, simplemente retransformamos en data.set en data.frame y podremos entonces operar con él:

ejemploDf<- as.data.frame(ejemplo)
barplot(table(ejemploDf[,2]), main="Numero de plantas según vivienda", border="white")
grid()

Notese que antes hacer esta retransformación no era factible usar la función table, o en todo caso nos arrojaba ceros como número de casos en cada categoría. Fíjese además que ahora podemo tener las categorias originales, pero cuando visualizamos la data, se nos ofren los nombres que hemos generados

No hay comentarios.: