En este Rpubs lo que se pretende brindar es una metodología para realizar un análisis descriptivo de una base de datos siguiendo la ecnuesta LAPOP, que es la base de datos del Barómetro de las Américas, del Latin American Public Opinion Project (LAPOP), ubicado en la Universidad de Vanderbilt.

Un desarrollo adicional y más completo se encuentra en la página https://rpubs.com/dsulmont/94167. En este taller se tocan gráficos y estadísticas básicas complementarias.

La base de datos se encuentra consolidada en https://drive.google.com/file/d/1m-uskuClBiItEkwQIFjL7dWErvIZM8NB/view?usp=sharing

Limpiamos la consola de trabajo

rm(list=ls())

Librerías a usar

if (!require("foreign")) install.packages("foreign")
## Loading required package: foreign
if (!require("haven")) install.packages("haven")
## Loading required package: haven
## Warning: package 'haven' was built under R version 3.6.3
if (!require("agricolae")) install.packages("agricolae")
## Loading required package: agricolae
## Warning: package 'agricolae' was built under R version 3.6.3
if (!require("Hmisc")) install.packages("Hmisc")
## Loading required package: Hmisc
## Warning: package 'Hmisc' was built under R version 3.6.3
## Loading required package: lattice
## Loading required package: survival
## Warning: package 'survival' was built under R version 3.6.3
## Loading required package: Formula
## Loading required package: ggplot2
## Warning: package 'ggplot2' was built under R version 3.6.3
## 
## Attaching package: 'Hmisc'
## The following objects are masked from 'package:base':
## 
##     format.pval, units
if (!require("fBasics")) install.packages("fBasics")
## Loading required package: fBasics
## Loading required package: timeDate
## 
## Attaching package: 'timeDate'
## The following objects are masked from 'package:agricolae':
## 
##     kurtosis, skewness
## Loading required package: timeSeries
if (!require("plotrix")) install.packages("plotrix") #paquete que contiene la funcion pie3D para realizar el diagrama 3D
## Loading required package: plotrix

LECTURA DE DATOS

Un método alternativo, no recomendado por muchos, pero que forma parte del universo de opciones de llamado de bases de datos de R es el código file.choose que nos permite cargar de forma manual cualquier tipo de datos.

Para el caso, se cargará la base de datos de tipo SPSS, importandola al R. Es importante que el lector sepa donde guardó la base de datos para así poderla cargar. El tipo de carga es similar a la selección de archivos clásica de cualquier programa.

lapop <- as.data.frame(read_sav(file.choose()),encoding = NULL, user_na = TRUE) 

El código a continuación muestra las columnas o variables con las que me pienso quedar.

lapop<-(lapop[,c("b1", "b2", "b3", "b4", "b6", "q1", "pais", "tamano", "q12")])

Para mostrar la cabecera (6 primeras observaciones de la base) usamos la función head. Sin embargo, esta función puede ser modificada agregandole una coma seguida del número de observaciones a mostrar posterior a la especificación de la base. Por ejemplo head(base) es igual a decir head(base, 6) sin embargo se puede especificar head(base, 10) para que muestre las 10 primeras observaciones.

head(lapop)
##   b1 b2 b3 b4 b6 q1 pais tamano q12
## 1 NA  7  1  7  7  1   10     NA   2
## 2  3  5  2  2 NA  1   10     NA   4
## 3  4  5  5  5  5  1   10     NA   2
## 4  2  6  5  7  2  2   10     NA   3
## 5 NA  7 NA  7  7  1   10     NA   0
## 6  6  7  6  5  4  2   10     NA   1
head(lapop, 10)
##    b1 b2 b3 b4 b6 q1 pais tamano q12
## 1  NA  7  1  7  7  1   10     NA   2
## 2   3  5  2  2 NA  1   10     NA   4
## 3   4  5  5  5  5  1   10     NA   2
## 4   2  6  5  7  2  2   10     NA   3
## 5  NA  7 NA  7  7  1   10     NA   0
## 6   6  7  6  5  4  2   10     NA   1
## 7   4  5  3  5  4  2   10     NA   3
## 8   4  5  3  5  7  1   10     NA   2
## 9   2  2  2  3  3  2   10     NA   4
## 10  2  3  2  4  3  1   10     NA   3

Para verificar la estructura de toda la base de datos se puede usar la función str seguida de la base de datos. Esto también es válido para una variable.

