Programación lineal, de nuevo

Hoy me he retrasado en escribir por haber estado probando (y estresando, como hay quien dice), software para resolver problemas de programación lineal. En total, nada, unos diez millones de variables unos treinta millones de restricciones.

Nota: es un problema LP puro, nada de enteros, nada de pérdidas no lineales, etc.

  • Primera opción: Python + PuLP + CBC (de COIN-OR), que es el optimizador por defecto de PuLP. Rendimiento aceptable para el tipo de uso que se le acabaría dando. Se ha convertido en el benchmark.
  • Segunda opción: Python + OR-Tools (de Google), y en particular, Glop. Un tanto decepcionante: aunque ne términos de velocidad no es apreciablemente inferior a CBC, en muchos casos desistía y no encontraba ninguna solución.

Este tipo de problemas y yo nos reencontramos indefectiblemente cada cinco años. Así que, de una vez a otra, se me ha olvidado casi todo. De modo que si alguien tiene el asunto más fresco y le da rabia que algún diletante como opte por soluciones subóptimas y/o viejunas y esté entre asombrado e indignado de que ignore el último grito de la cosa, tiene la posibilidad de enmendarme a mí y enseñarnos, de paso, a todos, en los comentarios.

No hagáis esto o se darán cuenta de que sois muy cutres

Lo que no hay que hacer nunca si no quieres que se enteren de que eres inmensamente cutre es escribir código en las líneas del siguiente seudocódigo:

m = model(y ~ a + b + c)
if (modelo.p_value(a) > .05)
    m = model(y ~ b + c)

¡No, no, no, no, NO!

La ley de la cerveza para pintar nubes (y su relación con el análisis de la supervivencia)

El otro día pregunté a en un grupo de amigos, físicos mayormente, si les sonaba de alguna esquinita teórica de la carrera en que apareciese alguna función de la forma

$$ x(t) = \exp\left(-\int_0^t f(x) dx\right)$$

y uno, que trabaja en el mundo del videojuego dio con la línea 401 del código que aparece aquí y que sirve para pintar las nubes hiperrealistas que aparecen en la misma página.

Es una aplicación de la ley de Beer en la que mis lectores más sofisticados reconocerán el estrecho vínculo con el análisis de la superviencia. En este caso, la que trata de sobrevivir es una intensidad luminosa que atraviesa diversos medios que la van atenuando. Al ser potencialmente heterogéneos, la función de supervivencia adquiere la forma

No leáis nada de lo que diga este inepto: no sabe por dónde le pega el aire

Hay gente que va dándoselas de nosequé y luego resulta que no sabe por dónde le pega el aire. Veámoslo hablando de análisis de la supervivencia:

En cualquier caso, con datos de esa naturaleza (isótopos radioactivos, enfermos de cáncer, etc.) no se informa la vida media sino, generalmente, la semivida. Es decir, cuánto tiempo pasa hasta que se liquida la mitad de una cohorte. En este caso, lo suyo sería estimar la semivida ponderada por importe.

Sobre la función de riesgo en el análisis de la supervivencia

Tienes una función de supervivencia

y piensas que es posible aproximarla usando segmentos de exponencial usando primero una rejilla gruesa,

y luego cada vez más fina,

hasta que sean indistinguibles.

Las distintas aproximaciones son

$$ \hat{S}(t) = \exp\left(-\sum_{i \le n} \lambda_i \Delta - \lambda_n (t - t_n)\right)$$

donde $latex n$ es el índice del intervalo que contiene a $latex t$ los $latex \lambda_i$ son los coeficientes en los segmentos de exponencial. Esa expresión que converge a

¿Por qué el optimizador de una red neuronal no se va al carajo (como suelen L-BFGS-B y similares)?

Vale, admito que no funciona siempre. Pero una manera de distinguir a un matemático de un ingeniero es por una casi imperceptible pausa que los primeros realizan antes de pronunciar optimización. Un matemático nunca conjuga el verbo optimizar en vano.

[Una vez, hace tiempo, movido por una mezcla de paternalismo y maldad, delegué un subproblema que incluía el fatídico optim de R en una ingeniera. Aún le debe doler el asunto.]

"Poor Economics": el resumen

Leí hace un tiempo, antes de que concediesen el Nobel a sus autores y porque había oído hablar muy bien de él a un tipo que conozco, Poor Economics.

Es un libro muy deprimente y voy a explicar aquí por qué.

Advierto que escribo de memoria: ni he revisado el libro ni lo que de él anoté para este infrarresumen.

El libro tiene muchas páginas divididas en N+1 capítulos. Los N primeros describen muchos, muchísimos RCTs (¿en el orden de cientos?) agrupados por temas —que si microcréditos, que si redes para los mosquitos para prevenir la malaria,…— en un montón de países. Tienen un denominador común: nada funciona. Todo lo que se ensaya fracasa por los motivos más variopintos.

"The great reset"

La ciencia de datos es la ciencia de la extrapolación. Todas las técnicas que la componen tratan de eso: de como proyectar hacia el futuro el comportamiento pasado. Si funciona, es por las inercias que operan en lo físico, en lo sicológico, en lo conductual.

[La ciencia de datos puede (no necesariamente, pero puede) ser una extrapolación objetiva: de ahí que quienes denuncian su presunta amoralidad solo nos están haciendo saber una opinión: que el pasado no encaja con su personalísimo criterio ético.]

Optimización estocástica

R

Una de los proyectos en los que estoy trabajando últimamente está relacionado con un problema de optimización no lineal: tengo un modelo (o una familia de modelos) no lineales con una serie de parámetros, unos datos y se trata de lo que no mercería más explicación: encontrar los que minimizan cierta función de error.

Tengo implementadas dos vías:

  • La nls, que usa un optimizador numérico genérico para encontrar esos mínimos. (Nótese que uso nls y no nls porque esa función me queda muy corta).
  • La stan, donde especifico el modelo, introduzco una serie de prioris más o menos informativas según lo que sepa de mi problema y estimo la distribución a posteriori de mis parámetros.

Ambas tienen sus ventajas y desventajas. La una es rápida y la otra no; la una me da poca información sobre los parámetros y la otra, mucha; una me permite introducir mucha información a priori y la otra casi nada, etc.

Análisis (bayesiano) de pruebas con sensibilidad/especificidad desconocida

Esto tiene que ver con lo del estudio ENECOVID, por supuesto.

Esto tiene que ver con los ajustes que hay que realizar en los resultados por la menos que perfecta sensibilidad y especificidad.

Porque no basta con lo que diga el prospecto de los kits chinos.

Por eso es recomendable leer Bayesian analysis of tests with unknown specificity and sensitivity.

Coda: Cuando era matemático y comencé a estudiar estadística, me llamaba mucho la atención (por no decir que me escandalizaba) la alegría con la que estimadores sujetos a error de un modelo se insertaban como verdad divina en otro. Que es lo que aparentemente se hace cuando el estimador puntual de sensibilidad y especificidad copipega tal cual en las fórmulas del ajuste.

¿Estos son los argumentos para "un debate riguroso sobre las transferencias de renta"?

Eso, que he estado leyendo Un debate riguroso sobre las transferencias de renta, donde se anuncia que

A raíz de la pandemia ha vuelto al debate público la pregunta de cómo organizar nuestro estado del bienestar para proteger a los más vulnerables. Uno de los protagonistas del debate ha sido la idea de una renta –sea básica o mínima– que reduzca los efectos de la crisis económica y quizá también se convierta en una pieza permanente de nuestro sistema de prestaciones.

Micromuertes y coronavirus

[Esta entrada abunda en la que escribí hace nueve años sobre las micromuertes y sin la cual no se entiende.]

El concepto de micromuerte sirve para anclar y comparar adecuadamente riesgos diminutos. De acuerdo con la entrada que referencio arriba, una micromuerte equivale al riesgo (recuérdese: ¡promedio!) de caminar 15 km o conducir 250. Pasar una noche en el hospital consume 75 de ellos (por riesgo de contagios que no tengan que ver con el motivo de ingreso) y dar a luz, alrededor de 100.