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
names(corrupcion)
## [1] "Rank" "Country" "2016 Score" "2015 Score" "2014 Score"
## [6] "2013 Score" "2012 Score" "Region"
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