Números

Un acto fallido: la pregunta sigue, pues, abierta

Jot Down es una publicación recomendable. Aunque frecuentemente peque de a lo que tienden las publicaciones de letras (en el sentido menos amable del término): que prime el escribir bonito sobre la sustancia, el argumento y su coherencia.

El artículo que motiva este se anuncia como Especulación inmobiliaria, tradición centenaria y recoge tres episodios (¿anécdota? ¿categoría?) bien conocidos pero florida y amenamente descritos:

  • El del duque de Lerma a principios del XVII.
  • El del marqués de Salamanca, en el XIX.
  • El que se deriva de la ley del suelo de 1998.

Se habla abundantemente de los aspectos negativos de los tres (recuérdese: de letras). Al tratar el último, el más interesante en términos efectivos, se arrima pero no llega a plantear (y, por supuesto, tratar de dar respuesta a) la pregunta más obvia. Es algo así como si en una película de intriga, en los últimos minutos, tras la escalada de la tensión, en lugar de resolver el misterio e identificar y detener al asesino, cambiase súbitamente el género y una horda de zombis se comiese el cerebro de todos los implicados.

Sentido de la proporción

Es el segundo de los síntomas de naïveté económica discutidos aquí. Que, por supuesto, no se circunscribe a discusiones de naturaleza económica. Recomendadísimo.

¿Siguen votando igual los diputados?

Hace seis años escribí esto. Hoy actualizo aquella entrada para crear

Y, por supuesto, el código (que he tenido que reescribir en gran medida):

library(xml2)
library(reshape2)
library(plyr)

# descarga y manipulación de datos

dia_votacion <- function(n.votacion){
  dir.create("tmp")
  url <- paste("https://app.congreso.es/votacionesWeb/OpenData?sesion=",
                n.votacion, "&completa;=1&legislatura;=12", sep = "")
  download.file( url, destfile = "./tmp/votos.zip")
  try(unzip("./tmp/votos.zip", exdir = "./tmp"), TRUE)

  ficheros <- dir("./tmp", pattern = ".*xml", full.names = T)

  if (length(ficheros) == 0)
    return(NULL)

  res <- lapply(ficheros, function(fichero){

    print(fichero)

    datos <- as_list(read_xml(fichero))

    sesion <- datos$Resultado$Informacion$Sesion
    numero <- datos$Resultado$Informacion$NumeroVotacion

    try(datos <- ldply(datos$Resultado$Votaciones, unlist), TRUE)

    if (class(datos) == "try-error")
      return(NULL)

    if (class(datos) != "data.frame")
      return(NULL)

    if(nrow(datos) == 0)
      return(NULL)

    datos$sesion <- sesion
    datos$numero <- numero

    datos
  })

  unlink("./tmp", recursive = T)      # borra el directorio temporal

  res
}

tmp <- lapply(1:156, dia_votacion)

datos <- tmp[!sapply(tmp, is.null)]
datos <- lapply(datos, function(x) do.call(rbind, x))
datos <- do.call(rbind, datos)

datos$numero <- as.numeric(unlist(datos$numero))
datos$sesion <- as.numeric(unlist(datos$sesion))

datos$asunto <- as.character(1000000 + 1000 * datos$sesion + datos$numero)

datos$ind <- 0
datos$ind[datos$Voto == "No"] <- -1
datos$ind[datos$Voto == "Sí"] <- 1

tmp <- dcast(datos, asunto ~ Diputado, value.var = "ind", fill = 0)
matriz_votos <- as.matrix(tmp[, -1])

rownames(matriz_votos) <- NULL
colnames(matriz_votos) <- NULL

heatmap(matriz_votos, xlab = "Diputados", ylab = "Asuntos", scale = "none")

No sé si alguien querrá sacarle más punta a la no historia de hoy.

Encuesta Social Europea: un cociente

Leo (fuente):

[…] en su comparecencia del año pasado comentó algo sobre un pago al exterior de 174 000 euros, correspondiente a la cuota del consorcio de infraestructuras científicas, ERIC, que, como bien sabe, es el consorcio internacional que se encarga de realizar la encuesta social europea. El año pasado dijo que le preocupaba que 2017 fuese el último año en el que España formase parte de esa encuesta social europea porque teníamos cuota de país invitado y no de socio de la infraestructura, algo que nos parece preocupante. Veo que este año en los presupuestos hay un pago al exterior, pero de menor importe, de 139 000 euros. En este sentido, le quería preguntar si nos han hecho un descuento, una tarjeta de socios, una de país pobre…

