Los datos están histogramizados… ¿quién los deshisotogramizará?

Hace un tiempo quise hacer cosas malísimas con datos fiscales de España y Dinamarca. Pero los datos estaban histogramizados:

Gracias a Freakonometrics di con binequality. Adaptando su código, escribo

library(rvest)
library(plyr)

dk <- read_html("http://www.skm.dk/english/facts-and-figures/progression-in-the-income-tax-system")
tmp <- html_nodes(dk, "table")
tmp <- html_table(tmp[[2]])

header <- tmp[1,]
tmp <- tmp[-c(1, 2),]
colnames(tmp) <- header

# elimino declaraciones negativas
tmp <- tmp[-1,]

# elimino el total
tmp <- tmp[-(nrow(tmp)),]

colnames(tmp) <- c("rango", "contribuyentes", "X1", "income", "tax1", "tax2", "pct")

irpf_dk <- tmp[, c("rango", "contribuyentes", "income", "tax1", "tax2")]

irpf_dk$contribuyentes <- as.numeric(irpf_dk$contribuyentes)
irpf_dk$income <- as.numeric(irpf_dk$income)
irpf_dk$tax1 <- as.numeric(irpf_dk$tax1)
irpf_dk$tax2 <- as.numeric(irpf_dk$tax2)


irpf_dk$tax <- irpf_dk$tax1 + irpf_dk$tax2
irpf_dk$tax1 <- irpf_dk$tax2 <- NULL
irpf_dk$pct <- irpf_dk$tax / irpf_dk$income


irpf_dk$desde <- c(0, 25, 50, 75, 100, 125, 150, 200, 250, 300, 350, 400, 500, 750, 1000)
irpf_dk$hasta <- c(irpf_dk$desde[-1], Inf)

irpf_dk$desde <- irpf_dk$desde / 7.44
irpf_dk$hasta <- irpf_dk$hasta / 7.44
irpf_dk$income <- irpf_dk$income / 7.44
irpf_dk$tax    <- irpf_dk$tax / 7.44

irpf_dk$mean_income <- irpf_dk$income / irpf_dk$contribuyentes * 1000

irpf_dk$rango <- NULL

para bajar y preprocesar los datos y después

library(binequality)

irpf_dk <- irpf_dk[-1,]

fit_LN <- fitFunc(ID = rep("irpf_dk", nrow(irpf_dk)), 
                  hb = irpf_dk$contribuyentes, 
                  bin_min = irpf_dk$desde, 
                  bin_max = irpf_dk$hasta,
                  obs_mean = irpf_dk$mean_income, 
                  ID_name="dki", 
                  distribution="LOGNO", 
                  distName="LOGNO")

N  <- irpf_dk$contribuyentes[-nrow(irpf_dk)]
y2 <- N / sum(N) / diff(irpf_dk$desde) 
u  <- seq(min(irpf_dk$desde), 2 * max(irpf_dk$desde), length = 101)
v  <- dlnorm(u, fit_LN$parameters[1], fit_LN$parameters[2])

plot(u,v,col="blue",type="l",lwd=2)
for(i in 1:(n-1)) rect(irpf_dk$desde[i],0, 
                       irpf_dk$hasta[i], y2[i], 
                       col = rgb(1,0,0,.2), border="white")

para obtener, entre otras cosas y sin mayores pretensiones gráficas,

Nota: La distribución no ajusta bien, incluso después de un truco sucio en alguna parte del código para cargarme la parte más fea de la distrbución. Queda ahí no más como código de ejemplo.