R

Modelos no lineales directos e inversos

Las malandanzas de Circiter la han conducido al siguiente entuerto: estimar $latex \alpha$ donde

$$ y = f_\alpha(x) + \epsilon$$

y $latex f_\alpha$ es una función no lineal horrible. Sin embargo, $latex f^{-1}_\alpha$ es mucho más manejable y podría plantearse el modelo

$$ x = f^{-1}_\alpha(y) + \epsilon$$

(donde este nuevo $latex \epsilon$ no coincide con el anterior: piénsese en el método delta y léase la nota final).

Un ejemplo. Que arranca con unos datos autoexplicativos:

rOpenSpain: ahí tiro el guante

La gente de rOpenSci hace cosas a las que merece la pena atento. Tanto por los objetivos como por medios y las formas. Recomiendo seguir sus últimas publicaciones acerca de la profesionalización del proceso de desarrollo de código.

Llevo unos meses jugando con una idea inspirada por rOpenSci: crear un respositorio y un consorcio más o menos formal que desarrolle, mantenga y mejore herramientas (en R) de interés para el procesamiento y análisis de datos ya no científicos sino españoles. Hablo, obviamente, de INE (EPA, EPF, censo, padrón,…), CIS (barómetros, etc.), IGN (Siane,…), encuestas electorales, etc.

Efectos secundarios (nota: que existan no significa que debas usarlos)

Una función no debería cambiar nada de cuanto la rodea. Debería devolver algo y ya. Se acepta barco como animal acuático cuando hay funciones que escriben en logs, guardan datos en disco o crean gráficos.

R deja que los usuarios se disparen en el pie permitiendo hacer cosas tan peligrosas como:

a <- new.env()

a$1     # error

foo <- function(){
  a$a <- 1
}

foo()
a$a
# [1] 1

De la misma manera, si le enseñas un cuchillo a una vieja, es posible que te dé su bolso con todo lo que contiene. Pero eso no significa que debas usar los cuchillos para tales fines.

Una comparación de lenguajes de programación en una esquinita pequeña de la economía

El título, no el de esta entrada sino el de A Comparison of Programming Languages in Economics, es una sinécdoque confusa.

Que nadie busque en él consejo sobre qué lenguaje estudiar si le interesa el mundo de la economía (en general). O fuera de ella (también en general).

Encontrará más bien la implementación de la solución a un único problema dentro de los muchos que supongo comprende esa disciplina. Uno, además, con el que no he visto (en persona) a economista alguno ganarse el pan ni en la academia ni fuera de ella.

CatastRo, un paquete de R para consultar la API del Catastro

R

Informo de que está disponible en GitHub el paquete CatastRo para consultar la API pública del Catastro.

No es una API particularmente extensa, pero es de esperar que se amplíe el catálogo de servicios disponible cuando comencemos a machacarla (o no: a saber qué hay en la mente de esa gente).

El paquete es el trabajo de fin de máster de mi alumno Ángel Delgado Panadero en el máster de ciencia de datos de la UTAD.

Python y R: una perspectiva markoviana

R

Hoy he visto

aquí y he escrito

m <- matrix(c(74, 15, 10, 1, 11, 50, 38, 1,
            5, 4, 90, 1, 17, 4, 19, 60),
            4, 4, byrow = TRUE)
m <- m / 100

luego

m %*% m %*% m %*% m %*% m %*% m %*% m %*% m %*% m %*% m %*% m %*% m %*% m%*% m%*% m%*% m%*% m%*% m%*% m %*% m %*% m %*% m %*% m %*% m %*% m %*% m %*% m %*% m %*% m %*% m %*% m%*% m%*% m%*% m%*% m%*% m%*% m
#          [,1]      [,2]      [,3]       [,4]
#[1,] 0.1926676 0.1133218 0.6696203 0.02439024
#[2,] 0.1926647 0.1133206 0.6696245 0.02439024
#[3,] 0.1926638 0.1133202 0.6696258 0.02439024
#[4,] 0.1926675 0.1133218 0.6696205 0.02439025

y finalmente

Gelmaneando

Hoy, gelmaneo así:

bar <- function(n, reps = 1e4){
  foo <- function(n){
    x <- rnorm(n)
    tmp <- t.test(x)
    c(tmp$p.value, abs(mean(x)))
  }

  res <- replicate(reps, foo(n))
  tmp <- t(res)
  tmp <- tmp[tmp[,1] < 0.05,]
  tmp[,2]
}

res <- lapply(c(3, 10, 20, 50, 100), bar)
sapply(res, mean)
#[1] 0.8662636 0.6583157 0.4934551 0.3240322 0.2337086

Resumo:

  • Fabrico un montón de errores de tipo I. Recuérdese: error de tipo I implica artículo publicado.
  • Hago variar el número de sujetos (3, 10, etc.), n.
  • Mido el tamaño (promedio) del efecto, E; el estudio de su distribución, ejercicio para el lector.

Y efectivamente, E es función decreciente de n.

Micromapas

Vienen a ser la versión geo de las sparklines. Por ejemplo,

Notas:

  • El gráfico anterior no es mío. El código (y datos) con el que se generó tampoco. Son de Susana Huedo, exalumna.
  • Está basado (todo hay que decirlo) en código de terceros y debería acordarme de cuál de ellos. Pero no es el caso.

Syberia tiene muy buena pinta [pero...]

R

Echadle un vistazo a Syberia (y me contáis qué tal os va). Tiene muy buena pinta y puede ser útil para produccionalizar código.

[Esto es casi todo; lo que sigue es omitible.]

Sin embargo y sin que necesariamente haga desmerecer a Syberia como tal, en la página arriba enlazada se lee:

In the viewpoint of the author, R is syntactic sugar around LISP, which enables arbitrary computation; Syberia is an attempt to support this conjecture by allowing the construction of arbitrary software projects within the R programming language, thereby finally outgrowing its long-overdue misconception as a statistical tool.

Hoy, como excepción, gritaré y justificaré: ¡Malditos logaritmos!

Dados unos números positivos hay que justificar por que no tomar logaritmos y no al revés. La carga de la prueba recae sobre quien no lo hace.

No obstante:

Tenía unos datos (para cada $latex t$) que siguen (me lo juran) un modelo teórico

$$ \log y \sim k \exp(-at)$$

Existen dos opciones para encontrar los parámetros deseados $latex k$ y $latex a$. El primero, tomando logaritmos y aplicando lm. El segundo, ajustando un modelo no lineal con, p.e., nls.

¿Les dará un patatús a mis excolegas?

R

En Gaussianos publicaron este problema:

En un triángulo acutángulo ABC tenemos que AH, AD y AM son, respectivamente, la altura, la bisectriz y la mediana que parten desde A, estando H, D y M en el lado BC. Si las longitudes de AB, AC y MD son, respectivamente, 11, 8 y 1, calcula la longitud del segmento DH.

El gráfico, construido por uno de los respondedores, Ignacio Larrosa Cañestro, es este: