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 3: Exploración Categórica ORDINAL

  1. Leer Datos

Traeremos datos de wikipedia, el indice de democracia:

library(htmltab)
# comentario: usar comillas con el link:

linkPage='https://en.wikipedia.org/wiki/Democracy_Index'
linkTabla='//*[@id="mw-content-text"]/div/table[2]/tbody' # el XPATH
democracy = htmltab(doc = linkPage, 
               which =linkTabla) 
  1. Identificando nombres de variables:

Hay que buscar tener nombres sencillos (letras seguidas de letras o números, y sin espacios, ni caracteres ‘especiales’). Los nombres han venido así:

names(democracy)
##  [1] "Rank >> Rank"                                                    
##  [2] "Country >> Country"                                              
##  [3] "Score >> Score"                                                  
##  [4] "Electoral processand pluralism >> Electoral processand pluralism"
##  [5] "Functio­ning ofgovern­ment >> Functio­ning ofgovern­ment"        
##  [6] "Politicalpartici­pation >> Politicalpartici­pation"              
##  [7] "Politicalculture >> Politicalculture"                            
##  [8] "Civilliberties >> Civilliberties"                                
##  [9] "Regimetype >> Regimetype"                                        
## [10] "Region >> Region"                                                
## [11] "Changes fromlast year >> Changes fromlast year"

Esos nombres no son adecuados, cambiemos de nombres:

# un vector de nombres usando 'c()'
nuevosNombres=c("pos","pais","indice","elect","gover","partici","cultu","liber","type","continent") # la misma cantidad de nombres
names(democracy)=nuevosNombres # reemplazando
  1. Identificando tipo de variable:
str(democracy)
## 'data.frame':    167 obs. of  11 variables:
##  $ pos      : chr  "1" "2" "3" "4" ...
##  $ pais     : chr  " Norway" " Iceland" " Sweden" " New Zealand" ...
##  $ indice   : chr  "9.87" "9.58" "9.39" "9.26" ...
##  $ elect    : chr  "10.00" "10.00" "9.58" "10.00" ...
##  $ gover    : chr  "9.64" "9.29" "9.64" "9.29" ...
##  $ partici  : chr  "10.00" "8.89" "8.33" "8.89" ...
##  $ cultu    : chr  "10.00" "10.00" "10.00" "8.13" ...
##  $ liber    : chr  "9.71" "9.71" "9.41" "10.00" ...
##  $ type     : chr  "Full democracy" "Full democracy" "Full democracy" "Full democracy" ...
##  $ continent: chr  "Western Europe" "Western Europe" "Western Europe" "Asia & Australasia" ...
##  $ NA       : chr  "Score: Rank:" "Score: Rank:" "Score: Rank:" "Score: Rank:" ...
  1. Explorando Variables Categoricas Ordinales.

Las variables ordinales son categorías que representan algún tipo de secuencia y orden. La única ordinal en este caso es “tipo de democracia”.

  1. Tabla
# simple
table(democracy$type)
## 
##    Authoritarian Flawed democracy   Full democracy    Hybrid regime 
##               54               54               22               37

La tabla los presenta en orden alfabetico. Hay que convertirla en ordinal.

# orden correcto
ordenNuevo=c('Authoritarian','Hybrid regime',
             'Flawed democracy','Full democracy')
democracy$type=factor(democracy$type,
                       levels=ordenNuevo,
                       ordered = T) # T (TRUE) para ordinal

Ahora sí, la tabla de frecuencias ordinal:

# completa
library(questionr)
freqOrd=freq(democracy$type,cum = T)
freqOrd
##                   n    % val%  %cum val%cum
## Authoritarian    54 32.3 32.3  32.3    32.3
## Hybrid regime    37 22.2 22.2  54.5    54.5
## Flawed democracy 54 32.3 32.3  86.8    86.8
## Full democracy   22 13.2 13.2 100.0   100.0

Ese data frame usa los niveles como nombre de fila, corrigiendo:

freqOrd=data.frame(type=row.names(freqOrd),
                   freqOrd,
                   row.names = NULL)
freqOrd
##               type  n   X. val. X.cum val.cum
## 1    Authoritarian 54 32.3 32.3  32.3    32.3
## 2    Hybrid regime 37 22.2 22.2  54.5    54.5
## 3 Flawed democracy 54 32.3 32.3  86.8    86.8
## 4   Full democracy 22 13.2 13.2 100.0   100.0
  1. Gráfico
library(ggplot2)
base = ggplot(data=freqOrd,aes(x=type,y=n)) 
base1= base + scale_x_discrete(limits=freqOrd$type)
bar1 = base1 + geom_bar(stat='identity') 
bar1

bar1 + labs(x="Régimen", 
            y="Cantidad",
            title="¿La democracia plena ha triunfado en el mundo?", 
            subtitle = "Año 2019",
            caption = "Fuente: The Economist")

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)
## Package 'qcc' version 2.7
## Type 'citation("qcc")' for citing this R package in publications.
pareto.chart(table(democracy$type),cumperc = c(0,50,80,100))

##                   
## Pareto chart analysis for table(democracy$type)
##                    Frequency Cum.Freq. Percentage Cum.Percent.
##   Authoritarian     54.00000  54.00000   32.33533     32.33533
##   Flawed democracy  54.00000 108.00000   32.33533     64.67066
##   Hybrid regime     37.00000 145.00000   22.15569     86.82635
##   Full democracy    22.00000 167.00000   13.17365    100.00000

En la escala ordinal ya podemos pedir el boxplot:

bar=ggplot(democracy,aes(y=as.numeric(type)))+ geom_boxplot() 
bar

Al convertir el ordinal en numerico, aparece el numero que lo representa. Podemos ver las etiquetas así:

bar + scale_y_discrete(limits = freqOrd$type)

Este gráfico te indica cómo interpretar el boxplot:

Lo más importante es que el boxplot puede mostrar valores ‘menores’ que el mínimo o mayores que el ‘maximo’. Eso implica que el boxplot calcula minimos y maximos ideales, y que si hay valores que los exceden en un sentido u otro, se les considera atípicos u extremos.

  1. Estadísticos:
library(DescTools)
Mode(democracy$type)
## [1] "Authoritarian"    "Flawed democracy"
dataTable=table(democracy$type)
Herfindahl(dataTable)
## [1] 0.2755567
1/sum(prop.table(dataTable)**2)
## [1] 3.629018

Hay 3 grupos representativos.

Median(democracy$type)
## [1] Hybrid regime
## 4 Levels: Authoritarian < Hybrid regime < ... < Full democracy
IQR(democracy$type)
## [1] 2
mad(as.numeric(democracy$type))
## [1] 1.4826

Mientras más se aleje de cero habrá más dispersión.

El boxplot nos muestra la simetría. Hay asimetría positiva si la cola de los mayores valores se alarga mucho más que la de los valores menores, y será negativa si sucede lo contrario. En nuestro boxplot tenemos simetria positiva.