R

Un par de novedades de R 4.4.0 y algunos otros asuntos más

I.

Una vulnerabilidad asociada a R y un análisis sobre la intrahistoria de la misma. Se refiere a la importación acrítica de ficheros binarios de datos en R, en el que un agente malicioso puede haber insertado código que no quieres ver corriendo en tu máquina.

II.

Hay gente que busca asociaciones en tablas con millones de celdas, la mayor parte de las cuales tienen valores 0 o 1. Es un problema con la peor de las pintas del mundo, pero hay artículo y código.

Cortos (sobre R)

I.

El artículo Locally Adaptive Tree-Based Thresholding Using the treethresh Package in R describe una versión sofisticada de un truco que suelo usar para detecter cambios de régimen, etc., en series temporales:

  • Quieres modelar una serie temporal
  • Pero hay motivos para pensar que en realidad es la concatenación de varias series temporales distintas, con regímenes distintos.
  • Quieres filtrar y quedarte con la representativa de hoy (y el corto plazo vendiero).
  • Luego usas árboles más o menos como en el artículo.

II.

Lo que se cuenta aquí me gusta y no me gusta:

Las ANOVAs tienen interés meramente histórico

Todo eso que se conoce como ANOVA tiene, a lo más, interés histórico. Se puede hacer más y mejor con igual o menor esfuezo. ¿Cómo? Aplicando lo que se cuenta aquí.

Nota: Interés histórico no significa no interés: muchas veces existe un solapamiento importante entre el orden histórico de los conceptos y el orden en que es más natural aprenderlos (o enseñarlos).

Cartogramas "de Dorling"

R

Motivado por esta entrada construí

usando

muns <- st_read("data/CifraPob2023.shp")
peninsula <- muns[muns$ccaa != 'Canarias',]
plot(peninsula["pob_23"])
peninsula <- st_transform(peninsula, 25830)


peninsula_dorling <- cartogram_dorling(
  x = peninsula,
  weight = "pob_23",
  k = 0.2,
  itermax = 100)

plot(peninsula_dorling["pob_23"])

sobre unos datos que ya no recuerdo de dónde bajé. La única línea no autoexplicativa del código es

peninsula <- st_transform(peninsula, 25830)

que transforma las coordenadas originales de los datos en coordenadas proyectadas (o, más bien, las coordenadas proyectadas que rigen en la zona peninsular). El 25830 en cuestión me lo chivó un LLM.

Cortos (casi todos sobre R)

I.

¿Que solo me haya enterado que existe la función coplot en R en 2024? Se habla de ella aquí y aquí. En el fondo, son los pequeños múltiplos de toda la vida con algunas pequeñas diferencias interesantes.

II.

Nota para mí: en mi próximo proyecto de predicción (de series temporales), acudir a Open Forecasting y darle una oportunidad antes y en lugar de aterrizar por inercia, por defecto y por pereza en Forecasting: Principles and Practice.

La progresividad fiscal: una perspectiva temporal

En una entrada anterior hablé de la curva de Laffer y de la predisposición a trabajar en los últimos meses del año. En esta quiero abundar sobre el asunto ilustrando cómo evolucionan los tipos marginales del IRPF por mes.

Porque la idea de los impuestos progresivos es que pague más no solo en términos absolutos sino también relativos, quien más gane. Pero la gente no tiene todos sus ingresos el día 31 de diciembre sino que los va acumulando a lo largo del año. Al final de enero está todavía en los tramos más bajos del IRPF, así que su IRPF marginal es minúsculo. Pero conforme avanza el año, su IRPF marginal va aumentando.

¿De dónde vienen las interacciones?

El contexto es, esencialmente, la creación de modelos lineales —no necesariamente los clásicos—, aunque la discusión podría extenderse más allá. Una cosa que nos suelen enseñar los libros es que si en un modelo de la pinta

y ~ t + g

(donde t es un tratamiento y g es algún tipo de grupo) nos da por introducir una interacción (en este caso solo cabe t*g) tenemos necesariamente que incluir los efectos individuales t y g so pena de incurrir en una larga retahíla de pecados estadísticos. La admonición suele venir seguida de una discusión que, admito, nunca he acabado de comprender.

Números aleatorios, estado interno y su relación con el paralelismo

I.

En primer lugar, no voy a hablar de números aleatorios sino seudoaleatorios. Resumiéndolo todo mucho, un generador de números seudoaleatorios (PRNG en lo que sigue) es una función que a partir de una secuencia fácilmente adivinable (p.e., 0, 1, 2,…) genera otra de números con apariencia aleatoria.

Los números de la secuencia adivinable constituirían los distintos estados del PRNG. En R, Python y otros lenguajes populares, el generador de números aleatorios hace dos cosas: generar un número aleatorio y actualizar el estado.

¿Dejar morir pxR?

R

¿Dejar morir pxR? He ahí la cuestión.

pxR es un paquete de R en CRAN en el que figuro como mantenedor. Es un subproducto de mis antiguas inclinaciones hacia el procomún. Me fue útil para alguna que otra actividad inútil.

El paquete sirve para importar a R datos en el formato Px. Este formato fue concebido en una época en la que aún no existían cosas mejores y mejor pensadas —XML, JSON, datos tidy, etc.—, los ficheros se intercambiaban en disquette (¿se escribía así? ya no recuerdo bien) y casi todo el mundo usaba Windows. Era lo que había y hay que entenderlo; de otra manera, no se comprende casi ninguna de las decisiones de diseño del formato. Que, por otra parte, parece basado en la siguiente pareja de principios funcionales:

Código para resolver "wordles" en español

Este soy yo hoy mismo:

Este es mi script:

carlos@tiramisu:~$ wordle señor
Intento 1 -> seria

   Quedan 2 opciones.
   Las más populares son:
     señor : 228.79
     segur : 0.23

Intento 2 -> señor

Solución en 2 intentos: señor

Mi pequeño script tiende a ganarme. Lo cual me satisface enormemente.

En caso de que a alguien le interese, puede bajárselo de aquí. Existen dos versiones que implementan el mismo algoritmo, una en R y otra en Python. Las instrucciones de uso están en el repo.

Nueva "edición" de mi libro de R

R

Acabo de subir —que suena menos pomposo que publicar— la primera versión de la segunda edición de mi libro de R. Los cambios con respecto a la primera son:

  • He migrado a Quarto.
  • Algunas correcciones, sobre todo en bloques de código que dejaron de funcionar por hacer llamadas a servicios que han desaparecido (o, como Google Maps, han cambiado el método de suscripción).
  • Algún material nuevo, sobre todo relacionado con dplyr y el tidyverse. Aun asi, el libro sigue siendo fundamentalente agnóstico con respecto a ese dialecto.
  • He incorporado algunas mejoras sugeridas por algún amable lector en el pasado.
  • He comenzado —solo comenzado— a preparar soluciones para los casi 200 ejercicios planteados en el libro.

El enlace, ahora sí, aquí.

Funciones de enlace "por defecto" en (ciertos) GLMs

Después de publicar Una regresión de Poisson casi trivial con numpyro me riñeron por usar la identidad como función de enlace en la regresión de Poisson. Es decir, por especificarlo como

$$\lambda_t = a + b t$$

en lugar del estándar

$$\lambda_t = \exp(a + b t).$$

Hay varias cosas bastante bien conocidas y una que lo es bastante menos —y que resulta mucho más paradójica— que decir al respecto.

Antes necesito añadir que: