<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Carlos J. Gil Bellosta</title><link>https://datanalytics.com/</link><description>Recent content on Carlos J. Gil Bellosta</description><generator>Hugo -- gohugo.io</generator><language>es</language><lastBuildDate>Thu, 05 Mar 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://datanalytics.com/index.xml" rel="self" type="application/rss+xml"/><item><title>«Peak population» por municipios</title><link>https://datanalytics.com/2026/03/05/peak-population-municipios/</link><pubDate>Thu, 05 Mar 2026 00:00:00 +0000</pubDate><guid>https://datanalytics.com/2026/03/05/peak-population-municipios/</guid><description>&lt;p&gt;El otro día me entretuve en crear&lt;/p&gt;
&lt;p&gt;&lt;img alt="Peak population municipios españa" loading="lazy" src="https://datanalytics.com/img/2026/peak-population-municipios-00.png#center"&gt;&lt;/p&gt;
&lt;p&gt;tras ver&lt;/p&gt;
&lt;p&gt;&lt;img alt="Peak population municipios eeuu" loading="lazy" src="https://datanalytics.com/img/2026/peak-population-municipios-01.jpeg#center"&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://x.com/paulg/status/2025327977471316030"&gt;en Twitter&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Muestra, municipio a municipio, el año (censurado por la izquierda en 1996) en el que se alcanzó la población máxima de acuerdo con los datos del padrón.&lt;/p&gt;
&lt;p&gt;Notas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Como he dicho, la API del INE solo ofrece datos de los últimos 30 años. Los datos anteriores, quién sabrá dónde estarán.&lt;/li&gt;
&lt;li&gt;He usado el término &lt;em&gt;censura&lt;/em&gt; en su acepción estadística.&lt;/li&gt;
&lt;li&gt;No me he entretenido en representar Canarias. Lo siento.&lt;/li&gt;
&lt;li&gt;Gran parte del código ha sido desarrollado por Claude.&lt;/li&gt;
&lt;li&gt;Claude ha sabido, de hecho, identificar la llamada a la API del INE necesaria para bajar los datos correspondientes.&lt;/li&gt;
&lt;li&gt;El INE ha puesto a disposición de los usuarios un paquete, &lt;a href="https://cran.r-project.org/web/packages/ineapir/index.html"&gt;&lt;code&gt;ineapir&lt;/code&gt;&lt;/a&gt; que facilita la descarga de datos de sus APIs. Bien.&lt;/li&gt;
&lt;li&gt;Los límites de los municipios los he bajado en formato GeoJSON del portal del Instituto Geográfico Nacional.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Y el código, a continuación (por si alguien quiere seguir jugando con él).&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;library&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ineapir&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;library&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sf&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;library&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;plyr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;library&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ggplot2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;df&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="nf"&gt;get_data_table&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;idTable&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;29005&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;tip&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;AM&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;nlast&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;verbose&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;TRUE&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;df_total&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="nf"&gt;[grep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Total. Total habitantes. Personas.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;Nombre&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="n"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;df_total&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="n"&gt;df_total&lt;/span&gt;&lt;span class="nf"&gt;[sapply&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df_total&lt;/span&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;Data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nrow&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="kr"&gt;in&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;nrow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df_total&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;df_total&lt;/span&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;Data[[i]]&lt;/span&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;Nombre&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="n"&gt;df_total&lt;/span&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;MetaData[[i]]&lt;/span&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;Nombre[1]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;df_total&lt;/span&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;Data[[i]]&lt;/span&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;Codigo&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="n"&gt;df_total&lt;/span&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;MetaData[[i]]&lt;/span&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;Codigo[1]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;tmp&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="nf"&gt;do.call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rbind&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;df_total&lt;/span&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;Data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;tmp&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="nf"&gt;ddply&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tmp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;.(Nombre&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Codigo&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rank&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;rank&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Valor&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ties.method&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;last&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;tmp&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="n"&gt;tmp[tmp&lt;/span&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;rank&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;tmp&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="n"&gt;tmp[&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;c&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Anyo&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;Valor&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;Nombre&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;Codigo&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;colnames&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tmp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="nf"&gt;c&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;year&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;pop&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;CODIGOINE&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;municipios&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="nf"&gt;st_read&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Municipios_-7023933172321596289.geojson&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;tmp&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="nf"&gt;merge&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;municipios&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tmp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;tmp&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="n"&gt;tmp[tmp&lt;/span&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;CODNUT1&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;ES7&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;ggplot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tmp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;geom_sf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;aes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fill&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;year&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;color&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;NA&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;scale_fill_viridis_c&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;Año&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;labs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;title&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;Año en que los municipios españoles alcanzaron su población máxima&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;subtitle&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;Excluyendo Canarias · Período 1996–2023&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;caption&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;Fuente: INE Padrón Municipal · Límites: IGN/CNIG CC-BY 4.0&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;theme_void&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;theme&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;plot.title&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;element_text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;16&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;face&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;bold&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;margin&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;6&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;plot.subtitle&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;element_text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;11&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;color&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;grey40&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;margin&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;plot.caption&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;element_text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;color&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;grey60&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;hjust&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;plot.margin&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Notas (10) sobre economía: del auge de la IA a los artefactos de la paradoja de Simpson los argumentos alrededor de la productividad</title><link>https://datanalytics.com/2026/03/02/cortos-econom%C3%ADa/</link><pubDate>Mon, 02 Mar 2026 00:00:00 +0000</pubDate><guid>https://datanalytics.com/2026/03/02/cortos-econom%C3%ADa/</guid><description>&lt;p&gt;&lt;em&gt;&lt;a href="https://marginalrevolution.com/marginalrevolution/2026/01/measuring-efficiency-and-equity-framing-in-economics-research.html"&gt;Measuring Efficiency and Equity Framing in Economics Research&lt;/a&gt;&lt;/em&gt;. Tyler Cowen glosa un artículo que utiliza LLMs para analizar más de 27k artículos económicos publicados entre 1950 y 2021 para concluir que el interés por la eficiencia alcanzó su punto máximo a finales de los años ochenta para ser progresivamente desplazado por el interés en la equidad.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;a href="https://nicholasdecker.substack.com/p/the-economist-as-reporter"&gt;The Economist As Reporter&lt;/a&gt;&lt;/em&gt;. Nicholas Decker argumenta que la IA acelerará radicalmente las tareas mecánicas de la investigación económica, liberando a los economistas para hacer algo más parecido al periodismo de investigación: identificar problemas reales, construir argumentos empíricos rigurosos y comunicar los hallazgos al público.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;a href="https://austinvernon.substack.com/p/speed-can-reindustrialize-america"&gt;Speed Can Reindustrialize America&lt;/a&gt;&lt;/em&gt;. Austin Vernon sostiene que el problema del sector industrial estadounidense no radica en la producción en masa sino en los sectores en los que es necesario fabricar pequeños volúmenes de piezas en plazos cortos y a un precio razonable y lo achaca a los &lt;em&gt;costes blandos&lt;/em&gt;, principalmente burocráticos.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;a href="https://www.construction-physics.com/p/do-commodities-get-cheaper-over-time"&gt;Do Commodities Get Cheaper Over Time?&lt;/a&gt;&lt;/em&gt; El análisis histórico de los precios de más de 100 materias primas revela que los productos agrícolas revela el abaratamiento pronunciado de los productos agrícolas y el leve encarecimiento de los combustibles fósiles, aunque estas tendencias no están tan claras desde aproximadamente el año 2000. El autor especula que el factor determinante en el abaratamiento es el grado en que la producción de una materia prima se asemeja a un proceso de manufactura industrial.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;a href="https://www.economist.com/finance-and-economics/2026/02/22/the-ai-productivity-boom-is-not-here-yet"&gt;The AI productivity boom is not here (yet)&lt;/a&gt;&lt;/em&gt;. Ya hemos hablado antes en estas páginas sobre la interpretación de las últimas cifras de producción y empleo en los EEUU: según los últimos avances, las primeras han crecido muy por encima de las segundas. Lo que significa, de no haber desviaciones estadísticas, que el cociente, la «productividad», ha crecido y muchos expertos lo asocian al impacto de la IA en la economía. Pero The Economist no está del todo seguro &amp;mdash;como tampoco lo está el autor de estas líneas&amp;mdash; y cree que es más probable que se deba al &lt;em&gt;efecto composición&lt;/em&gt; (o paradoja de Simpson).&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;a href="https://www.readjunto.com/p/the-cato-institute-is-disemboweling"&gt;The Cato Institute Is Disemboweling America&lt;/a&gt;&lt;/em&gt;. El motivo es un estudio publicado por el Cato Institute &amp;mdash;de inclinaciones &lt;em&gt;libertarias&lt;/em&gt;&amp;mdash; que defiende que la inmigración tiene un efecto neto positivo para las arcas públicas de los EEUU. Todos esgrimen números y acusan a los otros de realizar &lt;em&gt;ejercicios ideológicos disfrazados de investigación empírica&lt;/em&gt;. ¿Qué cosa será la cierta? ¿Importa acaso?&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;a href="https://nicholasdecker.substack.com/p/yes-immigrants-must-make-us-richer"&gt;Yes, Immigrants Must Make Us Richer&lt;/a&gt;&lt;/em&gt;. Nicholas Decker tercia en el debate del párrafo anterior argumentando que el supuesto estándar de rendimientos constantes a escala en los modelos económicos sobre inmigración es «un sinsentido evidente», porque la especialización, las ideas y los costes fijos implican necesariamente rendimientos crecientes. En ese sentido, asimila la inmigración al crecimiento demográfico &lt;em&gt;endógeno&lt;/em&gt; (por llamarlo de alguna manera).&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;a href="https://davidoks.blog/p/extreme-poverty"&gt;The era of declining global poverty is over&lt;/a&gt;&lt;/em&gt;. Se prevé que la pobreza extrema, tras décadas de descensos continuos, comenzará a crecer a partir de 2030 debido al estancamiento económico y el crecimiento demográfico en el África subsahariana.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;a href="https://derechomercantilespana.blogspot.com/2026/02/es-usurario-un-interes-en-tarjetas.html"&gt;Es usurario un interés en tarjetas revolving el interés pactado superior en más de seis puntos porcentuales al interés medio de mercado del momento de la contratación&lt;/a&gt;&lt;/em&gt;. Es un criterio un poco extraño habida cuenta de que personas distintas tienen riesgos asociados distintos que han de derivar en tasas de interés distintas. Es decir, la tasa de interés de un préstamo debe reflejar tres componentes: el precio del dinero, el riesgo crediticio del cliente y el beneficio empresarial. Caparlo por arriba es equivalente a decir que aquellas personas con un riesgo de impago superior a cierto nivel no van a tener acceso a financiación en el sector regulado &amp;mdash;aunque tal vez sí en las covachuelas de los usureros&amp;mdash;. No está claro si esto es bueno o malo, pero está bien saber cómo son las cosas.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;a href="https://hannahritchie.substack.com/p/does-that-use-a-lot-of"&gt;Does that use a lot of energy?&lt;/a&gt;&lt;/em&gt; Anuncio de la herramienta interactiva creada por Hannah Ritchie para comparar el consumo energético del uso de los electrodomésticos cotidianos para ayudar a los usuarios a desarrollar intuiciones sobre qué es «mucho» o «poco» en términos de energía.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;a href="https://nicholasdecker.substack.com/p/making-better-fertility-projections"&gt;Making Better Fertility Projections&lt;/a&gt;&lt;/em&gt;. Nicholas Decker propone un modelo demográfico en el que al descender la población, cae también el precio de la vivienda. Pero más vivienda asequible hace aumentar la natalidad,&amp;hellip;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;a href="https://nicholasdecker.substack.com/p/markups-from-the-demand-and-the-supply"&gt;Markups From the Demand and the Supply Side&lt;/a&gt;&lt;/em&gt; ofrece una visión sobre cómo los economistas &amp;mdash;al menos, los que nunca han tenido un bar&amp;mdash; creen que se fijan los precios de los productos y los servicios en la economía.&lt;/p&gt;</description></item><item><title>Teoría de la decisión bayesiana con NumPyro</title><link>https://datanalytics.com/2026/02/25/teoria-decision-bayesiana-numpyro/</link><pubDate>Wed, 25 Feb 2026 00:00:00 +0000</pubDate><guid>https://datanalytics.com/2026/02/25/teoria-decision-bayesiana-numpyro/</guid><description>&lt;p&gt;Daniel Saunders tiene una entrada en su blog, &lt;a href="https://daniel-saunders-phil.github.io/imagination_machine/posts/a-bayesian-decision-theory-workflow/"&gt;&lt;em&gt;A Bayesian decision theory workflow&lt;/em&gt;&lt;/a&gt; en el que utiliza PyTensor para resolver un problema de teoría de la decisión bayesiana (¿es &lt;em&gt;realmente&lt;/em&gt; necesario el apellido?) y cuya solución es $3.291507977689139$. El maestro Juan Camilo Orduz &amp;mdash;de quien no se puede dejar nunca de aprender&amp;mdash; lo replicó en &lt;a href="https://juanitorduz.github.io/bayesian_decision_theory_workflow_numpyro/"&gt;&lt;em&gt;A Bayesian Decision Theory Workflow: Port to NumPyro&lt;/em&gt;&lt;/a&gt; para obtener $3.27928950$ como solución. Yo ahora recojo el guante y, por lo de bayesiano, llego a&lt;/p&gt;
&lt;p&gt;&lt;img alt="Bayesian Decision Analysis" loading="lazy" src="https://datanalytics.com/img/2026/bayesian-decision-analysis.png#center"&gt;&lt;/p&gt;
&lt;p&gt;que trata de recoger la incertidumbre asociada a los parámetros en lugar de estimar un único valor central. Cosa que no se debe hacer nunca en consultoría, habida cuenta de la alergia que ineludiblemente sufren los clientes a la menor insinuación de incertidumbre. Carreras largas en consultoría correlacionan &amp;mdash;me atrevería a decir aún más, que son consecuencia necesaria&amp;mdash; de soluciones con tantos dígitos que no quepan en la diapositiva.&lt;/p&gt;
&lt;p&gt;El problema que se trata de resolver es el siguiente:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A partir de unos datos, reconstruir una curva de demanda (demanda en función del precio).&lt;/li&gt;
&lt;li&gt;Conocidos los costes, calcular el beneficio según el precio.&lt;/li&gt;
&lt;li&gt;Obtener el precio óptimo maximizando la función.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si se asume que la demanda tiene la (inveterada) forma $d(p) = a b^p$ (donde $a$ y $b$ son parámetros desconocidos) y el coste por unidad es $c$, el precio óptimo es (derivando, etc.) $bc / (1 + b)$ (que, además, no depende de $a$).&lt;/p&gt;
&lt;p&gt;La parte fundamental del código de Orduz es el bloque&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;model&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;price&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Float&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34; n&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;Float&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34; n&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;mu_a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;100.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;sigma_a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;40.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;concentration_a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sigma_a&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;mu_a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;rate_a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;mu_a&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;sigma_a&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;numpyro&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sample&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;a&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dist&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Gamma&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;concentration&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;concentration_a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rate&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;rate_a&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;numpyro&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sample&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;b&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dist&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Normal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;loc&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;scale&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;sigma&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;numpyro&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sample&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;sigma&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dist&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HalfNormal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scale&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;mu&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;numpyro&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;deterministic&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;mu&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;price&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;numpyro&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sample&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;sales&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dist&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Normal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;loc&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;mu&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;scale&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;sigma&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;mu&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;que define el modelo. A partir de él extrae muestras de $b$, toma su valor medio y, usando la fórmula de más arriba, el precio óptimo.&lt;/p&gt;
&lt;p&gt;Pero es posible modificar el bloque anterior para que genere muestras del precio óptimo también:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;model&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;price&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Float&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34; n&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;Float&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34; n&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;mu_a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;100.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;sigma_a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;40.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;concentration_a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sigma_a&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;mu_a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;rate_a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;mu_a&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;sigma_a&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;numpyro&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sample&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;a&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dist&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Gamma&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;concentration&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;concentration_a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rate&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;rate_a&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;numpyro&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sample&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;b&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dist&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Normal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;loc&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;scale&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;sigma&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;numpyro&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sample&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;sigma&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dist&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HalfNormal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scale&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;mu&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;numpyro&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;deterministic&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;mu&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;price&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;optimal_price&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;numpyro&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;deterministic&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;optimal_price&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;cost&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;numpyro&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sample&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;sales&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dist&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Normal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;loc&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;mu&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;scale&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;sigma&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;mu&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;La línea adicional&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;optimal_price&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;numpyro&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;deterministic&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;optimal_price&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;cost&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;permite extraer el precio óptimo asociado a cada estimación de $b$ (y, por lo tanto, construir la gráfica mostrada más arriba).&lt;/p&gt;
&lt;p&gt;Más en general, es incluso posible sustituir la línea anterior por otra más genérica,&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;optimal_price&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;numpyro&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;deterministic&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;optimal_price&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;find_optimal_price&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;para aquellos casos en los que la fórmula del precio óptimo no sea analítica y fácilmente operativizable. E incluso podría utilizarse optimización numérica:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;my_profit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;price&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cost&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.3&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;sales&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;price&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;price&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;cost&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;sales&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;find_optimal_price&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cost&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.3&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;neg_profit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;price&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;my_profit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;price&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cost&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;minimize_scalar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;neg_profit&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;bounds&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cost&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mf"&gt;0.01&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cost&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;method&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;bounded&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Lo que pretende subrayar esta entrada es que al ajustar modelos usando PPLs, no es necesario conformarse con estimar los parámetros del modelo: es posible también generar lo que en la terminología de Stan se denominan &lt;code&gt;generated quantities&lt;/code&gt;, variables derivadas de las del modelo que no están involucradas en su ajuste. Con la ventaja de que se obtienen estimaciones de su variabilidad a costa, a lo sumo, de un poco más de tiempo de cómputo.&lt;/p&gt;</description></item><item><title>Notas (9): Algunos enlaces y comentarios sobre temas estadísticos</title><link>https://datanalytics.com/2026/02/23/cortos-estadistica/</link><pubDate>Mon, 23 Feb 2026 00:00:00 +0000</pubDate><guid>https://datanalytics.com/2026/02/23/cortos-estadistica/</guid><description>&lt;p&gt;&lt;a href="https://www.johndcook.com/blog/2026/01/21/mills-ratio/"&gt;&lt;em&gt;Mills ratio and tail thickness&lt;/em&gt;&lt;/a&gt; &amp;mdash; John D. Cook nos habla de la razón de Mills ($\int_x^\infty f(t) dt / f(x)$) para estudiar el grosor de las colas de las distribuciones de probabilidad. Por ejemplo, aunque una distribución t con muchos grados de libertad es muy similar a una normal en la parte central, la razón de Mills las distingue claramente por su distinto comportamiento en las colas.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://statmodeling.stat.columbia.edu/2026/01/08/what-is-workflow-and-why-is-it-important/"&gt;&lt;em&gt;What is &amp;ldquo;workflow&amp;rdquo; and why is it important?&lt;/em&gt;&lt;/a&gt; &amp;mdash; Sobre el &lt;em&gt;flujo de trabajo&lt;/em&gt; del análisis de datos (con inspiración bayesiana), según Andrew Gelman (y sus coautores). &lt;a href="https://hbiostat.org/rflow/"&gt;&lt;em&gt;R Workflow&lt;/em&gt;&lt;/a&gt; es la reinterpretación de Frank Harrell del mismo asunto.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.cambridge.org/core/journals/weed-science/article/unified-framework-for-the-analysis-of-germination-emergence-and-other-timetoevent-data-in-weed-science/7DB0E039C9013D3E8F44FE32A3F42B88"&gt;&lt;em&gt;A unified framework for the analysis of germination, emergence, and other time-to-event data in weed science&lt;/em&gt;&lt;/a&gt; &amp;mdash; Un artículo muy raro en el que se hace análisis de la supervivencia reinventando el concepto porque si no, ¿cómo se podría haber publicado el artículo? Uno de los motivos para rechazar el uso del análisis de la supervivencia en el problema de la determinación del tiempo hasta la germinación de las semillas es, por ejemplo, que las curvas de supervivencia típicas decrecen desde el 100% mientras que los estudiosos de las planticas prefieren que sus gráficos partan del 0% y sean crecientes. La teoría puede verse en acción en &lt;a href="https://www.statforbiology.com/2026/stat_drcte_6-ht1step/"&gt;&lt;em&gt;Fitting time-to-event models with an environmental covariate&lt;/em&gt;&lt;/a&gt;, que usa los paquetes &lt;code&gt;drcte&lt;/code&gt; y &lt;code&gt;drcSeedGerm&lt;/code&gt; de R.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.economist.com/britain/2026/02/12/britains-shifting-gdp-numbers"&gt;&lt;em&gt;Britain&amp;rsquo;s shifting GDP numbers&lt;/em&gt;&lt;/a&gt; &amp;mdash; Trata sobre la incertidumbre (y las correcciones) en las cifras del PIB (en el RU). Aparentemente, las estimaciones del crecimiento del PIB publicadas por la ONS (el INE británico) solo se &lt;em&gt;estabilizan&lt;/em&gt; al cabo de 10 años. Menciona el caso &amp;mdash;el más extremo de la serie histórica analizada&amp;mdash; de la estimación para el tercer trimestre de 1988, una caída del 0.5%, corregida tres años después a un crecimiento del 3.6%.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://statmodeling.stat.columbia.edu/2026/02/14/the-stupidity-the-criminal-vandalism-the-wanton-destruction-of-information-involved-in-dichotomisation/"&gt;&lt;em&gt;The stupidity, the criminal vandalism, the wanton destruction of information involved in dichotomisation&lt;/em&gt;&lt;/a&gt; &amp;mdash; Nada más que añadir al título.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://exhibits.stanford.edu/dataviz"&gt;&lt;em&gt;Data Visualization and the Modern Imagination&lt;/em&gt;&lt;/a&gt;** &amp;mdash; Exige tiempo y reposo para ser disfrutado adecuadamente.&lt;/p&gt;</description></item><item><title>Sobre un inesperado factor que convierte subrepticialmente una distribución a priori en informativa</title><link>https://datanalytics.com/2026/02/18/prior-predictive-distribution/</link><pubDate>Wed, 18 Feb 2026 00:00:00 +0000</pubDate><guid>https://datanalytics.com/2026/02/18/prior-predictive-distribution/</guid><description>&lt;p&gt;La distribución predictiva a priori es la que se obtiene de un modelo a partir de las prioris, antes de ver datos o realizar ajustes. Se utiliza para evaluar el grado en que las prioris elegidas están &lt;em&gt;dentro de rango&lt;/em&gt; y no generan datos que no se parecen en nada a los que se espera por conocimiento previo.&lt;/p&gt;
&lt;p&gt;El libro &lt;a href="https://bayesiancomputationbook.com/welcome.html"&gt;&lt;em&gt;Bayesian Modeling and Computation in Python&lt;/em&gt;&lt;/a&gt; discute las distribuciones predictivas a priori en su &lt;a href="https://bayesiancomputationbook.com/markdown/chp_02.html"&gt;segundo capítulo&lt;/a&gt;. Allí argumenta alrededor de dos ejemplos. El primero está elegido a propósito para defender el caso de las prioris informativas frente a las objeciones de sus innumerables escépticos. El segundo es más intrigante. Muestra el gráfico&lt;/p&gt;
&lt;p&gt;&lt;img alt="Distribución predictiva a priori" loading="lazy" src="https://datanalytics.com/img/2026/prior_predictive_distributions_01.png#center"&gt;&lt;/p&gt;
&lt;p&gt;acompañado del siguiente pie:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Distribución predictiva a priori para un modelo logístico con 2, 5, y 15 (sic) predictores binarios y 100 casos. Las densidades representan la distribución de &lt;strong&gt;la media&lt;/strong&gt; de los datos en 10000 simulaciones. Aunque la priori para cada coeficiente es $N(0, 1)$, la misma en cada uno de los tres casos, incrementar el número de predictores implica en la práctica usar una priori que aumenta el peso de los valores extremos.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Traté de reproducirlo con R:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;simulation&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="kr"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n_preds&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nrow_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;100&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;X&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="nf"&gt;matrix&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;rbinom&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nrow_data&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;n_preds&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;.5&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;nrow_data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;n_preds&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;X_with_intercept&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="nf"&gt;cbind&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;X&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;beta&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="nf"&gt;rnorm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n_preds&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;pred_p&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="n"&gt;X_with_intercept&lt;/span&gt; &lt;span class="o"&gt;%*%&lt;/span&gt; &lt;span class="n"&gt;beta&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;pred_p&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nf"&gt;exp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;pred_p&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;mean&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pred_p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;sim_02&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="nf"&gt;replicate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;10000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;simulation&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;sim_05&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="nf"&gt;replicate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;10000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;simulation&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;sim_20&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="nf"&gt;replicate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;10000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;simulation&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;20&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;sim_99&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="nf"&gt;replicate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;10000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;simulation&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;99&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;par&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mfrow&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;c&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;hist&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sim_02&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;2 predictores&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;hist&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sim_05&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;5 predictores&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;hist&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sim_20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;20 predictores&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;hist&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sim_99&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;99 predictores&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;par&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mfrow&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;c&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;para obtener un decepcionante&lt;/p&gt;
&lt;p&gt;&lt;img alt="Distribución predictiva a priori" loading="lazy" src="https://datanalytics.com/img/2026/prior_predictive_distributions_02.png#center"&gt;&lt;/p&gt;
&lt;p&gt;Afortunadamente, el libro viene acompañado del código necesario para reproducir todos los gráficos y, en particular, el del gráfico original:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;scipy.special&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;expit&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;fig&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;axes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;subplots&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;figsize&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;sharex&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sharey&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;axes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ravel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;axes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;dim&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ax&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;zip&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;axes&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;β&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;normal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dim&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;X&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;binomial&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.75&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dim&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;az&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;plot_kde&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;expit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;β&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt; &lt;span class="n"&gt;X&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;mean&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;ax&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;ax&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ax&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;set_title&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;dim&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; predictors&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ax&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;set_xticks&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ax&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;set_yticks&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;fig&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0.34&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;0.075&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;mean of the simulated data&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;savefig&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;img/chp02/prior_predictive_distributions_01.png&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;bbox_inches&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;tight&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Las diferencias con respecto al mío son:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fija la matriz de predictores &lt;code&gt;X&lt;/code&gt; en lugar de regenerarla en cada simulación (!).&lt;/li&gt;
&lt;li&gt;Usa 500 casos en lugar de los 100 que anuncia.&lt;/li&gt;
&lt;li&gt;No usa término independiente en la regresión logística (cosa que forma parte de lo opinable y que yo había hecho también en la primera versión de mi código).&lt;/li&gt;
&lt;li&gt;Sobre todo, genera X usando &lt;code&gt;p=0.75&lt;/code&gt; en lugar de mi &lt;code&gt;0.5&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El cuarto punto es el fundamental y explica la diferencia entre &lt;em&gt;mis&lt;/em&gt; y &lt;em&gt;sus&lt;/em&gt; simulaciones. Que &lt;code&gt;expit(β @ X)&lt;/code&gt; quede cerca de 0 o 1 depende de la varianza de &lt;code&gt;β @ X&lt;/code&gt; y esta, a su vez, es suma de productos del tipo $XY$ donde $X$ es $\text{Bernoulli}(p)$ e $Y$ es $N(0,1)$. La varianza de esta expresión, como todo LLM sabe, es función lineal de $p$ (de hecho, es $p$).&lt;/p&gt;
&lt;p&gt;Así, cuanto mayor es $p$, más parecido es &lt;code&gt;β @ X&lt;/code&gt; a una suma de &lt;code&gt;n_preds&lt;/code&gt; variables aleatorias $N(0, 1)$ independientes, con varianza &lt;code&gt;n_preds&lt;/code&gt;. Cuanto mayor es la varianza, mayor es la probabilidad de obtener sumas con valor absoluto grande, que luego la función logística transforma en probabilidades próximas a $0$ o $1$, según el signo.&lt;/p&gt;
&lt;p&gt;Supongo que los autores del libro comenzaron con &lt;code&gt;p=0.5&lt;/code&gt; y descubrieron que les hacían falta demasiados predictores para alcanzar el efecto o impacto deseado y jugaron con otros valores hasta que pudo apreciarse con &lt;code&gt;n_preds = 20&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Notas (8): código generado por humanos, código inspirado por humanos</title><link>https://datanalytics.com/2026/02/16/cortos-programacion/</link><pubDate>Mon, 16 Feb 2026 00:00:00 +0000</pubDate><guid>https://datanalytics.com/2026/02/16/cortos-programacion/</guid><description>&lt;ul&gt;
&lt;li&gt;Jeff Soules dio una &lt;a href="https://vimeo.com/1053152955"&gt;charla sobre buenas prácticas de programación&lt;/a&gt; (particularmente acerca de técnicas para mejorar la legibilidad del código) y publicó las correspondientes &lt;a href="https://docs.google.com/presentation/d/17M4Z_Op_W4iGK0bfUdwf7QOsUco2B-XCbIJGKFiNKC8/edit"&gt;diapositivas&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Guillermo Luijk siempre escribe cosas interesantes. De entre sus últimas:
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.overfitting.net/2025/10/optimizando-el-paseo-de-perros-con-r.html"&gt;&lt;em&gt;Optimizando el paseo de perros con R&lt;/em&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.overfitting.net/2026/01/distribuciones-normales-en-la-torre-de.html"&gt;&lt;em&gt;Distribuciones normales en la torre de Pisa&lt;/em&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.overfitting.net/2025/12/perspectiva-aerea-desde-mapa-de.html"&gt;&lt;em&gt;Perspectiva aérea desde mapa de elevaciones con C++&lt;/em&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.dbreunig.com/2026/01/08/a-software-library-with-no-code.html"&gt;&lt;em&gt;A Software Library with No Code&lt;/em&gt;&lt;/a&gt; describe un experimento que muchos considerarán distópico: usando LLMs, se pueden crear y compartir &lt;em&gt;abstracciones reutilizables&lt;/em&gt;; en este caso concreto, descripciones detalladas sobre cómo debería funcionar una determinada librería pero sin escribir una sola línea de código tradicional. El usuario de esta &lt;em&gt;metalibrería&lt;/em&gt; utilizaría un LLM para obtener una implementación en el lenguaje objetivo de su elección: Python, etc. Hay gente que utiliza LLMs para portar librerías de un lenguaje a otro; esta &lt;em&gt;metalibrería&lt;/em&gt; representa un pequeño nivel adicional de abstracción: la descripción de lo que ha de hacer no está descrita en código sino en instrucciones verbales precisas e interpretables por los LLMs. Habría que ver si el lenguaje natural es preferible a código &amp;mdash;que es una forma concreta de seudocódigo&amp;mdash; para describir lo que se espera de la librería; porque lo que se espera de este (del código) es que sea más específico y menos ambiguo que aquel (el natural) a la hora de describir algoritmos fielmente.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>¿Cómo funcionan los addons de Kodi para bajar películas piratas?</title><link>https://datanalytics.com/2026/02/11/pirateria-kodi/</link><pubDate>Wed, 11 Feb 2026 00:00:00 +0000</pubDate><guid>https://datanalytics.com/2026/02/11/pirateria-kodi/</guid><description>&lt;p&gt;Hoy voy a dejar escritas una serie de cosas que he aprendido últimamente investigando sobre un asunto que no es del interés de la gente de bien. La gente de bien, para ver películas (etc.) paga suscripciones a proveedores como Netflix y no se mete en berenjenales.&lt;/p&gt;
&lt;p&gt;Pero otros usan herramientas tales como &lt;em&gt;addons&lt;/em&gt; truchos de Kodi con la esperanza &amp;mdash;no siempre realizada&amp;mdash; de poder ver películas &lt;em&gt;gratis total&lt;/em&gt;. Lo que sigue describe lo que uno descubre cuando investiga cómo hacen esos &lt;em&gt;addons&lt;/em&gt; para ofrecer contenidos y cuáles son los sistemas subyacentes que explotan o tratan de explotar. Antes de continuar, no obstante, quiero que consten varias salvedades:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Lo que cuento hoy no aplica solo a películas sino también a otro tipo de &lt;em&gt;contenidos&lt;/em&gt; digitales (revistas, música, &lt;em&gt;software&lt;/em&gt;, etc.).&lt;/li&gt;
&lt;li&gt;Además, no es la única fuente de este tipo de contenido: omito, por ejemplo, el mundo del P2P, que tal vez merecería un estudio aparte.&lt;/li&gt;
&lt;li&gt;Aunque me refiera a los &lt;em&gt;addons&lt;/em&gt; de Kodi, el funcionamiento es similar en otro tipo de herramientas, como Stremio y alguna más de esas que &lt;em&gt;van y vienen&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Por supuesto, esta entrada es una mera descripción técnica y no debe entenderse como una invitación o recomendación a nada.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Los &lt;em&gt;addons&lt;/em&gt; de Kodi no son otra cosa que &lt;em&gt;scripts&lt;/em&gt; de Python. Instalar un &lt;em&gt;addon&lt;/em&gt; consiste realmente en instalar una serie de paquetes de Python. Aunque de una manera más sinuosa que la habitual de realizar simples llamadas a &lt;code&gt;pip&lt;/code&gt; en tanto que el objetivo de esos paquetes tiene un encaje legal complicado en la mayor parte de las jurisdicciones, si no en todas. El proceso es algo más alambicado, pero con un poco de esfuerzo uno puede descargar su código fuente e inspeccionarlo.&lt;/p&gt;
&lt;p&gt;Así uno descubre que esos &lt;em&gt;addons&lt;/em&gt; explotan una compleja infraestructura subyacente en la que intervienen tres tipos de actores. Los voy a describir someramente en las tres secciones siguientes. Con poco más que eso, quedará claro cómo interactúan los &lt;em&gt;addons&lt;/em&gt; con esos tres tipos de actores, que son:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Servicios de almacenamiento de archivos.&lt;/li&gt;
&lt;li&gt;Bases de datos de enlaces.&lt;/li&gt;
&lt;li&gt;Sistemas &lt;em&gt;debrid&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="servicios-de-almacenamiento-de-archivos"&gt;Servicios de almacenamiento de archivos&lt;/h2&gt;
&lt;p&gt;En su día, mucha gente usó &lt;a href="https://en.wikipedia.org/wiki/Megaupload"&gt;Megaupload&lt;/a&gt;. Megaupload fue &lt;em&gt;intervenido&lt;/em&gt; y desapareció, pero muchos otros actores ofrecen hoy en día servicios similares: RapidRAR, RapidGator, Fileboom, Katfile, etc.&lt;/p&gt;
&lt;p&gt;Todos tienen un funcionamiento parecido:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Usuarios particulares pueden subir sus ficheros a esos servicios.&lt;/li&gt;
&lt;li&gt;Cada fichero tiene una URL privada conocida solo por quien subió el fichero.&lt;/li&gt;
&lt;li&gt;Quien dispone de la URL puede bajar el contenido.&lt;/li&gt;
&lt;li&gt;El servicio proporciona descargas en dos modalidades: &lt;em&gt;gratuitas&lt;/em&gt; (limitadas, con un tiempo de espera, lentas) y rápidas para los usuarios de pago.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si consigues acceso a un fichero contenido en uno de esos servicios e intentas descargarlo, llegas a una página no muy distinta de esta:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Piratería RapidRAR" loading="lazy" src="https://datanalytics.com/img/2026/pirateria-rapidrar-00.png#center"&gt;&lt;/p&gt;
&lt;p&gt;Aunque lo pareciera, no son servicios a los que uno pueda subir, por ejemplo, sus copias de seguridad. No es un Dropbox, un S3 o un Google Drive. De hecho, algunos de estos servicios (si no todos) borran los ficheros que no tienen un número suficiente de descargas.&lt;/p&gt;
&lt;p&gt;Porque estos servicios ganan dinero precisamente cuando la gente paga por bajar contenido. Así que su modelo de negocio viene a ser:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Atraer a usuarios para que suban contenido que pueda ser del interés de muchos (p.e., películas pirateadas).&lt;/li&gt;
&lt;li&gt;Compartir con esos usuarios parte del beneficio que generen sus descargas.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Recuérdese que los enlaces son privados. Si yo subiese a RapidRAR una película, solo yo conocería el enlace para descargarla. Eso forma parte de la cobertura legal de la que se sirven estos servicios: almacenan ficheros personales de usuarios particulares. Además, parece ser, como mecanismo adicional de cobertura, se prestan a retirarlos con falso entusiasmo cuando reciben quejas formales de sus legítimos dueños. El meme del comisario de Casablanca («¡Qué escándalo! He descubierto que aquí se juega«), sería aquí muy oportuno.&lt;/p&gt;
&lt;h2 id="bases-de-datos-de-enlaces"&gt;Bases de datos de enlaces&lt;/h2&gt;
&lt;p&gt;Obviamente, mal van a conseguir descargas los actores de la sección anterior si los enlaces a los contenidos de interés tienen la forma &lt;code&gt;https://rapidrar.cr/1q9w3ieohn8n8&lt;/code&gt; y son solo conocidos por ellos. Por eso existen bases de datos de enlaces.&lt;/p&gt;
&lt;p&gt;En el código fuente de un &lt;em&gt;addon&lt;/em&gt; de Kodi descubrí, entre otros, &lt;a href="https://rapidmoviez.website/"&gt;RapidMoviez&lt;/a&gt; y &lt;a href="https://search.rlsbb.ru/"&gt;ReleaseBB&lt;/a&gt;. Aún le queda hora y media al día de hoy y en ReleaseBB se han publicado unos 250 enlaces a &lt;em&gt;contenidos&lt;/em&gt; diversos: películas, discos, episodios de series, etc.&lt;/p&gt;
&lt;h2 id="servicios-debrid"&gt;Servicios &lt;em&gt;debrid&lt;/em&gt;&lt;/h2&gt;
&lt;p&gt;En una primera aproximación, un &lt;em&gt;addon&lt;/em&gt; funcionaría así:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;El usuario solicita un contenido al &lt;em&gt;addon&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;El &lt;em&gt;addon&lt;/em&gt; lo busca en las bases de datos de enlaces. Algunas de ellas tienen &lt;em&gt;captchas&lt;/em&gt; para evitar ser &lt;em&gt;escrapeados&lt;/em&gt;; por eso el código de los &lt;em&gt;addons&lt;/em&gt; contiene infinidad de líneas para, por lo que parece, saltárselos. &lt;em&gt;Addons&lt;/em&gt; y bases de datos juegan al gato y al ratón, da la impresión.&lt;/li&gt;
&lt;li&gt;Con el enlace, el &lt;em&gt;addon&lt;/em&gt; trata de descargar el contenido y servírselo al usuario.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;El tercer punto es problemático: el usuario puede no tener cuenta en el servicio donde está alojado el contenido deseado. Y la opción de descarga gratuita tiene &lt;em&gt;antifeatures&lt;/em&gt; pensadas precisamente para dificultar el consumo del contenido en tiempo real. De ahí los servicios &lt;em&gt;debrid&lt;/em&gt; (preguntad a un LLM sobre la etimología del término). Los lectores interesados en la materia podrán encontrar una lista de los más queridos por el público por su cuenta.&lt;/p&gt;
&lt;p&gt;Los servicios &lt;em&gt;debrid&lt;/em&gt; tienen un papel no se sabe muy bien si catalítico o parasitario en el ecosistema descrito más arriba y operan como intermediarios entre el usuario final y el servicio de almacenamiento de archivos.&lt;/p&gt;
&lt;p&gt;Si el usuario final es cliente del servicio &lt;em&gt;debrid&lt;/em&gt; (porque le paga una cantidad mensual) y solicita un contenido (una url), ocurre lo siguiente:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Si el servicio &lt;em&gt;debrid&lt;/em&gt; lo tiene en la caché &amp;mdash;estos servicios operan cachés enormes&amp;mdash;, se lo sirve al usuario sin pasar por el servicio de almacenamiento.&lt;/li&gt;
&lt;li&gt;De no ser así, el servicio &lt;em&gt;debrid&lt;/em&gt; podría tener una cuenta &lt;em&gt;premium&lt;/em&gt; en el servicio de almacenamiento para descargarlo, servírselo al usuario y, además, guardarlo en la caché para atender futuras solicitudes.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Por lo tanto, si un usuario se da de alta en un servicio &lt;em&gt;debrid&lt;/em&gt;, no necesita hacerlo en un servicio de almacenamiento (o varios).&lt;/p&gt;
&lt;p&gt;Se ve que la relación entre los servicios &lt;em&gt;debrid&lt;/em&gt; y los de almacenamiento es de amor-odio: por un lado, los servicios &lt;em&gt;debrid&lt;/em&gt; son clientes de los de almacenamiento. Por el otro, les roban potenciales clientes. Así que en algunos casos los aceptan como mal menor y en otros tratan de cancelar sus cuentas (por lo que se crea otro juego de gatos y ratones entre los dos tipos de servicios, con apertura de cuentas desde diferentes IPs, etc.).&lt;/p&gt;
&lt;p&gt;Así las cosas, es evidente cómo funcionan los &lt;em&gt;addons&lt;/em&gt; truchos de Kodi, sobre qué tres palancas se apoyan y por qué son prácticamente inutilizables sin una cuenta en un servicio de &lt;em&gt;debrid&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Finalmente, ¿no es increíble que exista un entramado tan sofisticado de actores que, probablemente, dé de comer a miles de personas (admitido: en muchos casos poco y mal y en países donde eso es mucho más barato) sin necesidad de patronales, sindicatos, subvenciones, tribunales, policías y todas esas cosas sin las que, nos dicen, periclitaría todo asomo de actividad económica?&lt;/p&gt;</description></item><item><title>Notas (7): de la eficiencia energética de los LLMs hasta su «lenguaje secreto»</title><link>https://datanalytics.com/2026/02/09/cortos-llms/</link><pubDate>Mon, 09 Feb 2026 00:00:00 +0000</pubDate><guid>https://datanalytics.com/2026/02/09/cortos-llms/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.simonpcouch.com/blog/2026-01-20-cc-impact/"&gt;&lt;em&gt;Electricity use of AI coding agents&lt;/em&gt;&lt;/a&gt; es el enésimo intento para desactivar ese &lt;em&gt;meme&lt;/em&gt; de que por culpa de los LLMs vamos a quedarnos sin planeta.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://erikschiskin.substack.com/p/persuasion-of-humans-is-the-bottleneck"&gt;&lt;em&gt;Persuasion of Humans Is the Bottleneck&lt;/em&gt;&lt;/a&gt; discute el verdadero cuello de botella en el despliegue de los LLMs: el operador humano. Además del marco legal (y la responsabilidad asociada a él) en el que operan la mayor parte de las organizaciones humanas. Eso sí, incurre en una especie de falacia de Nirvana al dar por hecho que aquello a lo que los LLMs reemplazarían es perfecto, cuando todos sabemos que dista mucho de serlo.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://simonwillison.net/2026/Jan/23/fastrender/#atom-everything"&gt;&lt;em&gt;Wilson Lin on FastRender: a browser built by thousands of parallel agents&lt;/em&gt;&lt;/a&gt; trae detalles sobre la construcción de un navegador desde cero usando agentes a mansalva.&lt;/li&gt;
&lt;li&gt;Todo el mundo parece estar hablando del artículo &lt;a href="https://www.nber.org/papers/w34745"&gt;&lt;em&gt;Behavioral Economics of AI: LLM Biases and Corrections&lt;/em&gt;&lt;/a&gt;, que estudia si los LLMs actúan o no como se espera del &lt;em&gt;homo œconomicus&lt;/em&gt;. Un resultado inesperado es que cuanto &lt;em&gt;mejor&lt;/em&gt; es un modelo, más tiende a equivocarse en el mismo sentido que lo haría un humano.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.lesswrong.com/posts/gpyqWzWYADWmLYLeX/how-ai-is-learning-to-think-in-secret"&gt;&lt;em&gt;How AI Is Learning to Think in Secret&lt;/em&gt;&lt;/a&gt; trata sobre si los LLMs están construyendo (o van a construir) un lenguaje especial y optimizado para &lt;em&gt;pensar&lt;/em&gt; que resulte ininteligible para los humanos. Creía haber leído que en algunos subforos de Moltbook había agentes discutiendo la posibilidad de usar algún tipo de &lt;a href="https://www.microsoft.com/en-us/research/publication/droidspeak-kv-cache-sharing-for-efficient-multi-llm-serving/"&gt;DroidSpeak&lt;/a&gt; para comunicarse entre ellos sin las servidumbres del lenguaje humano, pero no he podido encontrarlos; igual lo he soñado.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://manifold.markets/KJW_01294/what-will-happen-to-moltbook-in-mar"&gt;&lt;img alt="Lenguaje propio LLMs" loading="lazy" src="https://datanalytics.com/img/2026/llms-lenguaje-propio.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;He de reconocer que no entiendo a dónde quiere ir a parar la autora de &lt;a href="https://statmodeling.stat.columbia.edu/2026/01/22/a-decision-theorist-walks-into-a-seminar/"&gt;&lt;em&gt;A decision theorist walks into a seminar&lt;/em&gt;&lt;/a&gt;, pero tal vez alguno de mis lectores sí.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://statmodeling.stat.columbia.edu/2025/12/19/validating-language-models-as-study-participants-how-its-being-done-why-it-fails-and-what-works-instead/"&gt;&lt;em&gt;Validating language models as study participants: how it&amp;rsquo;s being done, why it fails, and what works instead&lt;/em&gt;&lt;/a&gt; critica algo que no sabía que existía: el uso de LLMs como sustitutos directos de participantes humanos en encuestas o &lt;em&gt;estudios conductuales&lt;/em&gt;, en tanto que son más baratos y fáciles de reclutar.&lt;/li&gt;
&lt;li&gt;Novedades en el mundo de los LLMs:
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://mistral.ai/news/voxtral-transcribe-2"&gt;&lt;em&gt;Voxtral transcribes at the speed of sound&lt;/em&gt;&lt;/a&gt;, aunque yo todavía uso &lt;a href="https://openai.com/es-419/index/whisper/"&gt;Whisper&lt;/a&gt; cuando necesito ese tipo de cosas.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://openclaw.ai/"&gt;OpenClaw&lt;/a&gt; (aunque esto ya deberíamos conocerlo todos) e &lt;a href="https://simonwillison.net/2026/Feb/1/openclaw-in-docker/"&gt;instrucciones para correrlo en Docker&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://prism.openai.com/?pg=0"&gt;Prism&lt;/a&gt;, un editor de LaTeX colaborativo de OpenAI.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://thezvi.substack.com/p/kimi-k25"&gt;Kimi K2.5&lt;/a&gt; es bueno, rápido y barato. A fecha de hoy, el modelo más usado en la categoría de programación en &lt;a href="https://openrouter.ai/"&gt;OpenRouter&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;También pisando fuerte, &lt;a href="https://qwen.ai/blog?id=qwen3tts-0115"&gt;la familia de modelos Qwen3-TTS&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Lista de los ETFs comercializados por ING en febrero de 2026</title><link>https://datanalytics.com/2026/02/06/etfs-ing/</link><pubDate>Fri, 06 Feb 2026 00:00:00 +0000</pubDate><guid>https://datanalytics.com/2026/02/06/etfs-ing/</guid><description>&lt;p&gt;En 2024 publiqué una &lt;a href="https://datanalytics.com/2024/06/18/etfs-ing/"&gt;lista de los ETFs&lt;/a&gt; comercializados por ING. El motivo era que el buscador de entonces dejaba bastante que desear. Luego la actualicé en 2025.&lt;/p&gt;
&lt;p&gt;Este es el anuncio de la actualización de la información a principios de febrero de 2026. La lista puede consultarse &lt;a href="https://docs.google.com/spreadsheets/d/1wDmk66B5jmZU_s5yH4h9laeU3-6dSB00VFgr7j3GGQA/edit?usp=sharing"&gt;aquí&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Más sobre por qué la IA generativa es menos útil para lidiar con cuestiones jurídicas que en otros ámbitos</title><link>https://datanalytics.com/2026/02/04/llms-derecho/</link><pubDate>Wed, 04 Feb 2026 00:00:00 +0000</pubDate><guid>https://datanalytics.com/2026/02/04/llms-derecho/</guid><description>&lt;p&gt;Tiene Jesús Alfaro una entrada en su blog, &lt;a href="https://derechomercantilespana.blogspot.com/2025/12/por-que-la-ai-generativa-es-menos-util.html"&gt;&lt;em&gt;Por qué la AI generativa es menos útil para lidiar con cuestiones jurídicas que en otros ámbitos&lt;/em&gt;&lt;/a&gt;, cuyo contenido no es enteramente fiel a su rótulo. Aunque aporta razones de peso (y que no voy a cuestionar) sobre los problemas que plantean los LLMs a la hora de resolver cuestiones jurídicas, no acaba de explicar qué cosa concreta los hace &lt;em&gt;precisamente&lt;/em&gt; menos útiles que en otros campos. Es decir, aunque anuncia una comparación, luego no la realiza expresamente. El objetivo de esta entrada es comparar el uso de los LLMs en el ámbito del derecho &amp;mdash;basándome necesariamente en la entrada anterior en tanto que mi experiencia en esa disciplina es nula&amp;mdash; con otros que conozco mejor, matemáticas y programación, para acabar proponiendo una síntesis (en el sentido dialéctico del término).&lt;/p&gt;
&lt;p&gt;Es ocioso recordar la utilidad de los LLMs para programar. En cuanto a las matemáticas, quien consulte &lt;a href="https://terrytao.wordpress.com/2025/11/05/mathematical-exploration-and-discovery-at-scale/"&gt;esto&lt;/a&gt;, &lt;a href="https://github.com/teorth/erdosproblems/wiki/AI-contributions-to-Erd%C5%91s-problems"&gt;esto&lt;/a&gt; o &lt;a href="https://www.nature.com/articles/d41586-025-02343-x"&gt;esto&lt;/a&gt; puede hacerse una idea de hasta qué punto son competentes en la materia hoy en día.&lt;/p&gt;
&lt;h2 id="fragmentación"&gt;Fragmentación&lt;/h2&gt;
&lt;p&gt;De los problemas que plantea Alfaro en su entrada hay uno que podría considerarse específico del derecho (siempre vs matemáticas y programación y teniendo en cuenta las salvedades que expongo más abajo): la fragmentación. Aunque se refiere a él específicamente en el séptimo punto,&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;La diversidad de ordenamientos incrementa la complejidad.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;también hay referencias implícitas a esa fragmentación cuando alude a los &lt;em&gt;falsos amigos&lt;/em&gt; en la traducción de términos jurídicos, a la traslación de términos de otros reglamentos o a la dependencia con respecto al contexto normativo.&lt;/p&gt;
&lt;p&gt;La fragmentación puede ser temporal o geográfica (sin excluir el &lt;em&gt;tertio&lt;/em&gt;). El derecho está fragmentado en las dos direcciones: cambia de jurisdicción en jurisdicción, cambia de década en década. En cambio, con permiso de Lakatos, las matemáticas son iguales en Oslo y en Tombuctú y los grupos abelianos de hoy siguen siendo como los de los años cuarenta del siglo pasado.&lt;/p&gt;
&lt;p&gt;Sin embargo, en el mundo de la programación sí existe una doble fragmentación análoga a la del derecho. Por un lado, existen muchos lenguajes de programación, muchos de ellos similares. Aunque entiendo que es mucho más fácil para un LLM mantener la coherencia programando (y no saltar de Python a Typescript o de Java a C++) que razonando sobre la legislación mercantil (y no saltar subrepticia e inopinadamente de la española a la ecuatoriana). Queda admitido que es tal vez la dificultad más seria que advierto hoy. Aunque el hecho de que, típicamente, legislaciones distintas están redactadas en idiomas distintos, puede contribuir a reducir el riesgo de contaminación cruzada.&lt;/p&gt;
&lt;p&gt;Porque la otra, la fragmentación temporal, no es en absoluto específica del derecho. Está también presente &amp;mdash;y cuántas veces la hemos sufrido&amp;mdash; en el mundo de la programación: ¿cuántas veces nos han sugerido los LLMs líneas de código que funcionaban en versiones anteriores y ya obsoletas? Y sin embargo&amp;hellip;&lt;/p&gt;
&lt;h2 id="estructuración"&gt;Estructuración&lt;/h2&gt;
&lt;p&gt;Dos de las dificultades que señala Alfaro hacen referencia a la estructura de la argumentación jurídica. Por ejemplo, escribe (cuarto problema):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Un jurista estructura un razonamiento conforme a fuentes, jerarquía normativa, interpretación y hechos.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;O en el octavo:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;El Derecho presenta una estructura fuertemente sistemática: las normas forman parte de instituciones, las instituciones de áreas, y todo ello se articula mediante principios. Los modelos generativos no representan esa estructura. La similitud lingüística entre expresiones no implica equivalencia funcional.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Que me lleva a pensar, de repente, en los Elementos de Euclides y en las habituales secuencias de definiciones, lemas, teoremas y corolarios habitual en matemáticas. O en la estructura de un problema de programación complejo. Cuando uno quiere construir una aplicación no trivial, el &lt;em&gt;prompt&lt;/em&gt; eficaz no es&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;construye una aplicación que haga tal cosa&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;sino que, más bien, uno comienza solicitando una estructura, un andamiaje, que luego ir completando iterativa e interactivamente. Que los argumentos jurídicos se atengan a estructuras prefijadas no es un impedimento para la eficacia del uso de los LLMs sino todo lo contrario. Tal vez, habida cuenta de la estructura subyacente, los juristas deberían aprender de las buenas prácticas de los programadores para &lt;em&gt;modularizar&lt;/em&gt; explícitamente sus razonamientos cuando utilicen LLMs para ello (y también, podría añadirse, cuando no).&lt;/p&gt;
&lt;h2 id="otras-cuestiones"&gt;Otras cuestiones&lt;/h2&gt;
&lt;p&gt;Otras dos cuestiones que plantea Alfaro son las alucinaciones y la baja calidad de gran parte del material de entrenamiento. Del segundo, poco sé. Pero me extrañaría que la proporción de señal y ruido fuese mucho más feliz en Python que en derecho penal. Eso sí, admito que la fragmentación puede contribuir a exacerbar el problema: supongo que no es lo mismo un ratio entre señal y ruido del 10% cuando el denominador es 1e6 que cuando es 1e9.&lt;/p&gt;
&lt;p&gt;Por su lado, las alucinaciones no son patrimonio exclusivo del derecho, por más que dichos casos sean &lt;a href="https://naturalandartificiallaw.com/ai-hallucination-tracker/"&gt;más notorios&lt;/a&gt; (y trascendentes, supongo). Pero una manera idónea para paliar el problema que suponen es recurrir a la modularización a la que se refería la sección anterior: hace que las consultas sean mucho más acotadas y específicas, reduciendo el riesgo de desvaríos.&lt;/p&gt;
&lt;h2 id="la-gran-omisión"&gt;La gran omisión&lt;/h2&gt;
&lt;p&gt;Para el asunto de esta entrada, la gran diferencia entre, por un lado, el derecho y, por el otro, las matemáticas y la programación, es el de la existencia de herramientas más o menos automáticas de validación. El papel, el medio de la argumentación jurídica, todo lo soporta; pero tanto las matemáticas como los programas tienen &amp;mdash;más propiamente, suelen tener&amp;mdash; criterios de validez mucho más estrictos y &lt;em&gt;operativizables&lt;/em&gt;. En programación, hay (o puede haber) &lt;em&gt;tests&lt;/em&gt; que el código tiene que pasar correctamente. El caso de &lt;a href="https://simonwillison.net/2025/Dec/14/justhtml/"&gt;JustHTML5&lt;/a&gt; es un ejemplo de libro de la interacción entre el desarrollo con LLMs y el uso masivo de &lt;em&gt;tests&lt;/em&gt; para el generar código robusto. Sobre el uso de LLMs y verificadores formales en matemáticas, puede consultarse &lt;a href="https://arxiv.org/abs/2505.05758"&gt;esto&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Sin embargo, ¿existe un sistema razonablemente automático que valide total o parcialmente un argumento jurídico? Sospecho que no.&lt;/p&gt;
&lt;h2 id="la-síntesis"&gt;La síntesis&lt;/h2&gt;
&lt;p&gt;Hemos partido de una tesis: la de la inadecuación de los LLMs para lidiar con cuestiones jurídicas, la he contrapuesto con su uso en otros ámbitos donde son mucho más eficaces y creo que cabe esbozar una síntesis optimista: el uso de los LLMs en el ámbito del derecho podría ser más fructífero si:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Se usasen aprovechando explícitamente las restricciones estructurales que rigen en la disciplina.&lt;/li&gt;
&lt;li&gt;Las propuestas generadas por los LLMs pudieran ser sometidas a una validación fiable dentro de unos rangos razonables de tolerancia.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Por un sistema de validación específico para el derecho pienso en una herramienta (independiente del LLM original, tal vez un LLM independiente u otro subproceso del mismo) que fuese capaz de:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Verificar que las citas y referencias existen realmente.&lt;/li&gt;
&lt;li&gt;Comprobar si las citas y referencias están desactualizadas.&lt;/li&gt;
&lt;li&gt;Confirmar que los argumentos concretos (p.e., el uso de un determinado artículo) son coherentes con la práctica habitual.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Es decir, someter la totalidad del argumento a una serie de herramientas (sospecho que aún inexistentes) &lt;a href="https://en.wikipedia.org/wiki/Unix_philosophy#Do_One_Thing_and_Do_It_Well"&gt;que hagan una única cosa (pero que la hagan bien)&lt;/a&gt; y que operen como el equivalente de los &lt;em&gt;tests&lt;/em&gt; en las otras dos disciplinas consideradas en esta entrada. Los LLMs tienden a especular más cuando se enfrentan a tareas abiertas y ambiguas que cuando se les plantea cuestiones específicas y acotadas.&lt;/p&gt;
&lt;p&gt;Un sistema de esa naturaleza, que yo sepa, no existe. Sospecho que quien lo construya ganará una envidiable cantidad de dinero.&lt;/p&gt;</description></item><item><title>Notas (6): Terence Tao sobre los LLMs en matemáticas y algunos asuntos más</title><link>https://datanalytics.com/2026/02/02/cortos-llms/</link><pubDate>Mon, 02 Feb 2026 00:00:00 +0000</pubDate><guid>https://datanalytics.com/2026/02/02/cortos-llms/</guid><description>&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://terrytao.wordpress.com/2025/11/05/mathematical-exploration-and-discovery-at-scale/"&gt;&lt;em&gt;Mathematical exploration and discovery at scale&lt;/em&gt;&lt;/a&gt;. Terence Tao describe su experiencia con &lt;a href="https://en.wikipedia.org/wiki/AlphaEvolve"&gt;AlphaEvolve&lt;/a&gt;, una herramienta que utiliza LLMs para &lt;em&gt;evolucionar&lt;/em&gt; código para resolver problemas de optimización matemática. Tao lo relaciona con el &lt;em&gt;descenso estocástico&lt;/em&gt;: en lugar de optimizar generando iterativamente nuevos vectores más o menos aleatorios que van aproximándose al óptimo, el sistema genera un programa &lt;em&gt;aleatorio&lt;/em&gt; en Python que va refinando progresivamente el anterior.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Una serie de herramientas creadas por Google:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/google/langextract"&gt;LangExtract&lt;/a&gt; es una librería de Google escrita en Python para extraer información de ficheros de texto no estructurados.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://labs.google.com/pomelli/about/"&gt;Pomelli&lt;/a&gt;, una herramienta experimental de Google Labs (en colaboración con Google DeepMind) que ayuda a pequeñas y medianas empresas a crear contenido de marketing alineado con su marca.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://opal.google/landing/"&gt;Opal&lt;/a&gt; permite crear y compartir &lt;em&gt;apps&lt;/em&gt; simples usando lenguaje natural.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://learnyourway.withgoogle.com/"&gt;&lt;em&gt;Learn Your Way&lt;/em&gt;&lt;/a&gt; es un experimento de Google Labs para crear &lt;em&gt;experiencias de aprendizaje personalizadas&lt;/em&gt;. Transforma &lt;em&gt;contenidos clásicos&lt;/em&gt; en formatos interactivos adaptados a las preferencias y objetivos del usuario.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=eTTMUWP5B0s"&gt;&lt;em&gt;Open Challenges for AI Engineering: Simon Willison&lt;/em&gt;&lt;/a&gt; enlaza a una charla de Simon Willison sobre los problemas técnicos y prácticos aún no resueltos en el desarrollo y despliegue de sistemas basados en la IA como las vulnerabilidades relacionadas con la inyección de &lt;em&gt;prompts&lt;/em&gt;, la falta de transparencia, la evaluación de modelos y las limitaciones de las herramientas actuales.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://www.economist.com/business/2026/01/12/job-applicants-are-winning-the-ai-arms-race-against-recruiters"&gt;&lt;em&gt;Job applicants are winning the AI arms race against recruiters&lt;/em&gt;&lt;/a&gt; es un artículo de The Economist sobre cómo los candidatos a empleos están utilizando cada vez más herramientas de IA para generar solicitudes muy pulidas, superando la capacidad de los reclutadores para filtrarlas eficazmente. Esto ha desplazado el equilibrio de poder hacia los solicitantes, inundando los procesos de selección con currículums y cartas generados por IA. Las empresas tienen dificultades para distinguir candidaturas genuinas, lo que está cambiando las estrategias de contratación.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://www.politico.com/news/2026/01/06/artificial-intelligence-prescribing-medications-utah-00709122"&gt;&lt;em&gt;Artificial intelligence begins prescribing medications in Utah&lt;/em&gt;&lt;/a&gt;, aunque, en realidad, la letra pequeña dice que se limitará a renovar ciertas recetas médicas.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Todo el mundo parece estar hablando de la &amp;ldquo;constitución&amp;rdquo; de Claude. Por ejemplo, véase &lt;a href="https://thezvi.wordpress.com/2026/01/27/the-claude-constitutions-ethical-framework/"&gt;&lt;em&gt;The Claude Constitution’s Ethical Framework&lt;/em&gt;&lt;/a&gt;, &lt;a href="https://thezvi.wordpress.com/2026/01/28/open-problems-with-claudes-constitution/"&gt;&lt;em&gt;Open Problems With Claude’s Constitution&lt;/em&gt;&lt;/a&gt; o &lt;a href="https://thezvi.wordpress.com/2026/01/26/claudes-constitutional-structure/"&gt;&lt;em&gt;Claude’s Constitutional Structure&lt;/em&gt;&lt;/a&gt; y los enlaces que contienen.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>¿Acabaremos programando todos en nanolang?</title><link>https://datanalytics.com/2026/01/28/programacion-nanolang/</link><pubDate>Wed, 28 Jan 2026 00:00:00 +0000</pubDate><guid>https://datanalytics.com/2026/01/28/programacion-nanolang/</guid><description>&lt;p&gt;Hace casi un año escribí &lt;a href="https://datanalytics.com/2025/02/27/programacion-ensamblador/"&gt;&lt;em&gt;¿Acabaremos programando todos en ensamblador?&lt;/em&gt;&lt;/a&gt;, que comenzaba así:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Un lenguaje de programación es un lenguaje que media entre el que nos es familiar a los humanos y el que reconocen las computadoras. Los lenguajes de alto nivel nos resultan más cómodos; los de bajo nivel, más crípticos. Todos conocemos, pienso, el &lt;em&gt;trade-off&lt;/em&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Hay lenguajes muy próximos a los humanos, como &lt;a href="https://en.wikipedia.org/wiki/Scratch_(programming_language)"&gt;scratch&lt;/a&gt; o &lt;a href="https://en.wikipedia.org/wiki/Logo_(programming_language)"&gt;logo&lt;/a&gt;. Otros, a la máquina, como C o ensamblador. Mucha gente opta por uno en la zona media del espectro, como Python.&lt;/p&gt;
&lt;p&gt;Hace un año, motivado por las primeras noticias que me llegaron sobre la &lt;em&gt;moda&lt;/em&gt; del &lt;em&gt;vibe coding&lt;/em&gt;, escribí también:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;En el momento en que, como Karpathy hoy, los humanos nos olvidemos de que el código existe, ¿para qué necesitaremos que los LLMs generen Python?, ¿por qué no C o, ya puestos, ensamblador directamente?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Sin embargo, no es evidente que el lugar ideal para los LLMs dentro del espectro sea el aledaño al hierro.&lt;/p&gt;
&lt;p&gt;Supongamos que alguien se plantea diseñar un lenguaje de programación. Lo hace pensando en un público, en una serie de requisitos. Si quiere que resulte fácil de leer y mantener, que no abrume al programador con detallitos de implementación, que sea modular, que sea expresivo, generoso en azúcar sintáctico, etc., le puede acabar saliendo algo parecido a Python. Si sacrifica la robustez en aras de la facilidad de uso en modo interactivo (o REPL), igual construye algo que se parezca a R.&lt;/p&gt;
&lt;p&gt;La pregunta que le viene de manera natural a la cabeza a uno es: ¿cuáles deberían ser las características de un lenguaje de programación apropiado para los LLMs? ¿Cómo sería el lenguaje de programación resultante? Y una primera respuesta a estas preguntas la proporciona &lt;a href="https://github.com/jordanhubbard/nanolang"&gt;nanolang&lt;/a&gt;, una primera propuesta &amp;mdash;al menos, de la que tenga noticia&amp;mdash; de un lenguaje de programación pensado específicamente para ser escrito por LLMs y no por humanos. Algunas de sus características específicas son:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Sintaxis mínima en pro de la economía de tokens. Se puede escribir &lt;code&gt;fn&lt;/code&gt; en lugar de &lt;code&gt;function&lt;/code&gt; o &lt;code&gt;i32&lt;/code&gt; en lugar de &lt;code&gt;int32&lt;/code&gt;. Se puede reducir el número de caracteres (ergo, &lt;em&gt;tokens&lt;/em&gt;) necesarios para definir o llamar a una función. Los humanos agradecemos cierto grado de redundancia &amp;mdash;el lenguaje natural también lo tiene&amp;mdash; pero las máquinas, no tanto.&lt;/li&gt;
&lt;li&gt;Sintaxis unívoca (no ambigua). Por ejemplo, usa la &lt;a href="https://en.wikipedia.org/wiki/Polish_notation"&gt;notación polaca&lt;/a&gt; para las expresiones matemáticas, que evita la complejidad de las reglas de precedencia de operadores. Así, &lt;code&gt;3 * 5 + 4&lt;/code&gt; se escribiría algo así &lt;code&gt;(+ (* 3 5) 4)&lt;/code&gt;, que evita mantener la regla implícita de que el producto se resuelve antes que la suma. Aunque los humanos odiemos la notación polaca, a las máquinas les encanta.&lt;/li&gt;
&lt;li&gt;Test obligatorios en las funciones para tratar de alinear mejor su implementación en código a la esperada y que aquella no sea solo un &lt;em&gt;mejor esfuerzo probabilístico&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Tipado estático. Universalmente odiado por los humanos no neurodivergentes.&lt;/li&gt;
&lt;li&gt;Una &lt;em&gt;standard library&lt;/em&gt; pequeña y bien estructurada.&lt;/li&gt;
&lt;li&gt;Finalmente, en aras de la eficiencia y portabilidad, el código generado por nanolang se &lt;em&gt;transpila&lt;/em&gt; a C.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;A saber qué pasará en unos años.&lt;/p&gt;
&lt;p&gt;De todos modos, no tengo claro que a corto plazo vaya a resolver los problemas que nos encontramos los científicos de datos. En particular, veo mucha distancia entre lo descrito arriba y un sistema que pueda responder en tiempo real a peticiones del tipo:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Baja tales datos de tal sitio, ajusta tal tipo de modelo y construye tales gráficos de tal manera concreta.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;No es suficiente con una &lt;em&gt;biblioteca estándar&lt;/em&gt; pequeña y estructurada. Hacen falta extensiones y módulos no presentes en nanolang. Pero todos nos acordamos de cómo Python no fue una alternativa a R o SAS durante mucho tiempo y lo que ha sucedido después, tras asentarse el ecosistema de datos alrededor de &lt;code&gt;pandas&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Notas (5): Crítica a las nubes de palabras, GAMLSS, paradojas estadísticas y más</title><link>https://datanalytics.com/2026/01/26/cortos/</link><pubDate>Mon, 26 Jan 2026 00:00:00 +0000</pubDate><guid>https://datanalytics.com/2026/01/26/cortos/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.niemanlab.org/2011/10/word-clouds-considered-harmful/"&gt;&lt;em&gt;Word clouds considered harmful&lt;/em&gt;&lt;/a&gt;. Un día aparecieron y a todos nos parecieron estupendos. Pero hay que madurar y admitirlo: tienen más desventajas que ventajas. Usan la frecuencia como &lt;em&gt;proxy&lt;/em&gt; del significado y, además, no se sabe muy bien si la representan en términos de longitud o de área. Además de la influencia confundidora del número de letras de los términos.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://statmodeling.stat.columbia.edu/2026/01/13/a-better-way-to-fill-in-those-missing-bubbles-in-the-standardized-test/"&gt;&lt;em&gt;A better way to fill in those missing bubbles in the standardized test&lt;/em&gt;&lt;/a&gt;. Sugiere algo que me parece muy razonable: en un examen &lt;em&gt;tipo test&lt;/em&gt; asignar el valor esperado de la respuesta al azar a las preguntas no respondidas.&lt;/li&gt;
&lt;li&gt;Me he vuelto &lt;em&gt;fan&lt;/em&gt; de los &lt;a href="https://www.gamlss.com/"&gt;GAMLSS&lt;/a&gt;. Están a la altura de los tiempos. Supongo que no tendrán éxito hasta que queden obsoletos por algo mejor que venga después.&lt;/li&gt;
&lt;li&gt;Sabemos que el AUC &lt;em&gt;es lo mismo&lt;/em&gt; que el test de Wilcoxon. Pero, además, Frank Harrell explora la relación entre el test de Wilcoxon y la regresión logística ordinal en &lt;a href="https://www.fharrell.com/post/powilcoxon/"&gt;&lt;em&gt;Equivalence of Wilcoxon Statistic and Proportional Odds Model&lt;/em&gt;&lt;/a&gt;. Resulta que el test de Wilcoxon emerge de manera natural al ajustar uno de esos modelos sin covariables (&lt;code&gt;y ~ 1&lt;/code&gt; en notación de fórmula de R). No sé si aquellos cuyo trabajo consiste en maquillar AUCs le pueden sacar punta a esto.&lt;/li&gt;
&lt;li&gt;Desde primeros principios, podría argumentarse que la &lt;em&gt;tasa metabólica&lt;/em&gt; de los animales (calor emitido en reposo) debería guardar una relación del tipo $B \propto M^\alpha$, donde $M$ es la masa y $\alpha = 2/3$. Pero empíricamente, parece que $\alpha$ está más próxima a $3/4$. &lt;a href="https://statmodeling.stat.columbia.edu/2025/12/18/re-examination-of-the-3-4-law-of-metabolism/"&gt;Aquí&lt;/a&gt; se reexamina la cuestión.&lt;/li&gt;
&lt;li&gt;La conclusión de &lt;a href="https://www.lesswrong.com/posts/E3nsbq2tiBv6GLqjB/x-explains-z-of-the-variance-in-y"&gt;&lt;em&gt;X explains Z% of the variance in Y&lt;/em&gt;&lt;/a&gt; es que el concepto es, en general, mucho más confuso de lo que parece. Haz depender $Y$ de $X_1$ y $X_2$ que no son independientes y&amp;hellip;&lt;/li&gt;
&lt;li&gt;A Andrew Gelman no le gustan los mercados de predicciones y, por tanto, &lt;a href="https://statmodeling.stat.columbia.edu/2026/01/07/uh-oh-prediction-markets/"&gt;no deja de encontrarles pegas&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Causalidad «a la mano» vs «ante los ojos»</title><link>https://datanalytics.com/2026/01/21/causalidad-a-la-mano/</link><pubDate>Wed, 21 Jan 2026 00:00:00 +0000</pubDate><guid>https://datanalytics.com/2026/01/21/causalidad-a-la-mano/</guid><description>&lt;p&gt;Excúseseme el utilizar terminología oscura de Heidegger para referirme a lo que las cosas son para nosotros en contraposición a lo que predicamos de ellas cuando queremos analizarlas.&lt;/p&gt;
&lt;p&gt;Sobre la causalidad, escribe el siempre agudo economista Scott Sumner lo siguiente:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Podrías pensar que sabes lo que significa decir que «X causó Y», pero los filósofos han debatido este tema durante milenios. Una IA lista varias interpretaciones:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Análisis de regularidad:&lt;/strong&gt; Se centra en patrones de conjunción constante entre eventos, tal como se observa en la obra de Hume.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Análisis contrafáctico:&lt;/strong&gt; Examina qué habría pasado si la causa no hubiera ocurrido; si el efecto no se hubiera producido, entonces existe un vínculo causal.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Análisis de manipulación:&lt;/strong&gt; Ve la causalidad como algo que puede ser manipulado o controlado, a menudo con aplicaciones en las ciencias.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Análisis probabilístico:&lt;/strong&gt; Considera la verosimilitud o probabilidad de que una causa contribuya a un efecto.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;No pretendo sugerir que uno solo de estos sea siempre el correcto, pero en mi propio campo, la economía monetaria, me interesan los argumentos de causalidad que tienen implicaciones políticas útiles. Cuando digo que un determinado problema macroeconómico fue causado en gran medida por una mala política monetaria, me refiero a que una política monetaria alternativa viable habría dado lugar a un problema mucho menos grave.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Sobre la causalidad, vista en abstracto, se pueden decir muchas cosas. Pero lo relevante es contextual: cómo me apela el evento $Y$ habida cuenta de que yo soy, p.e., economista monetario. Y así podré hablar de &lt;em&gt;causas&lt;/em&gt; $X$ distintas de las que identificaría otro sujeto distinto con un conjunto de responsabilidades diferentes.&lt;/p&gt;
&lt;p&gt;Excúseseme, de nuevo, haber escrito algo que no aporta nada nuevo con respecto a lo que ya tengo escrito sobre el asunto de la causalidad en &lt;a href="https://datanalytics.com/categories/causalidad/"&gt;las últimas ocasiones en las que lo he tratado&lt;/a&gt;. Era muy difícil no sucumbir a la tentación de ilustrarlas con este ejemplo tan bien traído.&lt;/p&gt;</description></item><item><title>Notas (4): de la economía de los centros de cálculo en órbita a la relación entre el precio de las acciones y las probabilidades de eventos corporativos</title><link>https://datanalytics.com/2026/01/19/cortos/</link><pubDate>Mon, 19 Jan 2026 00:00:00 +0000</pubDate><guid>https://datanalytics.com/2026/01/19/cortos/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="https://andrewmccalip.com/space-datacenters"&gt;&lt;em&gt;Economics of Orbital vs Terrestrial Data Centers&lt;/em&gt;&lt;/a&gt; cuestiona la lógica económica de ubicar centros de datos en órbita comparando sus potenciales costes operativos con los de los centros terrestres. Tiene particularmente en cuenta los costes asociados al problema técnico de la disipación de energía en el espacio y concluye que es una ensoñación.&lt;/li&gt;
&lt;li&gt;También lo es lo del túnel ferroviario entre España y Marruecos, que según &lt;a href="https://www.elconfidencial.com/mundo/2025-12-15/proyecto-tunel-tren-espana-marruecos-resucitado_4264465/"&gt;esto&lt;/a&gt; «ha resucitado». ·El artículo, por supuesto, no habla de cifras y no se molesta en comparar el proyecto con otros que proporcionen contexto y den una idea de la escala.&lt;/li&gt;
&lt;li&gt;Más beneficio por euro invertido proporciona la digitalización de servicios. Sin embargo, en &lt;a href="https://www.dw.com/en/germany-struggles-to-go-digital-stuck-in-analog-era-fax-machines-paperwork-bureaucracy/a-75206481"&gt;&lt;em&gt;Why Germany struggles to go digital&lt;/em&gt;&lt;/a&gt; se nos cuenta el notable retraso en la digitalización administrativa en Alemania, con fuerte dependencia del papel y tecnologías obsoletas como el fax. Pone como excusa el federalismo &amp;mdash;que dispersa las competencias, generando fragmentación, duplicidades y falta de estándares&amp;mdash;, la cultura de protección de datos y la desconfianza histórica hacia sistemas centralizados.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://thezvi.wordpress.com/2025/12/22/the-revolution-of-rising-expectations/"&gt;&lt;em&gt;The Revolution of Rising Expectations&lt;/em&gt;&lt;/a&gt; trata de explicar la paradoja de la coexistencia del progreso económico con el pesimismo y el malestar al respecto en términos de una presunta explosión de las expectativas: no comparamos lo que tuvimos con lo que tenemos sino lo que tenemos con lo que aspiramos a tener.&lt;/li&gt;
&lt;li&gt;En &lt;a href="https://archive.is/newest/https://www.economist.com/finance-and-economics/2025/12/17/this-christmas-raise-a-glass-to-concentrated-market-returns"&gt;&lt;em&gt;This Christmas, raise a glass to concentrated market returns&lt;/em&gt;&lt;/a&gt;, The Economist nos recuerda que los beneficios que generan las compañías cotizadas hoy en día están concentradas en un pequeño número de ellas y que la gran mayoría tienen un desempeño muy mediocre.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.worksinprogress.news/p/how-to-measure-competition"&gt;&lt;em&gt;The holy grail of capitalism&lt;/em&gt;&lt;/a&gt; examina cómo medir correctamente la competencia en los mercados, criticando métricas tradicionales de la concentración empresarial como el &lt;a href="https://es.wikipedia.org/wiki/%C3%8Dndice_de_Herfindahl"&gt;índice de Hirschman&lt;/a&gt;. Como alternativa, propone enfoques más amplios que incorporan comportamiento empresarial, barreras de entrada y poder de mercado y en particular, un nuevo índice que mida en qué medida las empresas más productivas son capaces de ganar cuota de mercado.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=otSAEca41eE"&gt;&lt;em&gt;The Big Problem With Solar Power&lt;/em&gt;&lt;/a&gt; analiza las principales limitaciones de la energía solar a gran escala: intermitencia, el almacenamiento, la integración en la red y los costes asociados. El objetivo es ofrecer una visión equilibrada sobre el papel real de la energía solar en el sistema energético.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.siliconcontinent.com/p/a-new-years-letter-to-a-young-person"&gt;&lt;em&gt;A New Year’s letter to a young person &amp;mdash; Take the messy job&lt;/em&gt;&lt;/a&gt;. Luis Garicano es un economista peculiar en tanto que no solo ofrece su visión sobre lo que debería hacer el estado, el que es el gran foco de la mayor parte de sus colegas, sino que con frecuencia desciende de la torre de marfil y nos regala sus consejos para otros agentes económicos más humildes. En este caso, jóvenes que comienzan su carrera profesional.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicholasdecker.substack.com/p/auctions-on-the-internet"&gt;&lt;em&gt;Auctions on the Internet&lt;/em&gt;&lt;/a&gt;. Se dice que la mayor contribución técnica concreta de la disciplina entera de la economía es la teoría de las subastas. En este artículo de Nicholas Decker se examina desde el punto de vista económico el funcionamiento de las que operan subrepticiamente en internet en ese momento en el que las plataformas ponen en contacto oferta y demanda. El texto termina con el anuncio de una futura entrada sobre las subastas de eBay (y por qué fracasaron), pero aún no ha sido publicado, parece. Lo que sí que ha publicado el autor es una selección de sus &lt;a href="https://nicholasdecker.substack.com/p/my-ten-favorite-papers-this-year"&gt;artículos favoritos de 2025&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.reddit.com/r/CryptoScams/comments/1id4je9/someone_is_using_creatoriq_likeness_for_their/?show=original"&gt;&lt;em&gt;Someone is using CreatorIQ likeness for their crypto scam creatordbc (lucky all mission)&lt;/em&gt;&lt;/a&gt; ilustra el funcionamiento de uno de los pasos de una de las variantes de las estafas por internet que involucran criptomonedas. Para facilitarlas, los timadores se esconden tras el nombre y logo de compañías serias que no tienen instrumento alguno para impedirlo.&lt;/li&gt;
&lt;li&gt;En la primera sección de &lt;a href="https://archive.is/newest/https://www.bloomberg.com/opinion/newsletters/2025-12-11/a-stock-price-is-not-a-prediction"&gt;&lt;em&gt;A Stock Price Is Not a Prediction&lt;/em&gt;&lt;/a&gt;, convenientemente titulada &lt;em&gt;Probabilities&lt;/em&gt;, Matt Levine discute la relación entre el precio de las acciones de las empresas y de los mercados de predicción asociados a eventos referidos a tales empresas. En particular, discute en qué medida y de qué forma los precios de las acciones reflejan las probabilidades de los eventos y las relaciones entre los precios de las acciones y los de los mercados de predicciones, discutiendo los factores que mueven unos y otros.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>¿Explica la paradoja de Simpson por qué crece la economía sin que se reduzca del desempleo?</title><link>https://datanalytics.com/2026/01/14/ia-pid-desempleo-parajodoja-simpson/</link><pubDate>Wed, 14 Jan 2026 00:00:00 +0000</pubDate><guid>https://datanalytics.com/2026/01/14/ia-pid-desempleo-parajodoja-simpson/</guid><description>&lt;p&gt;Trae el New York Times un artículo excepcional &amp;mdash;y al que se le puede sacar mucha punta&amp;mdash;, &lt;a href="https://www.nytimes.com/2025/12/23/opinion/gdp-numbers-economy-job-numbers.html"&gt;&lt;em&gt;3 Theories of What’s Going On With the Contradictory Economic Data&lt;/em&gt;&lt;/a&gt;, sobre una aparente contradicción en las estadísticas económicas de los EEUU &amp;mdash;crecimiento sustancial del PIB acompañado de un estancamiento del mercado laboral&amp;mdash; alrededor de la fecha en la que esto se escribe. Las tres explicaciones que ofrece, que en realidad son cuatro, se presentan a continuación.&lt;/p&gt;
&lt;p&gt;Las dos primeras tienen que ver con la imprecisión de la estadística pública. Las cifras adelantadas acerca del PIB y del desempleo están basadas en encuestas incompletas, indicadores desactualizados y estimaciones sujetas a revisiones posteriores. Las revisiones del PIB suelen ser más grandes que las del mercado laboral, así que la primera explicación es que las cifras correspondientes a la actividad económica podrían estar sobrestimadas. La segunda &amp;mdash;algo menos probable por lo discutido arriba&amp;mdash; es que se habrían infraestimado las correspondientes al empleo.&lt;/p&gt;
&lt;p&gt;En España, que yo sepa, las cifras del PIB están sujetas a revisiones periódicas de las que ya &lt;a href="https://datanalytics.com/2014/12/09/ruido-en-las-estadisticas-oficiales/"&gt;me he ocupado en alguna ocasión&lt;/a&gt;, mientras que las correspondientes al mercado laboral (al menos, las obtenidas a través de la EPA), no.&lt;/p&gt;
&lt;p&gt;Las dos siguientes explicaciones dan por buenas las cifras. Una de ellas es que los efectos de la IA comienzan a observarse en las series macroeconómicas: al fin y al cabo, la productividad no es otra cosa que el cociente entre el PIB y la masa laboral. Si la IA permite a las empresas hacer más usando menos recursos (humanos), se observarán patrones macroeconómicos similares a los reportados, es decir, un incremento relativo del numerador del cociente con respecto a su denominador. Pero este incremento de la productividad podría no deberse necesariamente al impacto de la IA &amp;mdash;y el articulista ofrece argumentos bastante convincentes para darlo por bueno&amp;mdash; sino más bien al desplazamiento de la economía hacia sectores menos intensivos en mano de obra. En particular, hacia la construcción de centros de cálculo, que tienen un impacto económico enorme pero que apenas necesitan personal durante su construcción y funcionamiento. En definitiva, no otra cosa que la paradoja de Simpson &amp;mdash;o, como lo llaman algunos, el «efecto composición»&amp;mdash; operando de nuevo.&lt;/p&gt;
&lt;p&gt;La diferencia entre las explicaciones tercera y cuarta, por dejarlo tal vez más claro de lo necesario, radica en que en la cuarta no hay cambios estructurales (los sectores económicos no se ven afectados por la IA), solamente cambia su peso relativo. En la tercera hay un cambio cualitativo: sectores que antes eran intensivos en mano de obra &amp;mdash;como la programación&amp;mdash; dejan de serlo por efecto de la IA.&lt;/p&gt;</description></item><item><title>Notas (3): Causalidad en mercados de predicciones y modelos económicos</title><link>https://datanalytics.com/2026/01/12/cortos/</link><pubDate>Mon, 12 Jan 2026 00:00:00 +0000</pubDate><guid>https://datanalytics.com/2026/01/12/cortos/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dynomight.net/futarky/"&gt;&lt;em&gt;Futarchy’s fundamental flaw&lt;/em&gt;&lt;/a&gt;: Dynomight sostiene que la idea central de la futarquía &amp;mdash;el uso de mercados de predicciones como guía de las políticas económicas&amp;mdash; es problemática porque esos mercados únicamente revelan probabilidades condicionales (correlaciones) y no efectos causales reales, i.e., qué ocurriría si se toma una decisión. Dado que las probabilidades condicionales no reflejan intervenciones, los precios de mercado pueden inducir a error sobre el impacto real de las políticas, un punto que el autor ilustra con varios ejemplos.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.overcomingbias.com/p/decision-conditional-prices-reflect"&gt;&lt;em&gt;Decision Conditional Prices Reflect Causal Chances&lt;/em&gt;&lt;/a&gt;: Es la réplica de Robin Hanson, a quien debemos el concepto de la &lt;em&gt;futarquía&lt;/em&gt;, a la entrada anterior. Sostiene que si los agentes usan la misma teoría de decisión y comparten información similar, entonces los precios sí reflejan las probabilidades relevantes para el cálculo de la utilidad esperada. Como consecuencia, los mercados de predicciones serían más útiles para tomar decisiones de lo que afirman sus críticos, por más que subsistan problemas técnicos relacionados con la asimetría de la información y cuestiones relacionadas con la temporalidad.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://statmodeling.stat.columbia.edu/2025/09/19/when-thinking-about-causal-inference-mechanistic-or-process-models-are-important-i-think-that-the-association-of-causal-with-black-box-models-leads-to-lots-of-problems/"&gt;&lt;em&gt;When thinking about causal inference, mechanistic or process models are important. I think that the association of “causal” with black-box models leads to lots of problems.&lt;/em&gt;&lt;/a&gt;: Andrew Gelman defiende los modelos generativos (que describen la dinámica subyacente de los sistemas) para comprender y generalizar relaciones causales, particularmente frente a la proliferación de sistemas &lt;em&gt;opacos&lt;/em&gt; basados en la IA.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://arpitrage.substack.com/p/can-a-transformer-learn-economic"&gt;&lt;em&gt;Can a Transformer “Learn” Economic Relationships?&lt;/em&gt;&lt;/a&gt;: Un artículo que abunda sobre la cuestión del anterior. Estudia si las redes neuronales pueden aprender relaciones económicas estructurales a partir de datos simulados y muestra cómo estos modelos pueden aprender la dinámica de un modelo neokeynesiano y realizar predicciones razonables con datos distintos de los de entrenamiento, lo que sugiere que pueden capturar aspectos relevantes del proceso generador de datos. Sin embargo, los modelos no aprenden completamente las relaciones estructurales &lt;em&gt;verdaderas&lt;/em&gt;. Como conclusión, los LLMs actuales no resuelven por completo los problemas señalados por la crítica de Lucas, pero abren nuevas vías para la modelización económica.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.grumpy-economist.com/p/causation-does-not-imply-variation"&gt;&lt;em&gt;Causation Does not Imply Variation&lt;/em&gt;&lt;/a&gt;: John H. Cochrane señala que identificar un efecto causal de una variable sobre otra no implica que las variaciones en ese factor causal expliquen gran parte de la variación observada en el resultado. Los métodos empíricos suelen aislar variaciones pequeñas y exógenas para estimar efectos causales, pero la mayor parte de la variación real suele provenir de otros factores. Así que, aunque la identificación causal ha mejorado la economía empírica, no necesariamente explica qué impulsa la mayor parte de la variación en variables clave.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Notas (2): GAMs, Stan en el navegador y algunas otras cosas más</title><link>https://datanalytics.com/2026/01/08/cortos/</link><pubDate>Thu, 08 Jan 2026 00:00:00 +0000</pubDate><guid>https://datanalytics.com/2026/01/08/cortos/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Isotype_(picture_language)"&gt;&lt;em&gt;Isotype&lt;/em&gt;&lt;/a&gt;: Un método para graficar datos (y no solo datos) relacionados con asuntos sociales, económicos, tecnológicos, etc. que puede considerarse un antecesor de la infografía contemporánea. Fue desarrollado hace 100 años por &lt;a href="https://en.wikipedia.org/wiki/Otto_Neurath"&gt;Otto Neurath&lt;/a&gt;, uno de los integrantes del Círculo de Viena.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dynomight.net/prior/"&gt;&lt;em&gt;Good if make prior after data instead of before&lt;/em&gt;&lt;/a&gt;: Dynomight argumentando que no solo es legítimo sino necesario construir las prioris después de ver datos (escribo &lt;em&gt;datos&lt;/em&gt; y no &lt;em&gt;los datos&lt;/em&gt; a propósito).&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.weirddatascience.net/2025/11/15/bayes-vs-the-invaders-redivivus"&gt;&lt;em&gt;Bayes vs. the Invaders (Redivivus)&lt;/em&gt;&lt;/a&gt;: La Oxford Internet Institute Halloween Lecture de 2025, que explora mediante un modelo bayesiano simple una base de datos histórica de avistamientos de OVNIs.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ecogambler.netlify.app/blog/clv-prediction/"&gt;&lt;em&gt;GAMs for Customer Lifetime Value (CLV) prediction&lt;/em&gt;&lt;/a&gt;: Prácticamente, un tutorial de uso de los GAMs con R que merece ser tenido a la mano.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://statmodeling.stat.columbia.edu/2025/12/15/simulating-from-and-checking-a-model-in-stan/"&gt;&lt;em&gt;Simulating from and checking a model in Stan: It’s so easy in Stan Playground–it just runs on your browser!&lt;/em&gt;&lt;/a&gt;: Eso, que se pueden correr modelos bayesianos con Stan en el navegador.&lt;/li&gt;
&lt;li&gt;Finalmente, una nota &lt;em&gt;bizarra&lt;/em&gt;. Durante un tiempo seguí un blog, &lt;a href="https://www.getstats.org.uk/"&gt;GetStats&lt;/a&gt;, al que enlacé varias veces en estas páginas hace muchos años. Luego, o desapareció o perdí interés en él. No lo recuerdo, fue hace mucho tiempo. Hace unos días, revisando y tratando de enmendar enlaces rotos de entradas antiguas, volví a dar con él. Pero advertí algo sospechoso: no solo habían desaparecido los contenidos (interesantes) a los que apuntaba sino que el contenido actual parecía plano y romo, como producto de un LLM no muy avispado. En definitiva, una acumulación de indicios me hizo albergar sospechas de que esa no era la página que conocí en tiempos, hasta que un hecho las confirmó indubitablemente: en el pie de todas las páginas figuraba el logo y el enlace a un casino trucho. En definitiva, se trata de un caso de lo que se llama &lt;em&gt;expired domain sniping&lt;/em&gt; y que ha afectado &lt;a href="https://datanalytics.com/2021/12/30/forma-insidiosa-spam/"&gt;a otras páginas&lt;/a&gt; similares. Espero que no sea tal el futuro de &lt;code&gt;datanalytics.com&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>De nuevo, ¿qué significa «un 30% de probabilidad de lluvia»?</title><link>https://datanalytics.com/2026/01/06/probabilidad-lluvia/</link><pubDate>Tue, 06 Jan 2026 00:00:00 +0000</pubDate><guid>https://datanalytics.com/2026/01/06/probabilidad-lluvia/</guid><description>&lt;p&gt;Topé el otro día con el artículo &lt;a href="https://www.elconfidencial.com/tecnologia/ciencia/2025-12-25/meteorologa-probabilidad-precipitacion-1qrt_4265602/"&gt;&lt;em&gt;Cyrena Arnold, meteoróloga: &amp;ldquo;La gente no sabe realmente qué significa probabilidad de precipitación&amp;rdquo;&lt;/em&gt;&lt;/a&gt;, que me interesó por varios motivos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Una parte sustancial de la teoría sobre calibración de modelos predictivos ha sido desarrollada por meteorólogos.&lt;/li&gt;
&lt;li&gt;Porque es un asunto &lt;a href="https://datanalytics.com/2022/09/29/ensembles-meteorologicos-probabilisticos/"&gt;que ya he tratado antes&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Porque XKCD también:&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="Probabilidad de lluvia" loading="lazy" src="https://datanalytics.com/img/2026/meteorologist.png#center"&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Porque en el &lt;a href="https://statmodeling.stat.columbia.edu/2019/12/14/what-does-it-mean-when-they-say-theres-a-30-chance-of-rain/"&gt;blog de Andrew Gelman también se han ocupado del asunto&lt;/a&gt; y en él se puede leer:&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;La probabilidad de precipitación es $C \times A$ donde $C$ es la probabilidad de precipitación en algún lugar de la zona de predicción y $A$ es la proporción del área que recibirá alguna cantidad &lt;em&gt;medible&lt;/em&gt; de precipitación, de haberla. Así que el método correcto de interpretar la predicción es: hay un X% de probabilidad de que llueva en algún punto de la zona.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Porque ocurre con demasiada frecuencia que la gente le pide a los &lt;em&gt;científicos&lt;/em&gt; $X$ y estos no producen $X$ sino, más bien y por las razones que sean, $X^\prime$. Pero luego, estos no se disculpan y dicen: «lo sentimos, no somos capaces de daros $X$ sino más bien algo parecido, $X^\prime$», sino que más bien, desde su alta torre de marfil, tachan al populacho de ignorante por interpretar $X^\prime$ como si fuese realmente $X$ (pasa, p.e., con los intervalos de confianza).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;¿Y qué cosa nos dice Cyrena Arnold, meteoróloga, que es la probabilidad de precipitación según el artículo? Lo siguiente:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Arnold insiste en que, por ejemplo, un 30% de probabilidad de precipitación no implica que lloverá en un tercio del territorio o del día, sino que la precipitación aparece en 3 de cada 10 simulaciones. Por este motivo, la experta asegura que “mucha gente no sabe realmente qué significa probabilidad de precipitación”.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Para reconciliar esa reificación absurda, esa apelación inane al instrumentalismo, con la realidad del mundo, recomiendo la lectura de &lt;a href="https://datanalytics.com/2022/09/29/ensembles-meteorologicos-probabilisticos/"&gt;esto&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Notas (1): Claude Opus 4.5, agentes y el nuevo estándar del desarrollo con LLMs</title><link>https://datanalytics.com/2026/01/01/cortos-llms/</link><pubDate>Thu, 01 Jan 2026 00:00:00 +0000</pubDate><guid>https://datanalytics.com/2026/01/01/cortos-llms/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="https://thezvi.wordpress.com/2025/12/01/claude-opus-4-5-is-the-best-model-available/"&gt;&lt;em&gt;Claude Opus 4.5 Is The Best Model Available&lt;/em&gt;&lt;/a&gt;: Zvi sostiene que Claude Opus 4.5 es actualmente el mejor modelo disponible para uso práctico, superando a alternativas como GPT-5.2 y Gemini en muchas tareas cotidianas y de desarrollo. Destaca tanto &lt;em&gt;benchmarks&lt;/em&gt; como impresiones subjetivas para justificar su superioridad en razonamiento, programación y conversación. También analiza factores como ecosistema, latencia y usabilidad. (A pesar de ello, parece, se usa más en entornos laborales que fuera de ellos).&lt;/li&gt;
&lt;li&gt;&lt;a href="https://simonwillison.net/2025/Nov/24/claude-opus/#atom-everything"&gt;&lt;em&gt;Claude Opus 4.5, and why evaluating new LLMs is increasingly difficult&lt;/em&gt;&lt;/a&gt;: Simon Willison reflexiona sobre Claude Opus 4.5 y explica que evaluar los LLM modernos es cada vez más difícil porque las mejoras son sutiles, dependen del contexto y no se reflejan bien en los &lt;em&gt;benchmarks&lt;/em&gt; tradicionales. Argumenta que la experiencia subjetiva y las evaluaciones basadas en tareas reales son más útiles que las clasificaciones en tablas y que, dado que los modelos están convergiendo sustancialmente, las comparaciones directas son cada vez más complicadas.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://metr.org/blog/2025-03-19-measuring-ai-ability-to-complete-long-tasks/"&gt;&lt;em&gt;METR: Measuring AI Ability to Complete Long Tasks – METR&lt;/em&gt;&lt;/a&gt;: Argumenta que los &lt;em&gt;benchmarks&lt;/em&gt; clásicos para medir la eficacia de los LLMs se centran en tareas cortas y aisladas que no reflejan su uso real. El enfoque de METR consiste en utilizar tareas largas que involucran múltiples pasos, lo que le permite evaluar su capacidad para planificar y mantener un estado coherente y continuo a lo largo del tiempo.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/google/mcp"&gt;GitHub – google/mcp&lt;/a&gt; — Repositorio MCP oficial de Google. Incluye servidores, ejemplos y documentación para integrar agentes y modelos con servicios externos como Google Workspace, BigQuery o Maps.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://simonwillison.net/2025/Dec/14/justhtml/#atom-everything"&gt;&lt;em&gt;JustHTML is a fascinating example of vibe engineering in action&lt;/em&gt;&lt;/a&gt;: Simon Willison presenta JustHTML, un parseador de HTML5 en Python puro que pasa la colección completa de pruebas de html5lib. Lo describe como un ejemplo de &lt;em&gt;vibe engineering&lt;/em&gt;: usar agentes de código junto con buenas pruebas y supervisión humana. El artículo destaca que este enfoque produce software de alta calidad, no solo código generado sin criterio.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://simonwillison.net/2025/Dec/15/porting-justhtml/#atom-everything"&gt;&lt;em&gt;I ported JustHTML from Python to JavaScript with Codex CLI and GPT-5.2 in 4.5 hours&lt;/em&gt;&lt;/a&gt;: Abundando en lo anterior, Willison cuenta cómo portó JustHTML de Python a JavaScript usando Codex CLI y GPT-5.2 en unas 4.5 horas. El texto reflexiona sobre el impacto de los LLM en el desarrollo de software y la confianza en el código generado.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://simonwillison.net/2025/Dec/19/agent-skills"&gt;&lt;em&gt;Agent Skills&lt;/em&gt;&lt;/a&gt;: Willison, de nuevo, explica cómo los Agent Skills de Anthropic se han convertido en una especificación abierta y ligera para que los agentes puedan asumir y reutilizar &lt;em&gt;habilidades&lt;/em&gt;. Aunque es una especificación pequeña y no enteramente definida, ya está siendo adoptada por herramientas como Cursor y VS Code. Se analiza su papel dentro del ecosistema más amplio de agentes y protocolos como MCP.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Nota final:&lt;/strong&gt; A partir del 1 de enero de 2026, voy a comenzar a numerar las entradas consistentes en breves comentarios de artículos en su título. A ver hasta qué número llego antes de rendirme.&lt;/p&gt;</description></item></channel></rss>