Acerca del CIS y la cocina

Escribo hoy acerca del CIS y la cocina de la intención de voto. Lo hago desde la ignorancia informada en esos temas y sin pretensión alguna de ser o parecer más listo que otros.

El CIS realiza unas encuestas (con un muestreo amplio y bien diseñado, cuentan), de las que obtiene, entre otras cosas, una serie de datos, $latex x$ que incluyen simpatía, recuerdo de voto, etc. Existe por otra parte un valor enteléquico, $latex y$, no siempre observable, que conocemos por resultados electorales si se votase hoy o algo parecido. La llamada cocina es simplemente una función $latex f$ tal que $latex \hat{y} = f(x)$ es próxima a $latex y$. Esta función se construye gracias a que históricamente, cada vez que se convocan elecciones, se han observado parejas $latex (x, y)$.

Una anécdota sobre el mercado eléctrico y sus mermas

Hace años, algunos ya, di un curso de R en una empresa de consultoría bastante grande. La impartí dentro de un grupo que desarrollaba soluciones para el mercado eléctrico. Hablando con ellos, a la hora del café, me contaron uno de los proyectos en los que trabajaban: un sistema de optimización de la distribución eléctrica que podía ahorrar millones (no recuerdo bien la cifra, pero era impresionante) a las compañías eléctricas en concepto de energía que se disipaba y perdía sin beneficiar a nadie. Sin embargo, el proyecto no tenía comprador por un muy particular motivo: la legislación del mercado eléctrico obliga a los usuarios finales a compensar a las empresas por esas pérdidas. De modo que si se reducía la pérdida, se reducía igualmente la facturación de las compañías.

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

El anómalo verano de 2018

Las temperaturas diarias máximas promedio durante el verano de 2018 en España han sido

Son las del trazo grueso y las he representado sobre las de los veranos anteriores (trazo fino) para darles contexto. (Nota: no existe tal cosa como temperatura promedio, por supuesto. He partido de temperaturas provinciales (que tampoco existen, en sí mismas pero que proporciona AEMET) y he promediado ponderando por población.)

Se aprecian dos anomalías claras, una por exceso y otra por defecto.

¿Funcionan los programas sociales?

En España estamos acostumbrados a que los programas sociales se implementan y ya. Se convierten, como la semana santa o las navidades, en fenómenos culturales que, simplemente, están ahí (p.e., el PER) y tienen que estarlo necesariamente.

En otros países se evalúan, se miden y cabe preguntarse: ¿funcionan?

Pues en otros sitios donde se miden esas cosas, se han obtenido números como estos (que es de donde traduzco):

  • Tal vez el 80% de los que se han medido usando técnicas rigurosas y con una muestra suficiente no funcionan, es decir, producen un efecto que compense el coste.
  • Tal vez un 1-10% tiene efectos negativos.
  • Los proyectos que no han sido medidos son probablemente peores (porque se tiende a investigar más los más promisorios).

Lo anterior tiene, no obstante, una lectura positiva: ¡el ~20% funcionan! Es decir, que si este tipo de proyectos se evaluasen tempranamente y pudiesen ser cancelados de no funcionar, aplicando una especie de metáfora del reinforcement learning, en unos años casi todos serían buenos.

Reciclar, ¿es siempre y en toda circunstancia lo correcto?

Vaya por delante que quien esto escribe recicla a rajatabla y que hace muchos, muchos años que no ha comenzado un folio blanco limpio. Pero es una postura personal.

El debate sobre el reciclaje, típicamente, se plantea en términos absolutos y maniqueístas: reciclar es, simplemente, bueno y no reciclar es malo.

Pero leyendo cosas diversas este verano, tropecé con un enconado alegato en contra del reciclaje de papel. Al fin y al cabo, no hay nada tan reciclable como la pasta de papel virgen: proviene de árboles y donde hubo uno que se transformó en folios, se puede plantar (y de hecho, se suele plantar) otro. El argumento es más largo y cubre más aspectos del asunto, como el de confrontar los costes totales (incluidos los medioambientales, por supuesto) de usar siempre pasta virgen de la reciclada (a la que se suman también los costes de recogida, etc.).