Facultad de Derecho y Ciencia Politica

Escuela de Ciencia Política

Guia de Clase de ESTADISTICA


Profesor: Dr. José Manuel MAGALLANES, Ph.D


Sesión 2: Exploración Categórica NOMINAL

Estos datos los trajimos de Google. Para convertir un archivo en Excel a uno de Google, sigue estos pasos. Verás que al final consigo el link a ser usado en esta sesion:

El link que usaré tiene datos de 2019 de las acciones del Serenazgo de la Municipalidad de San Isidro, lo uso en este código y traigo los datos para el análisis.

Puedes ver la data aqui:

Luego de generar un enlace, la descargo:

# comentario: enlace está entre comillas

link="https://docs.google.com/spreadsheets/d/e/2PACX-1vRcJpnJqH9VzTXl4NMv0zX45yRkXeMNST3fkSfGFCpUTh0S-dSzRtUj7CJqAzqMUE5r6tKQRZzdKq9V/pub?gid=1802780199&single=true&output=csv"

# comentario: funcion read.csv le entrega datos al objeto 'sere19':
sere19=read.csv(link, stringsAsFactors = F,na.strings = '')
names(sere19) # nombres columna en el objeto
## [1] "FECHA"     "DÍA"       "MES"       "MODALIDAD" "MEDIO"     "DIRECCIÓN"
str(sere19) # sera numero? texto? o factor?
## 'data.frame':    3414 obs. of  6 variables:
##  $ FECHA    : chr  "01/01/2019 0:01" "01/01/2019 0:07" "01/01/2019 0:17" "01/01/2019 0:25" ...
##  $ DÍA      : int  3 3 3 3 3 3 3 3 3 3 ...
##  $ MES      : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ MODALIDAD: chr  NA "Patrullaje Disuasivo" NA NA ...
##  $ MEDIO    : chr  "TELÉFONO" "TELÉFONO" "TELÉFONO" "TELÉFONO" ...
##  $ DIRECCIÓN: chr  "AV. DOS DE MAYO N° 0864, SAN ISIDRO" "CA. GARCIA, GODOFREDO N° 0490, SAN ISIDRO" "CA. LOS ROBLES N° 210234, SAN ISIDRO" "CA. BURGOS N° 0179, SAN ISIDRO" ...

Explorar la categorica, sobre todo como variable dependiente, significa querer saber:

Prestemos atención a las variables NOMINALES, aquellas que sirven para denominar a los posibles caracteríticas cualitativas de nuestra unidad de investigación.

  1. Tabla. La tabla nos permite saber la distribución de esta variable:
# simple exploración con función table:

table(sere19$MODALIDAD)
## 
##        Conminar / Retirar       Exceso de velocidad 
##                       151                        33 
##            Falla mecánica Imprudencia del conductor 
##                         5                        66 
##      Patrullaje Disuasivo 
##                       103

Con este codigo puedes tener un resultado mas similar a lo conocido como tabla de frecuencias:

# quiza necesite instalar
library(questionr)
library(magrittr)


NomDf=freq(sere19$MODALIDAD,
           total = F,
           # sort = 'dec', # elimina el # si deseas!
           exclude = c(NA)) %>% data.frame()

NomDf=data.frame(variable=row.names(NomDf),
                 NomDf,
                 row.names = NULL)

names(NomDf)=c("Modalidad","Conteo", "Porcentaje")
# viendo a NomDf
NomDf
##                   Modalidad Conteo Porcentaje
## 1        Conminar / Retirar    151       42.2
## 2       Exceso de velocidad     33        9.2
## 3            Falla mecánica      5        1.4
## 4 Imprudencia del conductor     66       18.4
## 5      Patrullaje Disuasivo    103       28.8
  1. Gráfico

El gráfico para las categóricas es el de barras:

library(ggplot2) # instalar previamente

# base inicial
base = ggplot(data=NomDf, 
              aes(x=Modalidad, # para los ejes
                  y=Conteo)) 

# luego a la base se le pide añadir la 'geometria' deseada:
bar1 = base + geom_bar(stat='identity') 

# aqui resultado:
bar1

Las barras salen orden alfabetico. Por lo general, buscamos ordenar las barras, ya que las modalidades nominales no tiene orden, osea se les puede reasignar posición para resaltar conteos, veamos el uso de la función reorder()

base = ggplot(data=NomDf, 
              aes(x=reorder(Modalidad,Conteo),
                  y=Conteo)) 
bar2 = base + geom_bar(stat='identity') 

bar2

Podemos poner titulos así:

text1="¿Qué acción es mas común?"
text2="Acción"
text3="Conteo"
text4="Fuente: Municipalidad de San Isidro"

bar2= bar2 + labs(title=text1,
                      x =text2, 
                      y = text3,
                      caption = text4) 
bar2

Si quieres cambios más detallados:

#cambio de tema:
bar2=bar2 + theme_classic()

bar2=bar2+ theme(plot.title = element_text(hjust = 0.5,#justificacion
                                           size=15), 
                  plot.caption = element_text(hjust = 0),
                  axis.text.x =element_text(angle=45,# angulo
                                            hjust = 1)) 
bar2

El gráfico de Pareto muestra dos medidas, los conteos y los porcentajes acumulados. Por tradición se trata de detectar que valores representan el 80%.

library(qcc) # instalar antes
## Package 'qcc' version 2.7
## Type 'citation("qcc")' for citing this R package in publications.
pareto.chart(table(sere19$MODALIDAD),cumperc = c(0,50,80,100))

##                            
## Pareto chart analysis for table(sere19$MODALIDAD)
##                              Frequency  Cum.Freq. Percentage Cum.Percent.
##   Conminar / Retirar        151.000000 151.000000  42.178771    42.178771
##   Patrullaje Disuasivo      103.000000 254.000000  28.770950    70.949721
##   Imprudencia del conductor  66.000000 320.000000  18.435754    89.385475
##   Exceso de velocidad        33.000000 353.000000   9.217877    98.603352
##   Falla mecánica              5.000000 358.000000   1.396648   100.000000

Las acciones de conminar y de patrullaje son casi el 80% de las actividades de serenazgo de San Isidro.

  1. Estadísticos:
library(DescTools)
Mode(sere19$MODALIDAD)
## [1] "Conminar / Retirar"

Del gráfico ya la sabíamos.

dataTable=table(sere19$MODALIDAD)

# * < 0.01 : indica que la moda no es significativa, las categorias tienen pesos similares.
# * < 0.15 : indica que la moda no es significativa, varias categorias tienen pesos similares.
# * entre 0.15 - 0.3: hay una moda.
# * > 0.3: La moda se diferencia de los demas

Herfindahl(dataTable)
## [1] 0.3033613
1/sum(prop.table(dataTable)**2)
## [1] 3.296399

Hay 3 grupos representativos.

Ver ejercicio dejado en el Classroom.