-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathBenford.R
59 lines (45 loc) · 2.75 KB
/
Benford.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
############################################################
### Ley de Benford ####
############################################################
# Se muestra la dependencia explicita de las librerias utilizadas
# Cargamos los datos que queremos analizar
city_data <- maps::world.cities
############ POPULATION WORLD CITIES ###########################
population <- as.character(city_data$pop) # Extraemos la info de la población
# Extraemos la primera cifra
first_digit <- stringr::str_extract(population, "\\d{1}")
# Hacemos un histograma de la frecuencia de aparición de una determinada cifra
# en el array
hist(as.numeric(first_digit), include.lowest = TRUE, main = "Frecuencia como primeros dígitos (Población)",
col = rgb(0, 1, 0, 0.3), xlab = "Primer dígito", ylab = "Frecuencia", xaxt = 'n')
axis(side=1, at=seq(0.75,8.75, 1), labels=seq(1,9,1))
# Si normalizamos el área
hist(as.numeric(first_digit), include.lowest = TRUE, freq = FALSE, main = "Frecuencia como primeros dígitos (Población)",
col = rgb(0, 1, 0, 0.3), xlab = "Primer dígito", ylab = "Densidad de probabilidad", xaxt = 'n')
axis(side=1, at=seq(0.75,8.75, 1), labels=seq(1,9,1))
par(new=TRUE)
# Ecuacion Ley de Benford
digitos <- c(1:9)
probabilidades <- log10(digitos + 1) - log10(digitos)
plot(digitos, probabilidades, type = "c", xaxt = 'n', yaxt = 'n', xlab = " ", ylab = " ")
################### POPULATION SPAIN CITIES #####################
population <- as.character(city_data$pop[city_data$country.etc == "Spain"])
first_digit <- stringr::str_extract(population, "\\d{1}")
hist(as.numeric(first_digit), include.lowest = TRUE, main = "Probabilidad de aparición como primer dígito (Población ESP)",
col = rgb(0, 1, 0, 0.3), xlab = "Primer dígito", ylab = "Frecuencia", xaxt = 'n')
axis(side=1, at=seq(0.75,8.75, 1), labels=seq(1,9,1))
# La distribución no es tan clara porque el número de ciudades consideradas es reducido
############# LATITUDE WORLD CITIES #############################
# Prueba: ¿se cumple la ley con la distribución de la latitud? *NO DEBERÍA*
lat <- as.character(city_data$lat) # Extraemos la info de la latitud
# Extraemos la primera cifra
first_digit <- stringr::str_extract(lat, "\\d{1}")
# Hacemos un histograma de la frecuencia de aparición de una determinada cifra
# en el array
hist(as.numeric(first_digit), include.lowest = TRUE, main = "Frecuencia como primeros dígitos (Latitud)",
col = rgb(0, 1, 0, 0.3), xlab = "Primer dígito", ylab = "Frecuencia", xaxt = 'n')
axis(side=1, at=seq(0.75,8.75, 1), labels=seq(1,9,1))
############## ECUACIÓN ##############################################
digitos <- c(1:9)
probabilidades <- log10(digitos + 1) - log10(digitos)
plot(digitos, probabilidades, type = "c")