Escuela de Ciencia Política

ESTADISTICA


PRACTICA DIRIGIDA DE Exploración Numérica

En wikipedia, debes recordar, hay una tabla que indica los votos de los congresistas electos en el 2016:

Traigamos esos datos:

library(htmltab) #instalemos primero 

url = "https://es.wikipedia.org/wiki/Elecciones_parlamentarias_de_Per%C3%BA_de_2016" 
path= '//*[@id="mw-content-text"]/div/table[6]/tbody/tr/td/table'
legis2016 = htmltab(doc = url, 
               which =path) 

Cuando lidiamos con numeros, en especial, hay que verificar que R los tenga como tales. Usemos str():

str(legis2016)
## 'data.frame':    130 obs. of  6 variables:
##  $ Distrito Electoral  : chr  "Amazonas(al 100,00%)" "Amazonas(al 100,00%)" "Áncash(al 100,00%)" "Áncash(al 100,00%)" ...
##  $ Escaños             : chr  "2" "2" "5" "5" ...
##  $ Congresistas electos: chr  "2" "1" "2" "1" ...
##  $ Congresistas electos: chr  "Marita Herrera Arévalo" "Miguel Antonio Castro Grández" "Eloy Ricardo Narváez Soto" "María Elena Foronda Farro" ...
##  $ Partido             : chr  "Fuerza Popular" "Fuerza Popular" "Alianza para el Progreso" "Frente Amplio" ...
##  $ Votos               : chr  "15 312" "12 939" "20 941" "9 094" ...

Nos interesa analizar la variable Votos. Si ves con detenimiento, está como character (chr). Asi no puedes analizarla. Cuando tienes numeros como texto normalmente se soluciona así:

as.numeric(legis2016$Votos)
## Warning: NAs introduced by coercion
##   [1] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
##  [24] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
##  [47] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
##  [70] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
##  [93] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
## [116] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA

Aqui hay un problema: R no puede convertir el texto a número pues hay un espacio en blanco. Ese espacio debemos desaparecerlo, veamos un ejemplo:

gsub('\\D','',"1 500")
## [1] "1500"

Eso sirve para muchos casos similares:

gsub('\\D','',"1,500")
## [1] "1500"
gsub('\\D','',"1.500")
## [1] "1500"
gsub('\\D','',"$1,500")
## [1] "1500"

El comando gsub() busca todo lo que no se numero con \D y lo reeemplaza con nada (comillas sin nada adentro). Apliquemos eso a la columna de interes:

legis2016$Votos=  gsub('\\D','',legis2016$Votos)

Nota que hemos aplicado y reemplazado, por lo que ahora si tienes lo que necesitas.

legis2016$Votos
##   [1] "15312"  "12939"  "20941"  "9094"   "24088"  "21588"  "13941" 
##   [8] "10076"  "15465"  "26814"  "24368"  "19562"  "20228"  "27285" 
##  [15] "24096"  "16756"  "11842"  "20089"  "11969"  "8576"   "30702" 
##  [22] "14681"  "7207"   "6307"   "30470"  "25169"  "18174"  "17409" 
##  [29] "22504"  "31559"  "23771"  "19661"  "14097"  "8278"   "16737" 
##  [36] "9331"   "19996"  "16909"  "27609"  "20511"  "18159"  "15379" 
##  [43] "14653"  "19291"  "18768"  "16566"  "20578"  "103864" "25599" 
##  [50] "52103"  "57827"  "43763"  "19864"  "15490"  "28381"  "48297" 
##  [57] "44448"  "19142"  "15491"  "58607"  "52764"  "48709"  "48602" 
##  [64] "27237"  "122778" "57933"  "40882"  "97529"  "53913"  "27906" 
##  [71] "326037" "186242" "139912" "82183"  "58460"  "56181"  "50211" 
##  [78] "49922"  "29603"  "27771"  "23969"  "23865"  "23714"  "13512" 
##  [85] "12326"  "215233" "112377" "80944"  "78615"  "73412"  "41669" 
##  [92] "36661"  "30389"  "29271"  "26128"  "34022"  "29999"  "28045" 
##  [99] "13791"  "26543"  "15784"  "10499"  "18972"  "2919"   "11652" 
## [106] "3778"   "7629"   "5579"   "18235"  "15244"  "39750"  "35286" 
## [113] "26691"  "20084"  "19956"  "55218"  "22011"  "12628"  "28685" 
## [120] "16088"  "25607"  "18631"  "10835"  "7794"   "23341"  "11857" 
## [127] "17299"  "13831"  "12184"  "10941"

Lo covertimos a número:

legis2016$Votos=as.numeric(legis2016$Votos)

Puedes ver el resultado aqui:

