1. Descargando los datos
library(htmltab)
linkPage="https://www.nationsonline.org/oneworld/corruption.htm"
linkTabla="/html/body/table[3]"
corrupcion=htmltab(doc=linkPage, which=linkTabla)
## Neither <thead> nor <th> information found. Taking first table row for the header. If incorrect, specifiy header argument.
## Warning: Columns [ ] seem to have no data and are removed. Use
## rm_nodata_cols = F to suppress this behavior
  1. Identifico mis variables
names(corrupcion)
## [1] "Rank"        "Country"     "2016  Score" "2015  Score" "2014  Score"
## [6] "2013  Score" "2012  Score" "Region"
  1. Selecciono las columnas que me interesan
corrupcion=corrupcion[,c(2,3,8)]
names(corrupcion)
## [1] "Country"     "2016  Score" "Region"

Cambiando el nombre de Score 2016 para evitar espacios en blanco

names(corrupcion)[2]="score2016"
str(corrupcion)
## 'data.frame':    177 obs. of  3 variables:
##  $ Country  : chr  "Denmark" "New Zealand" "Finland" "Sweden" ...
##  $ score2016: chr  "90" "90" "89" "88" ...
##  $ Region   : chr  "Europe" "Asia Pacific" "Europe" "Europe" ...

Como la funcion str detecta a score como character entonces debo cambiarlo a numero:

corrupcion$score2016=as.numeric(corrupcion$score2016)
## Warning: NAs introduced by coercion

Identifico cuál es la fila que no tiene un datos númerico

corrupcion[!complete.cases(corrupcion$score2016),]

SUPONGO QUE EL SÍMBOLO “!” ME PONE LA INFORMACIÓN CONTRARIO. O SEA, PUSE LAS CASILLAS COMPLETAS Y ME MOSTRÓ LAS QUE TENÍAN NA Y ACONTINUACIÓN COMO QUIERO ELIMINAR ESAS CASILLAS VACÍAS, ENTONCES HAGO QUE R SOLO ME CONSIDERE LAS CASILLAS: USANDO EL MISMO CÓDIGO, SIN USAR “!” E IGUALANDOLO A EL NOMBRE DE MI DATA FRAME

Ahora quiero eliminar esa fila NA

corrupcion=corrupcion[complete.cases(corrupcion$score2016),]

Si quiero ver las 6 primeras filas de mi data

head(corrupcion)

Hago 10 intervalos con el score2016 para crear ordinales

corrupcion$nivel=cut(corrupcion$score2016,
                     breaks = 10,
                     labels = c(1:10),
                     ordered_result = T)
head(corrupcion)

Ahora, como score2016 pasó a ser nivel y se convirtió en ordinal, uso el último

Exploración Ordinal

CREANDO mi tabla de frecuencias

library(questionr)
library(magrittr)
Ordinal=freq(corrupcion$nivel,cum = T)%>%data.frame()
Ordinal=data.frame(variable=row.names(Ordinal),Ordinal,row.names = NULL)
Ordinal

Ya que tengo mi tabla de frecuencias creada, paso a hacer el gráfico de esta misma:

library(ggplot2)
base = ggplot(data=Ordinal,aes(x=variable,y=n)) 

bar1 = base + geom_bar(stat='identity') 

bar1

Pongo mi tabla en orden

bar1 = bar1 + scale_x_discrete(limits = Ordinal$variable)
bar1

Modifico los títulos

text1="Niveles de percepción en corrupción"
text2="nivel"
text3="cantidad"
text4="Fuente: Transparency International"

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

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

##     
## Pareto chart analysis for table(corrupcion$nivel)
##       Frequency  Cum.Freq. Percentage Cum.Percent.
##   3   37.000000  37.000000  21.022727    21.022727
##   4   36.000000  73.000000  20.454545    41.477273
##   2   19.000000  92.000000  10.795455    52.272727
##   5   17.000000 109.000000   9.659091    61.931818
##   7   17.000000 126.000000   9.659091    71.590909
##   6   14.000000 140.000000   7.954545    79.545455
##   1   13.000000 153.000000   7.386364    86.931818
##   9    9.000000 162.000000   5.113636    92.045455
##   10   8.000000 170.000000   4.545455    96.590909
##   8    6.000000 176.000000   3.409091   100.000000

En la escala ordinal ya podemos pedir el boxplot:

# no se usa la tabla de frecuencia
# se usa en tipo numerico a la ordinal

box=ggplot(corrupcion,aes(y=as.numeric(nivel)))+ geom_boxplot() #volvemos numerico la ordinal, para poder hacerle un boxplot
box

box + scale_y_discrete(limits = Ordinal$nivel) 

DATOS ESTADÍSTICOS

library(DescTools)

Moda

Mode(corrupcion$nivel)
## [1] "3"

Dispersión | Variación modal

dataTable=table(corrupcion$nivel)
1-max(prop.table(dataTable))
## [1] 0.7897727

Concentración

dataTable=table(corrupcion$nivel)

# * < 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.1339747

Representatividad

1/sum(prop.table(dataTable)**2)
## [1] 7.464096

Mediana

Median(corrupcion$nivel)
## [1] 4
## Levels: 1 < 2 < 3 < 4 < 5 < 6 < 7 < 8 < 9 < 10

Rango intercualtílico

IQR(corrupcion$nivel)
## [1] 3

Desviación absoluta de la mediana

# Mientras más se aleje de cero y sea positiva hay posible atipicos en los valores
# grandes. Mientras más se aleje de cero y sea negativa 
# hay posible atipicos en los valores pequeños.
mad(as.numeric(corrupcion$nivel))
## [1] 1.4826