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)
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] "Functioning ofgovernment >> Functioning ofgovernment"
## [6] "Politicalparticipation >> Politicalparticipation"
## [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
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:" ...
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”.
# 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
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.
library(DescTools)
Mode(democracy$type)
## [1] "Authoritarian" "Flawed democracy"
dataTable=table(democracy$type)
Herfindahl(dataTable)
## [1] 0.2755567
0.25: La moda se diferencia de los demas
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
Posición La mediana es una medida de posicion y de centralidad, pero los percentiles son de posición. El boxplot indica dos importantes percentiles, el 25 y el 75. Tambien se les conoce como el cuartil 1 y 3. Así, el 25% de los paises no pasa del nivel autoritario, y el 75% de los paises llega a lo más a una democracia endeble.
Dispersión:
Distancia Interquartil: Cuantos valores hay entre los cuartiles 1 y 3. Si hay muchos valores, hay mucha dispersión.
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.