R

Reconstrucción de una distribución a partir de un histograma

Un viejo amigo me escribe y me propone (simplificándolo) el siguiente problema:

  • Tengo una normal de parámetros desconocidos.
  • De ella solo dispongo de un histograma.
  • ¿Cómo puedo reconstruir la normal original? Es decir, ¿cómo puedo estimar los $\mu$ y $\sigma$ originales?

En el caso concreto, la normal tiene una media próxima a 255 y los valores del histograma proceden de una muestra suya redondeada al entero más próximo.

Aquí va mi solución.

Una nota sobre la simulación por el método del rechazo

El otro día publiqué un pequeño fragmento de código,

a <- 2.89
b <- 36.81
sample_dist <- function() rbeta(1, a, b)

sample_p <- function(y){
  candidate <- sample_dist()
  my_sample <- runif(1)

  if (y == 1) if (my_sample < candidate) return(candidate)
  if (y == 0) if (my_sample < 1 - candidate) return(candidate)

  sample_p(y)
}

p1 <- replicate(100000, sample_p(1))
p0 <- replicate(100000, sample_p(0))

auc <- mean(p1 > p0)
auc

que había usado antes aquí, para muestrear unas distribuciones relacionadas con el cálculo del AUC en modelos perfectamente calibrados. Lo había escrito meses atrás y supongo que me pasó como a la mayoría de mis lectores: darlo por bueno primero y usarlo después suponía todo un acto de fe (en mí, además).

Unas cuantas notas sobre estadística, teoría y de la decisión y otras cuestiones

Un artículo sobre cómo crear intervalos de predicción conformes en modelos de ML, en particular con modelos basados en XGBoost. Y otro, este, sobre cómo inferir el tamaño muestral a partir de su anchura.

También de John D. Cook, ODE to Fisher’s transform. Aparentemente, para normalizar el coeficiente de correlación se puede aplicar una transformación en la que interviene atanh y cuya derivación exige resolver una ecuación diferencial ordinaria. Por su parte, la ecuación diferencial surge de igualar el desarrollo de la curtosis a cero.

¿Reemplaza pxmake a pxR? Espero que sí (y, además, que ninguno de los dos haga falta pronto)

De pxR ya he hablado alguna vez. Pueden verse las entradas que le he dedicado aquí.

pxR es un paquete coral de R que promoví, en el que escribí la mayor parte del código y que aún mantengo muy renuentemente. Permite leer y crear ficheros con el formato px, que utilizan todavía algunos servicios de estadística pública por el mundo. Eso no quita que “antediluviano” sea el adjetivo que mejor lo describe: fue creado antes de la popularización de los formatos modernos y, no en vano, la última de las entradas que le dediqué allá por 2023 se titulaba ¿Dejar morir pxR?

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 los 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 detectar 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 venidero).
  • Luego usas árboles más o menos como en el artículo.

II.

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

Cortos (sobre IA y LLMs, fundamentalmente)

I.

Que ssh tenía una puerta trasera (en sus últimas versiones). Está por todas partes, incluido en The Economist. Pasó, se ve, esto:

  • La puerta trasera fue plantada en las XZ Utils.
  • Su principal mantenedor es un tal Lasse Collin, que, se dice, no parece andar muy bien de salud mental.
  • Otro desarrollador, Jia Tan, colaboró en el proyecto durante un tiempo. Finalmente, en febrero, acabó insertando el código malicioso.
  • Se ve que el tal Jia Tan no existe; probablemente, se trate de una identidad falsa manejada por… ¿el gobierno ruso?

Véase también esta descripción más técnica y detallada.

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 esfuerzo. ¿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.