From 5c435920d1bc6342317a9f47902b9f80aca4f64f Mon Sep 17 00:00:00 2001 From: Quarto GHA Workflow Runner Date: Thu, 25 Jan 2024 15:39:07 +0000 Subject: [PATCH] Built site for gh-pages --- .nojekyll | 2 +- 01-introduccion.html | 269 +++++++++++--- 02-flujo-basico-2.html | 279 +++++++++++++-- 02-flujo-basico.html | 318 +++++++++++++++-- 03-modelos-genericos.html | 366 +++++++++++++++++--- index.html | 191 +++++++++- search.json | 162 +++++++-- site_libs/bootstrap/bootstrap-icons.css | 148 +++++--- site_libs/bootstrap/bootstrap-icons.woff | Bin 164168 -> 176200 bytes site_libs/bootstrap/bootstrap.min.css | 12 +- site_libs/bootstrap/bootstrap.min.js | 6 +- site_libs/quarto-html/anchor.min.js | 6 +- site_libs/quarto-html/popper.min.js | 4 +- site_libs/quarto-html/quarto.js | 29 +- site_libs/quarto-nav/quarto-nav.js | 21 +- site_libs/quarto-search/autocomplete.umd.js | 4 +- site_libs/quarto-search/quarto-search.js | 161 +++++++-- 17 files changed, 1673 insertions(+), 305 deletions(-) diff --git a/.nojekyll b/.nojekyll index 06c9c10..d0b972e 100644 --- a/.nojekyll +++ b/.nojekyll @@ -1 +1 @@ -9eefac16 \ No newline at end of file +6517410d \ No newline at end of file diff --git a/01-introduccion.html b/01-introduccion.html index 69344c7..4e8a25c 100644 --- a/01-introduccion.html +++ b/01-introduccion.html @@ -2,7 +2,7 @@ - + @@ -22,7 +22,7 @@ } /* CSS for syntax highlighting */ pre > code.sourceCode { white-space: pre; position: relative; } -pre > code.sourceCode > span { display: inline-block; line-height: 1.25; } +pre > code.sourceCode > span { line-height: 1.25; } pre > code.sourceCode > span:empty { height: 1.2em; } .sourceCode { overflow: visible; } code.sourceCode > span { color: inherit; text-decoration: inherit; } @@ -58,6 +58,7 @@ div.csl-bib-body { } div.csl-entry { clear: both; + margin-bottom: 0em; } .hanging-indent div.csl-entry { margin-left:2em; @@ -100,7 +101,13 @@ "collapse-after": 3, "panel-placement": "start", "type": "textbox", - "limit": 20, + "limit": 50, + "keyboard-shortcut": [ + "f", + "/", + "s" + ], + "show-item-context": false, "language": { "search-no-results-text": "Sin resultados", "search-matching-documents-text": "documentos encontrados", @@ -109,12 +116,12 @@ "search-more-match-text": "resultado adicional en este documento", "search-more-matches-text": "resultados adicionales en este documento", "search-clear-button-title": "Borrar", + "search-text-placeholder": "", "search-detached-cancel-button-title": "Cancelar", "search-submit-button-title": "Enviar", "search-label": "Buscar" } } - @@ -125,6 +132,33 @@ + + @@ -133,12 +167,12 @@
+