str(lapop)
## 'data.frame':    151341 obs. of  9 variables:
##  $ b1    : 'haven_labelled' num  NA 3 4 2 NA 6 4 4 2 2 ...
##   ..- attr(*, "label")= chr "¿Hasta qué punto cree usted que los tribunales de justicia del país garantizan u"
##   ..- attr(*, "format.spss")= chr "F6.0"
##   ..- attr(*, "labels")= Named num  1 2 3 4 5 ...
##   .. ..- attr(*, "names")= chr  "1 Nada" "2" "3" "4" ...
##  $ b2    : 'haven_labelled' num  7 5 5 6 7 7 5 5 2 3 ...
##   ..- attr(*, "label")= chr "¿Hasta qué punto tiene usted respeto por las instituciones políticas del país?"
##   ..- attr(*, "format.spss")= chr "F6.0"
##   ..- attr(*, "labels")= Named num  1 2 3 4 5 ...
##   .. ..- attr(*, "names")= chr  "1 Nada" "2" "3" "4" ...
##  $ b3    : 'haven_labelled' num  1 2 5 5 NA 6 3 3 2 2 ...
##   ..- attr(*, "label")= chr "¿Hasta qué punto cree usted que los derechos básicos del ciudadano están bien pr"
##   ..- attr(*, "format.spss")= chr "F6.0"
##   ..- attr(*, "labels")= Named num  1 2 3 4 5 ...
##   .. ..- attr(*, "names")= chr  "Nada protegido" "2" "3" "4" ...
##  $ b4    : 'haven_labelled' num  7 2 5 7 7 5 5 5 3 4 ...
##   ..- attr(*, "label")= chr "¿Hasta qué punto se siente usted orgulloso de vivir bajo el sistema político del"
##   ..- attr(*, "format.spss")= chr "F6.0"
##   ..- attr(*, "labels")= Named num  1 2 3 4 5 ...
##   .. ..- attr(*, "names")= chr  "1 Nada" "2" "3" "4" ...
##  $ b6    : 'haven_labelled' num  7 NA 5 2 7 4 4 7 3 3 ...
##   ..- attr(*, "label")= chr "¿Hasta qué punto piensa usted que se debe apoyar al sistema político del país?"
##   ..- attr(*, "format.spss")= chr "F6.0"
##   ..- attr(*, "labels")= Named num  1 2 3 4 5 ...
##   .. ..- attr(*, "names")= chr  "1 Nada" "2" "3" "4" ...
##  $ q1    : 'haven_labelled' num  1 1 1 2 1 2 2 1 2 1 ...
##   ..- attr(*, "label")= chr "Género"
##   ..- attr(*, "format.spss")= chr "F6.0"
##   ..- attr(*, "labels")= Named num  1 2 888888 988888 999999
##   .. ..- attr(*, "names")= chr  "Hombre" "Mujer" "DK" "NR" ...
##  $ pais  : 'haven_labelled' num  10 10 10 10 10 10 10 10 10 10 ...
##   ..- attr(*, "label")= chr "País"
##   ..- attr(*, "format.spss")= chr "F2.0"
##   ..- attr(*, "display_width")= int 6
##   ..- attr(*, "labels")= Named num  1 2 3 4 5 6 7 8 9 10 ...
##   .. ..- attr(*, "names")= chr  "México" "Guatemala" "El Salvador" "Honduras" ...
##  $ tamano: 'haven_labelled' num  NA NA NA NA NA NA NA NA NA NA ...
##   ..- attr(*, "label")= chr "Tamaño del lugar"
##   ..- attr(*, "format.spss")= chr "F6.0"
##   ..- attr(*, "labels")= Named num  1 2 3 4 5 ...
##   .. ..- attr(*, "names")= chr  "Capital nacional (área metropolitana)" "Ciudad grande" "Ciudad mediana" "Ciudad pequeña" ...
##  $ q12   : 'haven_labelled' num  2 4 2 3 0 1 3 2 4 3 ...
##   ..- attr(*, "label")= chr "¿Tiene hijos(as)? ¿Cuántos?"
##   ..- attr(*, "format.spss")= chr "F6.0"
##   ..- attr(*, "labels")= Named num  0 888888 988888 999999
##   .. ..- attr(*, "names")= chr  "Ninguno" "DK" "NR" "N/A"
str(lapop$b1)
##  'haven_labelled' num [1:151341] NA 3 4 2 NA 6 4 4 2 2 ...
##  - attr(*, "label")= chr "¿Hasta qué punto cree usted que los tribunales de justicia del país garantizan u"
##  - attr(*, "format.spss")= chr "F6.0"
##  - attr(*, "labels")= Named num [1:10] 1 2 3 4 5 ...
##   ..- attr(*, "names")= chr [1:10] "1 Nada" "2" "3" "4" ...

a) Estadísticas descriptivas y graficos de una variable cualitativa

La estadística descriptiva clásica es un gráfico de frecuencias. R nos permite desarrollar eso con la función table, arrojándonos las frecuencias (o conteos)

La variable b1 representa a la pregunta: ¿Hasta que punto cree que los tribunales de justicia de [PAIS] garantizan un juicio justo?

table(lapop$b1)
## 
##     1     2     3     4     5     6     7 
## 18379 14105 25208 32566 28381 12811 10249

La variable b1 es de tipo factor. Para poder sumarla a las demás es necesario convertirla en un vector numérico y excluir los valores perdidos (DK, NR y N/A).

Lo primero que se hace es transformarla a numérica con el código as.numeric. Para realizar la prueba convertiremos todos los valores mayores que 7 a valor nulo NA y verificaremos la frecuencia. Fíjese en los dos códigos mostrados, el primero solamente con table y el segundo donde se especifica useNA

lapop$b1.r = as.numeric(lapop$b1) 
lapop$b1.r[lapop$b1.r > 7] <- NA 
table(lapop$b1.r) 
## 
##     1     2     3     4     5     6     7 
## 18379 14105 25208 32566 28381 12811 10249
table(lapop$b1.r, useNA = "alw") 
## 
##     1     2     3     4     5     6     7  <NA> 
## 18379 14105 25208 32566 28381 12811 10249  9642

## Tabla de Frecuencia

  • Frecuencia
ni<-table(lapop$b1.r);ni
## 
##     1     2     3     4     5     6     7 
## 18379 14105 25208 32566 28381 12811 10249
  • Proporciones
fi<-prop.table(table(lapop$b1.r));fi
## 
##          1          2          3          4          5          6          7 
## 0.12970451 0.09954199 0.17789822 0.22982519 0.20029076 0.09040995 0.07232937
  • En porcentajes, redondeados a 2 decimales
pi<-round(prop.table(table(lapop$b1.r))*100,2); pi
## 
##     1     2     3     4     5     6     7 
## 12.97  9.95 17.79 22.98 20.03  9.04  7.23
  • Para anidar por filas con rbind y mostrarlo
b1.tabla<-t(rbind(ni,fi,pi)); b1.tabla
##      ni         fi    pi
## 1 18379 0.12970451 12.97
## 2 14105 0.09954199  9.95
## 3 25208 0.17789822 17.79
## 4 32566 0.22982519 22.98
## 5 28381 0.20029076 20.03
## 6 12811 0.09040995  9.04
## 7 10249 0.07232937  7.23
  • Grafico de Barras
barplot(pi, 
        main="Distribución de la intensidad de Apoyo a los Tribunales de Justicia", 
        xlab="Intensidad",
        ylab="Porcentaje")

La función par(mfrow=c(x,y)) permite dividir al espacio de visualización en x filas y y columnas.

par(mfrow=c(2,1)) # dividirá el espacio en 2 filas y 1 columna.

barplot(table(lapop$b1.r), 
        main="Distribución de la intensidad de Apoyo a los Tribunales de Justicia", 
        col=2,xlab="Intensidad",ylab="Conteo")
barplot(prop.table(table(lapop$b1.r))*100,
        main="Distribución de la intensidad de Apoyo a los Tribunales de Justicia", 
        col=3,xlab="Intensidad",ylab="Proporcion")

Regresamos a la forma por defecto del espacio de visualización

par(mfrow=c(1,1))
  • Gráfico de Sectores Circulares
pie(pi, main="Distribución de la intensidad de Apoyo a los Tribunales de Justicia")

  • Etiquetas Primero se genera una etiqueta con la función paste que tiene la misma función de la función Concatenar en excel.
lbls1 <- paste(names(table(lapop$b1.r)), "\n",
               round(prop.table(table(lapop$b1.r))*100,2),"%", sep="")
pie(pi, labels = lbls1,
    main="Distribución de la intensidad de Apoyo a los Tribunales de Justicia")

  • Gráficos con porcentajes: en 3D
pie3D(table(lapop$b1.r),labels=lbls1,explode=0.1,
      main="Distribución de la intensidad de Apoyo a los Tribunales de Justicia")

Tabla de frecuencia

Para ello especificamos las variables:

  • q1: Sexo

    1=hombre

    2=mujer

  • b1: ¿Hasta que punto cree que los tribunales de justicia de [PAIS] garantizan un juicio justo?

También excluimos los valores perdidos (DK, NR y N/A):

lapop$b1.r <- as.numeric(lapop$b1) 
lapop$b1.r[lapop$b1.r > 7] <- NA
lapop$q1.r <- as.numeric(lapop$q1)
lapop$q1.r[lapop$q1.r > 2] <- NA
  • Primera tabla de frecuencia
tabla1=table(lapop$q1.r,lapop$b1.r)
tabla1
##    
##         1     2     3     4     5     6     7
##   1  9065  7176 12513 16134 13963  6422  4868
##   2  9314  6929 12695 16432 14418  6389  5381

Distribución condicional

Presente la distribución condicional de la intensidad de aprobación a los tribunales de justicia por grupo de sexo. Construya una gráfica adecuada. ¿Es posible afirmar que existe asociación entre ambas variables?

Nota importante

Cuando se especifica dentro de de la función prop.table el término margin=1, lo que arrojará el código es la proporción por filas; es decir, cada fila suma 1 o 100. en caso sea margin=2 arrojará resumen por columnas; es decir, cada columna suma 1.

tabla2=round(prop.table(tabla1,margin=1),2)
tabla2
##    
##        1    2    3    4    5    6    7
##   1 0.13 0.10 0.18 0.23 0.20 0.09 0.07
##   2 0.13 0.10 0.18 0.23 0.20 0.09 0.08
  • Barras agrupadas