str(legis2016)
## 'data.frame':    130 obs. of  6 variables:
##  $ Distrito Electoral  : chr  "Amazonas(al 100,00%)" "Amazonas(al 100,00%)" "Áncash(al 100,00%)" "Áncash(al 100,00%)" ...
##  $ Escaños             : chr  "2" "2" "5" "5" ...
##  $ Congresistas electos: chr  "2" "1" "2" "1" ...
##  $ Congresistas electos: chr  "Marita Herrera Arévalo" "Miguel Antonio Castro Grández" "Eloy Ricardo Narváez Soto" "María Elena Foronda Farro" ...
##  $ Partido             : chr  "Fuerza Popular" "Fuerza Popular" "Alianza para el Progreso" "Frente Amplio" ...
##  $ Votos               : num  15312 12939 20941 9094 24088 ...

Quédate con el congresista, su partido y sus votos.

# columnas 4 a la 6:

legis2016=legis2016[,c(4:6)]

A partir de aquí, explora la variable Votos:

library(knitr)

kable(legis2016, format = 'html',row.names = FALSE) 
Congresistas electos Partido Votos
Marita Herrera Arévalo Fuerza Popular 15312
Miguel Antonio Castro Grández Fuerza Popular 12939
Eloy Ricardo Narváez Soto Alianza para el Progreso 20941
María Elena Foronda Farro Frente Amplio 9094
Carlos Alberto Domínguez Herrera Fuerza Popular 24088
María Cristina Melgarejo Páucar Fuerza Popular 21588
Yesenia Ponce Villarreal de Vargas Fuerza Popular 13941
Richard Arce Cáceres Frente Amplio 10076
Dalmiro Feliciano Palomino Ortiz Fuerza Popular 15465
Miguel Román Valdivia Acción Popular 26814
Horacio Zeballos Patrón Frente Amplio 24368
Justiniano Rómulo Apaza Ordóñez Frente Amplio 19562
María Alejandra Aramayo Gaona Fuerza Popular 20228
Ana María Choquehuanca de Villanueva Peruanos por el Kambio 27285
Sergio Francisco Félix Dávila Vizcarra Peruanos por el Kambio 24096
Edyson Humberto Morales Ramírez Frente Amplio 16756
Tania Edith Pariona Tarqui Frente Amplio 11842
Miky Joaquín Dipas Huamán Fuerza Popular 20089
César Henry Vasquez Sanchez Alianza para el Progreso 11969
Marco Antonio Arana Zegarra Frente Amplio 8576
Osías Ramírez Gamarra Fuerza Popular 30702
Carlos Humberto Ticlla Rafael Fuerza Popular 14681
Wilmer Aguilar Montenegro Fuerza Popular 7207
Segundo Leocadio Tapia Bernal Fuerza Popular 6307
Víctor Augusto Albrecht Rodríguez Fuerza Popular 30470
Francisco Javier Villavicencio Cárdenas Fuerza Popular 25169
Estelita Sonia Bustos Espinoza Fuerza Popular 18174
Janet Emilia Sánchez Alva Peruanos por el Kambio 17409
Armando Villanueva Mercado Acción Popular 22504
Benicio Ríos Ocsa Alianza para el Progreso 31559
Wilbert Gabriel Rozas Beltrán Frente Amplio 23771
Edgar Américo Ochoa Pezo Frente Amplio 19661
Nelly Lady Cuadros Candia Fuerza Popular 14097
Zacarías Reymundo Lara Inga Frente Amplio 8278
Wuilian Alfonso Monterola Abregú Fuerza Popular 16737
Rogelio Robert Tucto Castillo Frente Amplio 9331
Guillermo Augusto Bocángel Weydert Fuerza Popular 19996
Karina Juliza Beteta Rubín Fuerza Popular 16909
Miguel Angel Elías Avalos Fuerza Popular 27609
Cesar Antonio Segura Izquierdo Fuerza Popular 20511
Betty Gladys Ananculi Gómez Fuerza Popular 18159
Alberto Eugenio Oliva Corrales Peruanos por el Kambio 15379
Mario José Canzio Álvarez Frente Amplio 14653
Sonia Rosario Echevarría Huamán Fuerza Popular 19291
Federico Pariona Galindo Fuerza Popular 18768
Israel Tito Lazo Julca Fuerza Popular 16566
Moisés Bartolomé Guía Pianto Peruanos por el Kambio 20578
Richard Frank Acuña Núñez Alianza para el Progreso 103864
Gloria Edelmira Montenegro Figueroa Alianza para el Progreso 25599
Elías Nicolás Rodríguez Zavaleta Alianza Popular 52103
Daniel Enrique Salaverry Villa Fuerza Popular 57827
Octavio Edilberto Salazar Miranda Fuerza Popular 43763
Rosa María Bartra Barriga Fuerza Popular 19864
Luis Alberto Yika García Fuerza Popular 15490
Ángel Javier Velásquez Quesquén Alianza Popular 28381
José Marvin Palma Mendoza Fuerza Popular 48297
Héctor Virgilio Becerril Rodríguez Fuerza Popular 44448
Liliana Milagros Takayama Jiménez Fuerza Popular 19142
Clemente Flores Vílchez Peruanos por el Kambio 15491
Víctor Andrés García Belaúnde Acción Popular 58607
Yonhy Lescano Ancieta Acción Popular 52764
Edmundo del Águila Herrera Acción Popular 48709
Edwin Alberto Donayre Gotzch Alianza para el Progreso 48602
Julio Pablo Rosas Huaranga Alianza para el Progreso 27237
Claude Maurice Mulder Bedoya Alianza Popular 122778
Jorge Alfonso Alejandro del Castillo Gálvez Alianza Popular 57933
Luciana Milagros León Romero Alianza Popular 40882
Marisa Glave Remy Frente Amplio 97529
Manuel Enrique Ernesto Dammert Ego-Aguirre Frente Amplio 53913
Indira Isabel Huilca Flores Frente Amplio 27906
Kenji Gerardo Fujimori Higuchi Fuerza Popular 326037
Cecilia Isabel Chacón de Vettori Fuerza Popular 186242
Yeni Vilcatoma de la Cruz Fuerza Popular 139912
Luz Filomena Salgado Rubianes Fuerza Popular 82183
María Lourdes Pía Luisa Alcorta Suero Fuerza Popular 58460
Marco Enrique Miyashiro Arashiro Fuerza Popular 56181
Luis Fernando Galarreta Velarde Fuerza Popular 50211
Edwin Vergara Pinto Fuerza Popular 49922
Leyla Felícita Chihuán Ramos Fuerza Popular 29603
Miguel Ángel Torres Morales Fuerza Popular 27771
Juan Carlos Eugenio Gonzales Ardiles Fuerza Popular 23969
María Úrsula Ingrid Letona Pereyra Fuerza Popular 23865
Paloma Rosa Noceda Chiang Fuerza Popular 23714
Francisco Enrique Hugo Petrozzi Franco Fuerza Popular 13512
Milagros Emperatriz Salazar de la Torre Fuerza Popular 12326
Mercedes Rosalba Aráoz Fernández Peruanos por el Kambio 215233
Carlos Ricardo Bruce Montes de Oca Peruanos por el Kambio 112377
Gilbert Félix Violeta López Peruanos por el Kambio 80944
Saleh Carlos Salvador Heresi Chicoma Peruanos por el Kambio 78615
Juan Manuel Sheput Moore Peruanos por el Kambio 73412
Pedro Carlos Olaechea Álvarez-Calderón Peruanos por el Kambio 41669
Guido Ricardo Lombardi Elías Peruanos por el Kambio 36661
Roberto Gamaniel Vieira Portugal Peruanos por el Kambio 30389
Alberto de Belaúnde de Cárdenas Peruanos por el Kambio 29271
Gino Francisco Costa Santolalla Peruanos por el Kambio 26128
Elard Galo Melgar Valdez Fuerza Popular 34022
Percy Eloy Alcalá Mateo Fuerza Popular 29999
Gladys Griselda Andrade Salguero de Álvarez Fuerza Popular 28045
Lizbeth Hilda Robles Uribe Fuerza Popular 13791
Patricia Elizabeth Donayre Pasquel Fuerza Popular 26543
Juan Carlos del Águila Cárdenas Fuerza Popular 15784
Tamar Arimborgo Guerra Fuerza Popular 10499
Jorge Enrique Meléndez Celis Peruanos por el Kambio 18972
Modesto Figueroa Minaya Fuerza Popular 2919
Vicente Antonio Zeballos Salinas Peruanos por el Kambio 11652
Mario Fidel Mantilla Medina Fuerza Popular 3778
Clayton Flavio Galván Vento Fuerza Popular 7629
Roy Ernesto Ventura Ángel Fuerza Popular 5579
Marisol Espinoza Cruz Alianza para el Progreso 18235
Hernando Ismael Cevallos Flores Frente Amplio 15244
Karla Melissa Schaefer Cuculiza Fuerza Popular 39750
Luis Humberto López Vilela Fuerza Popular 35286
Mártires Lizana Santos Fuerza Popular 26691
Freddy Fernando Sarmiento Betancourt Fuerza Popular 20084
Maritza Matilde García Jiménez Fuerza Popular 19956
Alberto Eugenio Quintanilla Chacón Frente Amplio 55218
Oracio Ángel Pacori Mamani Frente Amplio 22011
Edilberto Curro López Frente Amplio 12628
Lucio Ávila Rojas Fuerza Popular 28685
Moisés Mamani Colquehuanca Fuerza Popular 16088
César Villanueva Arévalo Alianza para el Progreso 25607
Rolando Reátegui Flores Fuerza Popular 18631
Gilmer Trujillo Zegarra Fuerza Popular 10835
Esther Saavedra Vela Fuerza Popular 7794
Jorge Andrés Castro Bravo Frente Amplio 23341
Guillermo Hernán Martorell Sobero Fuerza Popular 11857
Bienvenido Ramírez Tandazo Fuerza Popular 17299
Juan Carlo Yuyes Meza Fuerza Popular 13831
Glider Agustín Ushiñahua Huasanga Fuerza Popular 12184
Carlos Mario del Carmen Tubino Arias-Schreiber Fuerza Popular 10941