Este es un curso de modelación bayesiana aplicada, que se concentra en plantear y resolver problemas aplicados usando estadística. Para hacer esto necesitamos entender tres componentes:

  1. El contexto del problema, o conocimiento del área: esto es conocimiento científico o de negocios y cómo es que observamos o medimos el fenómeno que nos interesa.

  2. @@ -294,28 +330,18 @@

    Ejemp A -grandes -mejora - - -B chicos mejora - + A grandes mejora - -B -chicos -mejora - B chicos -mejora +sin_mejora B @@ -330,16 +356,26 @@

    Ejemp A grandes -mejora +sin_mejora +B +chicos +mejora + + A grandes +sin_mejora + + +A +chicos mejora -B -chicos +A +grandes mejora @@ -566,7 +602,7 @@

    Ejemp

    Las explicaciones no son tan simples y, otra vez, interviene el comportamiento de doctores, tratamientos, y distintos tipos de padecimientos.

    Podemos codificar la información causal con un diagrama:

    -
    +
    Código
    grViz("
     digraph {
    @@ -584,8 +620,8 @@ 

    Ejemp ", width = 200, height = 50)

    -
    - +
    +

    Es decir, el tamaño de los cálculos es una causa común de tratamiento (T) y resultado (M). Veremos más adelante que la decisión de condicionar a el tipo de cálculos proviene de un análisis relativamente simple de este diagrama causal, independientemente de los métodos que usemos para estimar las proporciones de interés (en este ejemplo, examinar las tablas cruzadas es equivalente a hacer estimaciones de máxima verosimlitud).

    @@ -684,7 +720,7 @@

    Eje

    Nuestros supuestos causales podemos mostrarlos con el siguiente diagrama:

    -
    +
    Código
    grViz("
     digraph {
    @@ -702,8 +738,8 @@ 

    Eje ", width = 200, height = 50)

    -
    - +
    +

    Nótese que el análisis más apropiado no está en los datos: en ambos casos la tabla de datos es exactamente la misma. Los supuestos acerca del proceso que genera los datos sin embargo nos lleva a respuestas opuestas.

    @@ -1016,7 +1052,7 @@

    -
    Ejemplo de proceso de decisión para procedimientos estadísticos
    +
    Ejemplo de proceso de decisión para procedimientos estadísticos

    Este enfoque puede ser confuso en un principio (¿cómo se relacionan todos estos procedimientos?), y también restringir nuestra capacidad para analizar datos: ¿qué hacemos cuando no se cumplen los supuestos de un procedimiento? Adicionalmente si no tenemos mucha experiencia, la manera en que fallan estas herramientas puede ser poco intuitiva y difícil de descubrir.

    @@ -1044,7 +1080,7 @@

    <

    -
    Gelman et al, Bayesian Workflow
    +
    Gelman et al, Bayesian Workflow
    @@ -1057,7 +1093,7 @@

    +
    Gelman, Andrew, Aki Vehtari, Daniel Simpson, Charles C. Margossian, Bob Carpenter, Yuling Yao, Lauren Kennedy, Jonah Gabry, Paul-Christian Bürkner, y Martin Modrák. 2020. «Bayesian Workflow». https://arxiv.org/abs/2011.01808.
    @@ -1150,10 +1186,9 @@

    2) { + container.appendChild(note.children[0].cloneNode(true)); + for (let i = 1; i < note.children.length; i++) { + const child = note.children[i]; + if (child.tagName === "P" && child.innerText === "") { + continue; + } else { + container.appendChild(child.cloneNode(true)); + break; + } + } + if (window.Quarto?.typesetMath) { + window.Quarto.typesetMath(container); + } + return container.innerHTML + } else { + if (window.Quarto?.typesetMath) { + window.Quarto.typesetMath(note); + } + return note.innerHTML; + } + } else { + // Remove any anchor links if they are present + const anchorLink = note.querySelector('a.anchorjs-link'); + if (anchorLink) { + anchorLink.remove(); + } + if (window.Quarto?.typesetMath) { + window.Quarto.typesetMath(note); + } + // TODO in 1.5, we should make sure this works without a callout special case + if (note.classList.contains("callout")) { + return note.outerHTML; + } else { + return note.innerHTML; + } + } + } + for (var i=0; i res.text()) + .then(html => { + const parser = new DOMParser(); + const htmlDoc = parser.parseFromString(html, "text/html"); + const note = htmlDoc.getElementById(id); + if (note !== null) { + const html = processXRef(id, note); + instance.setContent(html); + } + }).finally(() => { + instance.enable(); + instance.show(); + }); + } + } else { + // See if we can fetch a full url (with no hash to target) + // This is a special case and we should probably do some content thinning / targeting + fetch(url) + .then(res => res.text()) + .then(html => { + const parser = new DOMParser(); + const htmlDoc = parser.parseFromString(html, "text/html"); + const note = htmlDoc.querySelector('main.content'); + if (note !== null) { + // This should only happen for chapter cross references + // (since there is no id in the URL) + // remove the first header + if (note.children.length > 0 && note.children[0].tagName === "HEADER") { + note.children[0].remove(); + } + const html = processXRef(null, note); + instance.setContent(html); + } + }).finally(() => { + instance.enable(); + instance.show(); + }); + } + }, function(instance) { + }); } let selectedAnnoteEl; const selectorForAnnotation = ( cell, annotation) => { @@ -1220,6 +1383,7 @@

    { + elRect = undefined; + if (selectedAnnoteEl) { + selectCodeLines(selectedAnnoteEl); + } + }, 10) + ); + function throttle(fn, ms) { + let throttle = false; + let timer; + return (...args) => { + if(!throttle) { // first call gets through + fn.apply(this, args); + throttle = true; + } else { // all the others get throttled + if(timer) clearTimeout(timer); // cancel #2 + timer = setTimeout(() => { + fn.apply(this, args); + timer = throttle = false; + }, ms); + } + }; + } // Attach click handler to the DT const annoteDls = window.document.querySelectorAll('dt[data-target-cell]'); for (const annoteDlNode of annoteDls) { @@ -1306,12 +1496,12 @@

    @@ -1320,4 +1510,5 @@

    - + @@ -22,7 +22,7 @@ } /* CSS for syntax highlighting */ pre > code.sourceCode { white-space: pre; position: relative; } -pre > code.sourceCode > span { display: inline-block; line-height: 1.25; } +pre > code.sourceCode > span { line-height: 1.25; } pre > code.sourceCode > span:empty { height: 1.2em; } .sourceCode { overflow: visible; } code.sourceCode > span { color: inherit; text-decoration: inherit; } @@ -81,7 +81,13 @@ "collapse-after": 3, "panel-placement": "start", "type": "textbox", - "limit": 20, + "limit": 50, + "keyboard-shortcut": [ + "f", + "/", + "s" + ], + "show-item-context": false, "language": { "search-no-results-text": "Sin resultados", "search-matching-documents-text": "documentos encontrados", @@ -90,6 +96,7 @@ "search-more-match-text": "resultado adicional en este documento", "search-more-matches-text": "resultados adicionales en este documento", "search-clear-button-title": "Borrar", + "search-text-placeholder": "", "search-detached-cancel-button-title": "Cancelar", "search-submit-button-title": "Enviar", "search-label": "Buscar" @@ -103,6 +110,33 @@ + + @@ -111,12 +145,12 @@

    Y vemos que la diferencia entre las distribuciones es considerable. En primer lugar, la distribución con error de medición es más ancha (hay más incertidumbre). En segundo lugar, como estimador de el parámetro de interés, nuestro modelo que no considera el error parece dar estimaciones sesgadas hacia abajo. Esto es porque la prevalencia no es tan baja, y la sensibilidad de la prueba no es muy buena, de manera que con el modelo con error inferimos correctamente que hay más prevalencia que lo que indicaría la proporción de positivos en las pruebas.

    @@ -449,7 +501,7 @@

    \(Ref\) a los datos de referencia de “estándar de oro”.

    -
    +
    Código
    grViz("
     digraph {
    @@ -481,8 +533,8 @@ 

    ")#, width = 200, height = 50)

    -
    - +
    +

    Usando argumentos como los del modelo original, las distribuciones de esp y sens son beta y podemos incorporarlas en la simulación de la posterior. Nuestra nueva función para simular el proceso generativo es:

    @@ -598,7 +650,11 @@

    -

    +
    +
    +

    +
    +

    Y vemos que los datos son consistentes con el dato reportado por los autores (alrededor de 1.2%), pero que no podemos excluir valores de prevalencia muy bajos (por abajo de 0.3% por ejemplo). Por otro lado, también son consistentes valores muy altos de seroprevalencia, de manera que este estudio resultó ser poco informativo de la IFR del COVID.

    @@ -610,7 +666,11 @@

    -

    +
    +
    +

    +
    +

    La asociación entre estas dos cantidades es interesante porque conceptualmente (y desde punto de vista del modelo), no hay relación entre estas dos variables: su asociación aparece porque son causas que compiten para explicar una observación.

    @@ -700,10 +760,9 @@

    2) { + container.appendChild(note.children[0].cloneNode(true)); + for (let i = 1; i < note.children.length; i++) { + const child = note.children[i]; + if (child.tagName === "P" && child.innerText === "") { + continue; + } else { + container.appendChild(child.cloneNode(true)); + break; + } + } + if (window.Quarto?.typesetMath) { + window.Quarto.typesetMath(container); + } + return container.innerHTML + } else { + if (window.Quarto?.typesetMath) { + window.Quarto.typesetMath(note); + } + return note.innerHTML; + } + } else { + // Remove any anchor links if they are present + const anchorLink = note.querySelector('a.anchorjs-link'); + if (anchorLink) { + anchorLink.remove(); + } + if (window.Quarto?.typesetMath) { + window.Quarto.typesetMath(note); + } + // TODO in 1.5, we should make sure this works without a callout special case + if (note.classList.contains("callout")) { + return note.outerHTML; + } else { + return note.innerHTML; + } + } + } + for (var i=0; i res.text()) + .then(html => { + const parser = new DOMParser(); + const htmlDoc = parser.parseFromString(html, "text/html"); + const note = htmlDoc.getElementById(id); + if (note !== null) { + const html = processXRef(id, note); + instance.setContent(html); + } + }).finally(() => { + instance.enable(); + instance.show(); + }); + } + } else { + // See if we can fetch a full url (with no hash to target) + // This is a special case and we should probably do some content thinning / targeting + fetch(url) + .then(res => res.text()) + .then(html => { + const parser = new DOMParser(); + const htmlDoc = parser.parseFromString(html, "text/html"); + const note = htmlDoc.querySelector('main.content'); + if (note !== null) { + // This should only happen for chapter cross references + // (since there is no id in the URL) + // remove the first header + if (note.children.length > 0 && note.children[0].tagName === "HEADER") { + note.children[0].remove(); + } + const html = processXRef(null, note); + instance.setContent(html); + } + }).finally(() => { + instance.enable(); + instance.show(); + }); + } + }, function(instance) { + }); } let selectedAnnoteEl; const selectorForAnnotation = ( cell, annotation) => { @@ -770,6 +957,7 @@

    { + elRect = undefined; + if (selectedAnnoteEl) { + selectCodeLines(selectedAnnoteEl); + } + }, 10) + ); + function throttle(fn, ms) { + let throttle = false; + let timer; + return (...args) => { + if(!throttle) { // first call gets through + fn.apply(this, args); + throttle = true; + } else { // all the others get throttled + if(timer) clearTimeout(timer); // cancel #2 + timer = setTimeout(() => { + fn.apply(this, args); + timer = throttle = false; + }, ms); + } + }; + } // Attach click handler to the DT const annoteDls = window.document.querySelectorAll('dt[data-target-cell]'); for (const annoteDlNode of annoteDls) { @@ -856,12 +1070,12 @@

    @@ -870,4 +1084,5 @@

    - + @@ -22,7 +22,7 @@ } /* CSS for syntax highlighting */ pre > code.sourceCode { white-space: pre; position: relative; } -pre > code.sourceCode > span { display: inline-block; line-height: 1.25; } +pre > code.sourceCode > span { line-height: 1.25; } pre > code.sourceCode > span:empty { height: 1.2em; } .sourceCode { overflow: visible; } code.sourceCode > span { color: inherit; text-decoration: inherit; } @@ -81,7 +81,13 @@ "collapse-after": 3, "panel-placement": "start", "type": "textbox", - "limit": 20, + "limit": 50, + "keyboard-shortcut": [ + "f", + "/", + "s" + ], + "show-item-context": false, "language": { "search-no-results-text": "Sin resultados", "search-matching-documents-text": "documentos encontrados", @@ -90,12 +96,12 @@ "search-more-match-text": "resultado adicional en este documento", "search-more-matches-text": "resultados adicionales en este documento", "search-clear-button-title": "Borrar", + "search-text-placeholder": "", "search-detached-cancel-button-title": "Cancelar", "search-submit-button-title": "Enviar", "search-label": "Buscar" } } - @@ -106,6 +112,33 @@ + + @@ -114,12 +147,12 @@