barplot(tabla2,col=2:3,beside = T,
        xlab="intensidad de Apoyo a los Tribunales de Justicia",
        ylab="Proporcion de Hombres y Mujeres",
        main="Distribución de la intensidad de Apoyo a los Tribunales \n
        de Justicia segun sexo")

Representación y visualización de Datos cuantitativos discretos

Presente una tabla de distribución de frecuencias para el numero de hijos. Construya una grafica adecuada.

lapop$q12.r <- as.numeric(lapop$q12)
lapop$q12.r[lapop$q12.r > 25] <- NA

ni<-table(lapop$q12.r);ni
## 
##     0     1     2     3     4     5     6     7     8     9    10    11    12 
## 37303 22012 27422 21908 13620  7904  5343  3191  2139  1325   792   429   373 
##    13    14    15    16    17    18    19    20    21    22    23    24    25 
##   160    83    54    43    12    19    20    12     5     7     1     5     7
fi<-prop.table(table(lapop$q12.r));fi
## 
##            0            1            2            3            4            5 
## 2.587091e-01 1.526607e-01 1.901809e-01 1.519395e-01 9.445936e-02 5.481694e-02 
##            6            7            8            9           10           11 
## 3.705553e-02 2.213068e-02 1.483470e-02 9.189328e-03 5.492791e-03 2.975262e-03 
##           12           13           14           15           16           17 
## 2.586882e-03 1.109655e-03 5.756334e-04 3.745085e-04 2.982197e-04 8.322410e-05 
##           18           19           20           21           22           23 
## 1.317715e-04 1.387068e-04 8.322410e-05 3.467671e-05 4.854739e-05 6.935342e-06 
##           24           25 
## 3.467671e-05 4.854739e-05
pi<-round(prop.table(table(lapop$q12.r))*100,2); pi
## 
##     0     1     2     3     4     5     6     7     8     9    10    11    12 
## 25.87 15.27 19.02 15.19  9.45  5.48  3.71  2.21  1.48  0.92  0.55  0.30  0.26 
##    13    14    15    16    17    18    19    20    21    22    23    24    25 
##  0.11  0.06  0.04  0.03  0.01  0.01  0.01  0.01  0.00  0.00  0.00  0.00  0.00
hijos.tabla<-t(rbind(ni,fi,pi))
hijos.tabla
##       ni           fi    pi
## 0  37303 2.587091e-01 25.87
## 1  22012 1.526607e-01 15.27
## 2  27422 1.901809e-01 19.02
## 3  21908 1.519395e-01 15.19
## 4  13620 9.445936e-02  9.45
## 5   7904 5.481694e-02  5.48
## 6   5343 3.705553e-02  3.71
## 7   3191 2.213068e-02  2.21
## 8   2139 1.483470e-02  1.48
## 9   1325 9.189328e-03  0.92
## 10   792 5.492791e-03  0.55
## 11   429 2.975262e-03  0.30
## 12   373 2.586882e-03  0.26
## 13   160 1.109655e-03  0.11
## 14    83 5.756334e-04  0.06
## 15    54 3.745085e-04  0.04
## 16    43 2.982197e-04  0.03
## 17    12 8.322410e-05  0.01
## 18    19 1.317715e-04  0.01
## 19    20 1.387068e-04  0.01
## 20    12 8.322410e-05  0.01
## 21     5 3.467671e-05  0.00
## 22     7 4.854739e-05  0.00
## 23     1 6.935342e-06  0.00
## 24     5 3.467671e-05  0.00
## 25     7 4.854739e-05  0.00

Tabla de Frecuencias

  • Gráfico de Varas
plot(pi, type="h", lwd=2,
     xlab="Numero de hijos",
     ylab="Porcentaje de entrevistados",
     main="Distribución del numero de hijos de los entrevistados")
points(x =as.numeric(row.names(pi)),
       y =as.numeric(pi),
       pch=19,cex=1.5)

Construcción de indicadores y analisis exploratorio datos cuantitativos continuos

  • Indice de Apoyo al Sistema Politico - ASP
str(lapop)
## 'data.frame':    151341 obs. of  12 variables:
##  $ b1    : 'haven_labelled' num  NA 3 4 2 NA 6 4 4 2 2 ...
##   ..- attr(*, "label")= chr "¿Hasta qué punto cree usted que los tribunales de justicia del país garantizan u"
##   ..- attr(*, "format.spss")= chr "F6.0"
##   ..- attr(*, "labels")= Named num  1 2 3 4 5 ...
##   .. ..- attr(*, "names")= chr  "1 Nada" "2" "3" "4" ...
##  $ b2    : 'haven_labelled' num  7 5 5 6 7 7 5 5 2 3 ...
##   ..- attr(*, "label")= chr "¿Hasta qué punto tiene usted respeto por las instituciones políticas del país?"
##   ..- attr(*, "format.spss")= chr "F6.0"
##   ..- attr(*, "labels")= Named num  1 2 3 4 5 ...
##   .. ..- attr(*, "names")= chr  "1 Nada" "2" "3" "4" ...
##  $ b3    : 'haven_labelled' num  1 2 5 5 NA 6 3 3 2 2 ...
##   ..- attr(*, "label")= chr "¿Hasta qué punto cree usted que los derechos básicos del ciudadano están bien pr"
##   ..- attr(*, "format.spss")= chr "F6.0"
##   ..- attr(*, "labels")= Named num  1 2 3 4 5 ...
##   .. ..- attr(*, "names")= chr  "Nada protegido" "2" "3" "4" ...
##  $ b4    : 'haven_labelled' num  7 2 5 7 7 5 5 5 3 4 ...
##   ..- attr(*, "label")= chr "¿Hasta qué punto se siente usted orgulloso de vivir bajo el sistema político del"
##   ..- attr(*, "format.spss")= chr "F6.0"
##   ..- attr(*, "labels")= Named num  1 2 3 4 5 ...
##   .. ..- attr(*, "names")= chr  "1 Nada" "2" "3" "4" ...
##  $ b6    : 'haven_labelled' num  7 NA 5 2 7 4 4 7 3 3 ...
##   ..- attr(*, "label")= chr "¿Hasta qué punto piensa usted que se debe apoyar al sistema político del país?"
##   ..- attr(*, "format.spss")= chr "F6.0"
##   ..- attr(*, "labels")= Named num  1 2 3 4 5 ...
##   .. ..- attr(*, "names")= chr  "1 Nada" "2" "3" "4" ...
##  $ q1    : 'haven_labelled' num  1 1 1 2 1 2 2 1 2 1 ...
##   ..- attr(*, "label")= chr "Género"
##   ..- attr(*, "format.spss")= chr "F6.0"
##   ..- attr(*, "labels")= Named num  1 2 888888 988888 999999
##   .. ..- attr(*, "names")= chr  "Hombre" "Mujer" "DK" "NR" ...
##  $ pais  : 'haven_labelled' num  10 10 10 10 10 10 10 10 10 10 ...
##   ..- attr(*, "label")= chr "País"
##   ..- attr(*, "format.spss")= chr "F2.0"
##   ..- attr(*, "display_width")= int 6
##   ..- attr(*, "labels")= Named num  1 2 3 4 5 6 7 8 9 10 ...
##   .. ..- attr(*, "names")= chr  "México" "Guatemala" "El Salvador" "Honduras" ...
##  $ tamano: 'haven_labelled' num  NA NA NA NA NA NA NA NA NA NA ...
##   ..- attr(*, "label")= chr "Tamaño del lugar"
##   ..- attr(*, "format.spss")= chr "F6.0"
##   ..- attr(*, "labels")= Named num  1 2 3 4 5 ...
##   .. ..- attr(*, "names")= chr  "Capital nacional (área metropolitana)" "Ciudad grande" "Ciudad mediana" "Ciudad pequeña" ...
##  $ q12   : 'haven_labelled' num  2 4 2 3 0 1 3 2 4 3 ...
##   ..- attr(*, "label")= chr "¿Tiene hijos(as)? ¿Cuántos?"
##   ..- attr(*, "format.spss")= chr "F6.0"
##   ..- attr(*, "labels")= Named num  0 888888 988888 999999
##   .. ..- attr(*, "names")= chr  "Ninguno" "DK" "NR" "N/A"
##  $ b1.r  : num  NA 3 4 2 NA 6 4 4 2 2 ...
##  $ q1.r  : num  1 1 1 2 1 2 2 1 2 1 ...
##  $ q12.r : num  2 4 2 3 0 1 3 2 4 3 ...
lapop$b1.r <- as.numeric(lapop$b1) 
lapop$b2.r <- as.numeric(lapop$b2) 
lapop$b3.r <- as.numeric(lapop$b3) 
lapop$b4.r <- as.numeric(lapop$b4) 
lapop$b6.r <- as.numeric(lapop$b6) 
lapop$b1.r[lapop$b1.r > 7] <- NA 
lapop$b2.r[lapop$b2.r > 7] <- NA 
lapop$b3.r[lapop$b3.r > 7] <- NA 
lapop$b4.r[lapop$b4.r > 7] <- NA 
lapop$b6.r[lapop$b6.r > 7] <- NA
lapop$asp <- (((lapop$b1.r+lapop$b2.r+lapop$b3.r+lapop$b4.r+lapop$b6.r)-5)/30)*100 
table(lapop$b.r)
## < table of extent 0 >
hist(lapop$asp)

Para ver cuantos valores perdidos (missing values) tiene el índice:

t1 <- table(is.na(lapop$asp)) 
t1
## 
##  FALSE   TRUE 
## 133707  17634
prop.table(t1)*100
## 
##    FALSE     TRUE 
## 88.34817 11.65183

Seleccionamos solo las columnas “asp”, “pais”, “tamano”, eliminamos datos perdidos con na.omit. Esta última función, cuando encuentra un valor NA, elimina toda la fila.

data<-lapop[,c("asp", "pais", "tamano")]
n_row1<- nrow(data)
print(paste("La base de datos inicial tiene ",n_row1, " filas", sep=""))
## [1] "La base de datos inicial tiene 151341 filas"
data=na.omit(data) #Para eliminar valores perdidos
n_row2<- nrow(data)
print(paste("La base de datos final tiene ",n_row2, " filas", sep=""))
## [1] "La base de datos final tiene 121056 filas"
str(data)
## 'data.frame':    121056 obs. of  3 variables:
##  $ asp   : num  16.7 86.7 93.3 23.3 46.7 ...
##  $ pais  : 'haven_labelled' num  13 5 16 24 21 12 22 4 23 3 ...
##   ..- attr(*, "label")= chr "País"
##   ..- attr(*, "labels")= Named num  1 2 3 4 5 6 7 8 9 10 ...
##   .. ..- attr(*, "names")= chr  "México" "Guatemala" "El Salvador" "Honduras" ...
##  $ tamano: 'haven_labelled' num  3 3 2 5 1 2 5 5 1 1 ...
##   ..- attr(*, "label")= chr "Tamaño del lugar"
##   ..- attr(*, "labels")= Named num  1 2 3 4 5 ...
##   .. ..- attr(*, "names")= chr  "Capital nacional (área metropolitana)" "Ciudad grande" "Ciudad mediana" "Ciudad pequeña" ...
##  - attr(*, "na.action")= 'omit' Named int  1 2 3 4 5 6 7 8 9 10 ...
##   ..- attr(*, "names")= chr  "1" "2" "3" "4" ...

A continuación se generará un vector como variable tipo factor, misma que contendrá intervalos gracias a la utilidad de la función cut. Los breaks se harán teniendo como referencia a la variable asp. El intervalo está cerrado en el intervalo derecho. El data frame xout reune la frecuencia de los intervalos de factorx. Así mismo, le cambiaremos el nombre a las columnas llamandose “asp” y “ni”

factorx <- factor(cut(lapop$asp, breaks=nclass.Sturges(lapop$asp),right=TRUE))
xout <- as.data.frame(table(factorx))
colnames(xout)<-c("asp","ni")

Con la función transform lo que se ha generado es agregale nuevas variables al dataframe creado xout. La ventaja de esta función es que ajusta los resultados al número de observaciones que tiene la base de datos de referencia. Fíjese que la dimensión de xout es de 19 observaciones y 2 variables, pero ni tiene 25 observaciones. Lo que hará transform es mantener todo en 19 observaciones.

xout2 <- transform(xout, 
                  fi=prop.table(ni), #proporciones
                  pi=prop.table(ni)*100, #porcentaje
                  Ni = cumsum(ni), #frecuencia
                  Fi = cumsum(prop.table(ni)), #proporcion acumulada
                  Pi = cumsum(prop.table(ni))*100 #porcentaje acumulado
)
xout
##            asp    ni
## 1  (-0.1,5.26]  3686
## 2  (5.26,10.5]  2882
## 3  (10.5,15.8]  1993
## 4  (15.8,21.1]  5804
## 5  (21.1,26.3]  2977
## 6  (26.3,31.6]  7848
## 7  (31.6,36.8] 10483
## 8  (36.8,42.1]  6156
## 9  (42.1,47.4] 13423
## 10 (47.4,52.6]  8055
## 11 (52.6,57.9] 15037
## 12 (57.9,63.2]  7865
## 13 (63.2,68.4] 14453
## 14 (68.4,73.7] 11846
## 15 (73.7,78.9]  4705
## 16 (78.9,84.2]  7831
## 17 (84.2,89.5]  2608
## 18 (89.5,94.7]  3571
## 19  (94.7,100]  2484
  • Tablas de frecuencia*

A continuación se verá tablas y gráficos de frecuencia segun distintas Reglas. El código table.freq nos dará una distribución de frecuencias las cuales son usadas principalmente para reunir y resumir una gran cantidad de datos. La división de esos intervalos dependerá de la regla que useamos. Se muestran 3 reglas. Para mayor información de las reglas revisar http://www2.ulpgc.es/hege/almacen/download/26/26702/tema2.pdf

(table.freq(hist(lapop$asp,breaks = "Sturges"))) #Regla Sturges

##    Lower Upper Main Frequency Percentage     CF   CPF
## 1      0     5  2.5      3686        2.8   3686   2.8
## 2      5    10  7.5      2882        2.2   6568   4.9
## 3     10    15 12.5      1993        1.5   8561   6.4
## 4     15    20 17.5      5804        4.3  14365  10.7
## 5     20    25 22.5      2977        2.2  17342  13.0
## 6     25    30 27.5      7848        5.9  25190  18.8
## 7     30    35 32.5      5219        3.9  30409  22.7
## 8     35    40 37.5     11420        8.5  41829  31.3
## 9     40    45 42.5      6463        4.8  48292  36.1
## 10    45    50 47.5     15015       11.2  63307  47.3
## 11    50    55 52.5      7609        5.7  70916  53.0
## 12    55    60 57.5     15293       11.4  86209  64.5
## 13    60    65 62.5      7138        5.3  93347  69.8
## 14    65    70 67.5     13530       10.1 106877  79.9
## 15    70    75 72.5      5631        4.2 112508  84.1
## 16    75    80 77.5      9208        6.9 121716  91.0
## 17    80    85 82.5      3328        2.5 125044  93.5
## 18    85    90 87.5      4642        3.5 129686  97.0
## 19    90    95 92.5      1537        1.1 131223  98.1
## 20    95   100 97.5      2484        1.9 133707 100.0
(table.freq(hist(lapop$asp,breaks = "Scott")))   #Regla de Scott

##    Lower Upper Main Frequency Percentage     CF   CPF
## 1      0     2    1      2821        2.1   2821   2.1
## 2      2     4    3       865        0.6   3686   2.8
## 3      4     6    5         0        0.0   3686   2.8
## 4      6     8    7      1263        0.9   4949   3.7
## 5      8    10    9      1619        1.2   6568   4.9
## 6     10    12   11         0        0.0   6568   4.9
## 7     12    14   13      1993        1.5   8561   6.4
## 8     14    16   15         0        0.0   8561   6.4
## 9     16    18   17      2406        1.8  10967   8.2
## 10    18    20   19      3398        2.5  14365  10.7
## 11    20    22   21         0        0.0  14365  10.7
## 12    22    24   23      2977        2.2  17342  13.0
## 13    24    26   25         0        0.0  17342  13.0
## 14    26    28   27      3708        2.8  21050  15.7
## 15    28    30   29      4140        3.1  25190  18.8
## 16    30    32   31         0        0.0  25190  18.8
## 17    32    34   33      5219        3.9  30409  22.7
## 18    34    36   35         0        0.0  30409  22.7
## 19    36    38   37      5264        3.9  35673  26.7
## 20    38    40   39      6156        4.6  41829  31.3
## 21    40    42   41         0        0.0  41829  31.3
## 22    42    44   43      6463        4.8  48292  36.1
## 23    44    46   45         0        0.0  48292  36.1
## 24    46    48   47      6960        5.2  55252  41.3
## 25    48    50   49      8055        6.0  63307  47.3
## 26    50    52   51         0        0.0  63307  47.3
## 27    52    54   53      7609        5.7  70916  53.0
## 28    54    56   55         0        0.0  70916  53.0
## 29    56    58   57      7428        5.6  78344  58.6
## 30    58    60   59      7865        5.9  86209  64.5
## 31    60    62   61         0        0.0  86209  64.5
## 32    62    64   63      7138        5.3  93347  69.8
## 33    64    66   65         0        0.0  93347  69.8
## 34    66    68   67      7315        5.5 100662  75.3
## 35    68    70   69      6215        4.6 106877  79.9
## 36    70    72   71         0        0.0 106877  79.9
## 37    72    74   73      5631        4.2 112508  84.1
## 38    74    76   75         0        0.0 112508  84.1
## 39    76    78   77      4705        3.5 117213  87.7
## 40    78    80   79      4503        3.4 121716  91.0
## 41    80    82   81         0        0.0 121716  91.0
## 42    82    84   83      3328        2.5 125044  93.5
## 43    84    86   85         0        0.0 125044  93.5
## 44    86    88   87      2608        2.0 127652  95.5
## 45    88    90   89      2034        1.5 129686  97.0
## 46    90    92   91         0        0.0 129686  97.0
## 47    92    94   93      1537        1.1 131223  98.1
## 48    94    96   95         0        0.0 131223  98.1
## 49    96    98   97       842        0.6 132065  98.8
## 50    98   100   99      1642        1.2 133707 100.0
(table.freq(hist(lapop$asp,breaks = "FD")))      #Regla de Friedman-Diaconis

##     Lower Upper Main Frequency Percentage     CF   CPF
## 1       0     1  0.5      2821        2.1   2821   2.1
## 2       1     2  1.5         0        0.0   2821   2.1
## 3       2     3  2.5         0        0.0   2821   2.1
## 4       3     4  3.5       865        0.6   3686   2.8
## 5       4     5  4.5         0        0.0   3686   2.8
## 6       5     6  5.5         0        0.0   3686   2.8
## 7       6     7  6.5      1263        0.9   4949   3.7
## 8       7     8  7.5         0        0.0   4949   3.7
## 9       8     9  8.5         0        0.0   4949   3.7
## 10      9    10  9.5      1619        1.2   6568   4.9
## 11     10    11 10.5         0        0.0   6568   4.9
## 12     11    12 11.5         0        0.0   6568   4.9
## 13     12    13 12.5         0        0.0   6568   4.9
## 14     13    14 13.5      1993        1.5   8561   6.4
## 15     14    15 14.5         0        0.0   8561   6.4
## 16     15    16 15.5         0        0.0   8561   6.4
## 17     16    17 16.5      2406        1.8  10967   8.2
## 18     17    18 17.5         0        0.0  10967   8.2
## 19     18    19 18.5         0        0.0  10967   8.2
## 20     19    20 19.5      3398        2.5  14365  10.7
## 21     20    21 20.5         0        0.0  14365  10.7
## 22     21    22 21.5         0        0.0  14365  10.7
## 23     22    23 22.5         0        0.0  14365  10.7
## 24     23    24 23.5      2977        2.2  17342  13.0
## 25     24    25 24.5         0        0.0  17342  13.0
## 26     25    26 25.5         0        0.0  17342  13.0
## 27     26    27 26.5      3708        2.8  21050  15.7
## 28     27    28 27.5         0        0.0  21050  15.7
## 29     28    29 28.5         0        0.0  21050  15.7
## 30     29    30 29.5      4140        3.1  25190  18.8
## 31     30    31 30.5         0        0.0  25190  18.8
## 32     31    32 31.5         0        0.0  25190  18.8
## 33     32    33 32.5         0        0.0  25190  18.8
## 34     33    34 33.5      5219        3.9  30409  22.7
## 35     34    35 34.5         0        0.0  30409  22.7
## 36     35    36 35.5         0        0.0  30409  22.7
## 37     36    37 36.5      5264        3.9  35673  26.7
## 38     37    38 37.5         0        0.0  35673  26.7
## 39     38    39 38.5         0        0.0  35673  26.7
## 40     39    40 39.5      6156        4.6  41829  31.3
## 41     40    41 40.5         0        0.0  41829  31.3
## 42     41    42 41.5         0        0.0  41829  31.3
## 43     42    43 42.5         0        0.0  41829  31.3
## 44     43    44 43.5      6463        4.8  48292  36.1
## 45     44    45 44.5         0        0.0  48292  36.1
## 46     45    46 45.5         0        0.0  48292  36.1
## 47     46    47 46.5      6960        5.2  55252  41.3
## 48     47    48 47.5         0        0.0  55252  41.3
## 49     48    49 48.5         0        0.0  55252  41.3
## 50     49    50 49.5      8055        6.0  63307  47.3
## 51     50    51 50.5         0        0.0  63307  47.3
## 52     51    52 51.5         0        0.0  63307  47.3
## 53     52    53 52.5         0        0.0  63307  47.3
## 54     53    54 53.5      7609        5.7  70916  53.0
## 55     54    55 54.5         0        0.0  70916  53.0
## 56     55    56 55.5         0        0.0  70916  53.0
## 57     56    57 56.5      7428        5.6  78344  58.6
## 58     57    58 57.5         0        0.0  78344  58.6
## 59     58    59 58.5         0        0.0  78344  58.6
## 60     59    60 59.5      7865        5.9  86209  64.5
## 61     60    61 60.5         0        0.0  86209  64.5
## 62     61    62 61.5         0        0.0  86209  64.5
## 63     62    63 62.5         0        0.0  86209  64.5
## 64     63    64 63.5      7138        5.3  93347  69.8
## 65     64    65 64.5         0        0.0  93347  69.8
## 66     65    66 65.5         0        0.0  93347  69.8
## 67     66    67 66.5      7315        5.5 100662  75.3
## 68     67    68 67.5         0        0.0 100662  75.3
## 69     68    69 68.5         0        0.0 100662  75.3
## 70     69    70 69.5      6215        4.6 106877  79.9
## 71     70    71 70.5         0        0.0 106877  79.9
## 72     71    72 71.5         0        0.0 106877  79.9
## 73     72    73 72.5         0        0.0 106877  79.9
## 74     73    74 73.5      5631        4.2 112508  84.1
## 75     74    75 74.5         0        0.0 112508  84.1
## 76     75    76 75.5         0        0.0 112508  84.1
## 77     76    77 76.5      4705        3.5 117213  87.7
## 78     77    78 77.5         0        0.0 117213  87.7
## 79     78    79 78.5         0        0.0 117213  87.7
## 80     79    80 79.5      4503        3.4 121716  91.0
## 81     80    81 80.5         0        0.0 121716  91.0
## 82     81    82 81.5         0        0.0 121716  91.0
## 83     82    83 82.5         0        0.0 121716  91.0
## 84     83    84 83.5      3328        2.5 125044  93.5
## 85     84    85 84.5         0        0.0 125044  93.5
## 86     85    86 85.5         0        0.0 125044  93.5
## 87     86    87 86.5      2608        2.0 127652  95.5
## 88     87    88 87.5         0        0.0 127652  95.5
## 89     88    89 88.5         0        0.0 127652  95.5
## 90     89    90 89.5      2034        1.5 129686  97.0
## 91     90    91 90.5         0        0.0 129686  97.0
## 92     91    92 91.5         0        0.0 129686  97.0
## 93     92    93 92.5         0        0.0 129686  97.0
## 94     93    94 93.5      1537        1.1 131223  98.1
## 95     94    95 94.5         0        0.0 131223  98.1
## 96     95    96 95.5         0        0.0 131223  98.1
## 97     96    97 96.5       842        0.6 132065  98.8
## 98     97    98 97.5         0        0.0 132065  98.8
## 99     98    99 98.5         0        0.0 132065  98.8
## 100    99   100 99.5      1642        1.2 133707 100.0
(table.freq(graph.freq(lapop$asp,plot=FALSE)))   #Regla Sturges (Agricolae)
##    Lower Upper Main Frequency Percentage     CF   CPF
## 1    0.0   5.6  2.8      3686        2.8   3686   2.8
## 2    5.6  11.2  8.4      2882        2.2   6568   4.9
## 3   11.2  16.8 14.0      4399        3.3  10967   8.2
## 4   16.8  22.4 19.6      3398        2.5  14365  10.7
## 5   22.4  28.0 25.2      6685        5.0  21050  15.7
## 6   28.0  33.6 30.8      9359        7.0  30409  22.7
## 7   33.6  39.2 36.4      5264        3.9  35673  26.7
## 8   39.2  44.8 42.0     12619        9.4  48292  36.1
## 9   44.8  50.4 47.6     15015       11.2  63307  47.3
## 10  50.4  56.0 53.2      7609        5.7  70916  53.0
## 11  56.0  61.6 58.8     15293       11.4  86209  64.5
## 12  61.6  67.2 64.4     14453       10.8 100662  75.3
## 13  67.2  72.8 70.0      6215        4.6 106877  79.9
## 14  72.8  78.4 75.6     10336        7.7 117213  87.7
## 15  78.4  84.0 81.2      7831        5.9 125044  93.5
## 16  84.0  89.6 86.8      2608        2.0 127652  95.5
## 17  89.6  95.2 92.4      3571        2.7 131223  98.1
## 18  95.2 100.8 98.0      2484        1.9 133707 100.0
  • Poligono de Frecuencias (solo)
h1<-hist(lapop$asp,border=FALSE)
polygon.freq(h1,frequency=1,col="red")

  • Histograma y poligono de frecuencia
h1<-hist(lapop$asp,breaks = "Sturges",
         xlab="asp",
         ylab="Numero de entrevistados")
polygon.freq(h1,frequency=1,col="red")

  • Histograma (Comparativo)
par(mfrow=c(1,3))
hist(data$asp[data$pais=="11"],ylim=c(0,1200))
hist(data$asp[data$pais=="10"],ylim=c(0,1200))
hist(data$asp[data$pais=="16"],ylim=c(0,1200))

par(mfrow=c(1,1))
  • Grafico de Densidad El gráfico describe la probabilidad relativa según la cual la variable asp tomará determinado valor.
plot(density(data$asp))

  • Histograma y Densidad A continuación se muestra el histograma de densidad. Por propiedad la suma de las áreas tiene que ser igual a 1. La probabilidad de cada intervalo se calcula como el área bajo la curva de densidad. Si se pregunta entonces ¿Cuál es la probaiblidad de que el índice al apoyo político “ASP” sea por lo menos el 70%?

Sería de calcular entonces el área bajo la curva de los valores oscilantes entre [70; 100].

hist(data$asp,prob=TRUE)
lines(density.default(data$asp))

  • Boxplots

El boxplot o diagrama de caja y bigote muestra gráficamente una serie de datos a través de su distribución por cuantiles (Q1, Q2 y Q3). La línea más gruesa representa la mediana (Q2), la parte superior de la caja es el tercer cuantil (Q3), la parte inferir de la caja representa el primer cuantil (Q1). Asimismo, el punto más bajo, el de los bigotes, es el punto de datos más bajo excluyendo valores atípicos y el punto más alto de los bigotes es el punto de datos más alto excluyendo valores atípicos.

boxplot(lapop$asp)

Para el caso del gráfico mostrado, los datos se concentran en el intervalo [40, 65], con una mediana de 55. El valor mínimo es 0 y el máximo 100. No se tienen valores atípicos.

Analisis descriptivo

  • Resumen básico de la variable target
summary(data$asp)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    0.00   36.67   53.33   52.02   66.67  100.00
  • Otras funciones de resumen
describe(data$asp)
## data$asp 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##   121056        0       31    0.998    52.02    25.64    13.33    20.00 
##      .25      .50      .75      .90      .95 
##    36.67    53.33    66.67    80.00    86.67 
## 
## lowest :   0.000000   3.333333   6.666667  10.000000  13.333333
## highest:  86.666667  90.000000  93.333333  96.666667 100.000000
basicStats(data$asp)
##               X..data.asp
## nobs         1.210560e+05
## NAs          0.000000e+00
## Minimum      0.000000e+00
## Maximum      1.000000e+02
## 1. Quartile  3.666667e+01
## 3. Quartile  6.666667e+01
## Mean         5.201807e+01
## Median       5.333333e+01
## Sum          6.297100e+06
## SE Mean      6.486700e-02
## LCL Mean     5.189094e+01
## UCL Mean     5.214521e+01
## Variance     5.093737e+02
## Stdev        2.256931e+01
## Skewness    -2.174030e-01
## Kurtosis    -4.348740e-01

Analisis descriptivo comparativo

Eliminamos las etiquetas vacías

data$tamano <- factor(data$tamano)

boxplot(data$asp ~ data$tamano,
        xlab="tamano de la ciudad",ylab="asp",
        main="Comparacion del asp por tamano de la ciudad")