Lo anterior es tu nuevo data frame. Hagamos el grafico para Votos:

library(ggplot2)
base1=ggplot(legis2016,aes(x=Votos))
histNum= base1 + geom_histogram(bins=7) 
# hay simetria?
histNum 

Aqui vemos que la ditribución es asimétrica. Veamos si en la cola hay outliers (atipicos)

# hay atipicos?

base2=ggplot(legis2016,aes(y=Votos))
box=base2 + geom_boxplot() + coord_flip()

box 

Hay muchos atípicos. Vesmos los estadisticos:

# Los estadigrafos aparecen rapidamente así:
summary(legis2016$Votos)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    2919   15400   22258   34390   34970  326037

Grafiquemos los estadisticos:

# Podriamos graficarlos en el boxplot:
library(ggplot2)

estadigrafos=round(as.vector(summary(legis2016$Votos)),2)

box + scale_y_continuous(breaks = estadigrafos)  + theme(axis.text.x = element_text(angle = 45))

Veamos que tan grande es la asimetria:

library(DescTools)
Skew(legis2016$Votos,conf.level = 0.05)
##     skew   lwr.ci   upr.ci 
## 4.132060 4.477836 4.566327

La asimetria es muy grande.

Calculemos el IQR:

# La distancia intercuartilica es importante saberla:
IQR(legis2016$Votos)
## [1] 19569.5

El IQR nos sirve para calcular el umbral de atipicos:

# cuartil tres
q3=as.numeric(summary(legis2016$Votos)[5])

# calculando umbral (distancia del q3)
umbral= q3+1.5*IQR(legis2016$Votos)
umbral
## [1] 64324.25

Todo valor mayor a 64324.25 será atípico, veamos que congresistas tuvieron una votación atípica:

# todo valor mayor que el umbral será considerado un atípico:
legis2016[legis2016$Votos>umbral,]
##                    Congresistas electos                  Partido  Votos
## 49            Richard Frank Acuña Núñez Alianza para el Progreso 103864
## 66         Claude Maurice Mulder Bedoya          Alianza Popular 122778
## 69                    Marisa Glave Remy            Frente Amplio  97529
## 72       Kenji Gerardo Fujimori Higuchi           Fuerza Popular 326037
## 73     Cecilia Isabel Chacón de Vettori           Fuerza Popular 186242
## 74            Yeni Vilcatoma de la Cruz           Fuerza Popular 139912
## 75        Luz Filomena Salgado Rubianes           Fuerza Popular  82183
## 87     Mercedes Rosalba Aráoz Fernández   Peruanos por el Kambio 215233
## 88   Carlos Ricardo Bruce Montes de Oca   Peruanos por el Kambio 112377
## 89          Gilbert Félix Violeta López   Peruanos por el Kambio  80944
## 90 Saleh Carlos Salvador Heresi Chicoma   Peruanos por el Kambio  78615
## 91             Juan Manuel Sheput Moore   Peruanos por el Kambio  73412

Veamos el Gini y la curva de Lorenz:

Gini(legis2016$Votos,conf.level=0.95)
##      gini    lwr.ci    upr.ci 
## 0.4577620 0.3873347 0.5460404
library(gglorenz) # instalar 
## Registered S3 methods overwritten by 'ineq':
##   method   from     
##   plot.Lc  DescTools
##   lines.Lc DescTools
base1 + gglorenz::stat_lorenz(color='red') +
    geom_abline(linetype = "dashed") + coord_fixed() +
    labs(x = "% Acumulado de Congresistas en orden de votacion",
         y = "% Acumulado de Votos",
         title = "Relación congresista / votos",
         caption = "Fuente: WIKIPEDIA") + geom_vline(xintercept = 0.8, color='green')

La parte superior de la curva en rojo, a partir del corte de la línea verde, es más del 50%. De ahí que el 20% de los congresistas más votados acumulan más de la mitad del total de los votos.