{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Implementation of MLE for variate-covariate models {#sec-variate-covariate-implementation}\n", "\n", "[Dataset download](https://s3.amazonaws.com/bebi103.caltech.edu/data/good_invitro_droplet_data.csv)\n", "\n", "\n", "
" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "nbsphinx": "hidden", "tags": [] }, "outputs": [], "source": [ "#| code-fold: true\n", "\n", "# Colab setup ------------------\n", "import os, sys, subprocess\n", "if \"google.colab\" in sys.modules:\n", " cmd = \"pip install --upgrade polars iqplot bebi103 watermark\"\n", " process = subprocess.Popen(cmd.split(), stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n", " stdout, stderr = process.communicate()\n", " data_path = \"https://s3.amazonaws.com/bebi103.caltech.edu/data/\"\n", "else:\n", " data_path = \"../data/\"\n", "# ------------------------------" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/html": [ " \n", "
\n", " \n", " Loading BokehJS ...\n", "
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": "'use strict';\n(function(root) {\n function now() {\n return new Date();\n }\n\n const force = true;\n\n if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\nconst JS_MIME_TYPE = 'application/javascript';\n const HTML_MIME_TYPE = 'text/html';\n const EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n const CLASS_NAME = 'output_bokeh rendered_html';\n\n /**\n * Render data to the DOM node\n */\n function render(props, node) {\n const script = document.createElement(\"script\");\n node.appendChild(script);\n }\n\n /**\n * Handle when an output is cleared or removed\n */\n function handleClearOutput(event, handle) {\n function drop(id) {\n const view = Bokeh.index.get_by_id(id)\n if (view != null) {\n view.model.document.clear()\n Bokeh.index.delete(view)\n }\n }\n\n const cell = handle.cell;\n\n const id = cell.output_area._bokeh_element_id;\n const server_id = cell.output_area._bokeh_server_id;\n\n // Clean up Bokeh references\n if (id != null) {\n drop(id)\n }\n\n if (server_id !== undefined) {\n // Clean up Bokeh references\n const cmd_clean = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n cell.notebook.kernel.execute(cmd_clean, {\n iopub: {\n output: function(msg) {\n const id = msg.content.text.trim()\n drop(id)\n }\n }\n });\n // Destroy server and session\n const cmd_destroy = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n cell.notebook.kernel.execute(cmd_destroy);\n }\n }\n\n /**\n * Handle when a new output is added\n */\n function handleAddOutput(event, handle) {\n const output_area = handle.output_area;\n const output = handle.output;\n\n // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n if ((output.output_type != \"display_data\") || (!Object.prototype.hasOwnProperty.call(output.data, EXEC_MIME_TYPE))) {\n return\n }\n\n const toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n\n if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n // store reference to embed id on output_area\n output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n }\n if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n const bk_div = document.createElement(\"div\");\n bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n const script_attrs = bk_div.children[0].attributes;\n for (let i = 0; i < script_attrs.length; i++) {\n toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n toinsert[toinsert.length - 1].firstChild.textContent = bk_div.children[0].textContent\n }\n // store reference to server id on output_area\n output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n }\n }\n\n function register_renderer(events, OutputArea) {\n\n function append_mime(data, metadata, element) {\n // create a DOM node to render to\n const toinsert = this.create_output_subarea(\n metadata,\n CLASS_NAME,\n EXEC_MIME_TYPE\n );\n this.keyboard_manager.register_events(toinsert);\n // Render to node\n const props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n render(props, toinsert[toinsert.length - 1]);\n element.append(toinsert);\n return toinsert\n }\n\n /* Handle when an output is cleared or removed */\n events.on('clear_output.CodeCell', handleClearOutput);\n events.on('delete.Cell', handleClearOutput);\n\n /* Handle when a new output is added */\n events.on('output_added.OutputArea', handleAddOutput);\n\n /**\n * Register the mime type and append_mime function with output_area\n */\n OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n /* Is output safe? */\n safe: true,\n /* Index of renderer in `output_area.display_order` */\n index: 0\n });\n }\n\n // register the mime type if in Jupyter Notebook environment and previously unregistered\n if (root.Jupyter !== undefined) {\n const events = require('base/js/events');\n const OutputArea = require('notebook/js/outputarea').OutputArea;\n\n if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n register_renderer(events, OutputArea);\n }\n }\n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n const NB_LOAD_WARNING = {'data': {'text/html':\n \"
\\n\"+\n \"

\\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"

\\n\"+\n \"\\n\"+\n \"\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"\\n\"+\n \"
\"}};\n\n function display_loaded(error = null) {\n const el = document.getElementById(\"f3ddcbf7-1279-45d3-b470-e0832e4ef9ed\");\n if (el != null) {\n const html = (() => {\n if (typeof root.Bokeh === \"undefined\") {\n if (error == null) {\n return \"BokehJS is loading ...\";\n } else {\n return \"BokehJS failed to load.\";\n }\n } else {\n const prefix = `BokehJS ${root.Bokeh.version}`;\n if (error == null) {\n return `${prefix} successfully loaded.`;\n } else {\n return `${prefix} encountered errors while loading and may not function as expected.`;\n }\n }\n })();\n el.innerHTML = html;\n\n if (error != null) {\n const wrapper = document.createElement(\"div\");\n wrapper.style.overflow = \"auto\";\n wrapper.style.height = \"5em\";\n wrapper.style.resize = \"vertical\";\n const content = document.createElement(\"div\");\n content.style.fontFamily = \"monospace\";\n content.style.whiteSpace = \"pre-wrap\";\n content.style.backgroundColor = \"rgb(255, 221, 221)\";\n content.textContent = error.stack ?? error.toString();\n wrapper.append(content);\n el.append(wrapper);\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(() => display_loaded(error), 100);\n }\n }\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error(url) {\n console.error(\"failed to load \" + url);\n }\n\n for (let i = 0; i < css_urls.length; i++) {\n const url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n for (let i = 0; i < js_urls.length; i++) {\n const url = js_urls[i];\n const element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-3.7.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.7.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.7.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.7.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-3.7.3.min.js\"];\n const css_urls = [];\n\n const inline_js = [ function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\nfunction(Bokeh) {\n }\n ];\n\n function run_inline_js() {\n if (root.Bokeh !== undefined || force === true) {\n try {\n for (let i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\n\n } catch (error) {display_loaded(error);throw error;\n }if (force === true) {\n display_loaded();\n }} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n const cell = $(document.getElementById(\"f3ddcbf7-1279-45d3-b470-e0832e4ef9ed\")).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));", "application/vnd.bokehjs_load.v0+json": "" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import warnings\n", "\n", "import tqdm\n", "\n", "import numpy as np\n", "import polars as pl\n", "import scipy.optimize\n", "import scipy.stats as st\n", "\n", "import iqplot\n", "import bebi103\n", "\n", "import bokeh.io\n", "bokeh.io.output_notebook()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "We now proceed to do maximum likelihood estimation for the parameters of the second model for spindle length.\n", "\n", "\\begin{align}\n", "&\\mu_i = \\frac{\\gamma d_i}{\\left(1+(\\gamma d_i/\\phi)^3\\right)^{\\frac{1}{3}}}, \\\\[1em]\n", "&l_i \\sim \\text{Norm}(\\mu_i, \\sigma) \\;\\forall i,\n", "\\end{align}\n", "\n", "The parameters for this model are $\\gamma$, $\\phi$, and $\\sigma$.\n", "\n", "Finally, before we being doing MLE, as a reminder, we will load in and plot the data." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": "(function(root) {\n function embed_document(root) {\n const docs_json = {\"baf1fcdd-4119-4330-ab2d-27ae42529aa4\":{\"version\":\"3.7.3\",\"title\":\"Bokeh Application\",\"roots\":[{\"type\":\"object\",\"name\":\"Figure\",\"id\":\"p1003\",\"attributes\":{\"x_range\":{\"type\":\"object\",\"name\":\"Range1d\",\"id\":\"p1012\",\"attributes\":{\"end\":250}},\"y_range\":{\"type\":\"object\",\"name\":\"Range1d\",\"id\":\"p1013\",\"attributes\":{\"end\":50}},\"x_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1014\"},\"y_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1015\"},\"title\":{\"type\":\"object\",\"name\":\"Title\",\"id\":\"p1010\"},\"renderers\":[{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1048\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1039\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1040\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1041\"},\"data\":{\"type\":\"map\",\"entries\":[[\"Droplet Diameter (um)\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"mpmZmZkZO0AzMzMzMzM8QGZmZmZmZj1AAAAAAAAAP0AAAAAAAAA/QAAAAAAAgD9AMzMzMzOzP0AAAAAAAABAQAAAAAAAAEBAAAAAAAAAQEBmZmZmZiZAQGZmZmZmpkBAZmZmZmamQEBmZmZmZqZAQAAAAAAAwEBAAAAAAADAQEBmZmZmZuZAQGZmZmZm5kBAAAAAAAAAQUBmZmZmZiZBQGZmZmZmJkFAzczMzMxMQUDNzMzMzExBQGZmZmZmZkFAZmZmZmZmQUDNzMzMzIxBQM3MzMzMjEFAZmZmZmamQUDNzMzMzMxBQGZmZmZm5kFAZmZmZmbmQUBmZmZmZuZBQM3MzMzMDEJAzczMzMwMQkAzMzMzMzNCQM3MzMzMTEJAzczMzMxMQkAzMzMzM3NCQDMzMzMzc0JAMzMzMzNzQkAzMzMzM3NCQDMzMzMzc0JAMzMzMzNzQkDNzMzMzIxCQDMzMzMzs0JAMzMzMzOzQkAzMzMzM7NCQDMzMzMzs0JAzczMzMzMQkDNzMzMzMxCQDMzMzMz80JAMzMzMzPzQkAzMzMzM/NCQDMzMzMz80JAzczMzMwMQ0DNzMzMzAxDQDMzMzMzM0NAMzMzMzMzQ0AzMzMzMzNDQJqZmZmZWUNAmpmZmZlZQ0CamZmZmVlDQJqZmZmZWUNAMzMzMzNzQ0AzMzMzM3NDQDMzMzMzc0NAMzMzMzNzQ0CamZmZmZlDQDMzMzMzs0NAmpmZmZnZQ0CamZmZmdlDQJqZmZmZ2UNAmpmZmZnZQ0AzMzMzM/NDQDMzMzMz80NAmpmZmZkZRECamZmZmRlEQJqZmZmZGURAmpmZmZkZRECamZmZmRlEQDMzMzMzM0RAMzMzMzMzREAzMzMzMzNEQJqZmZmZWURAAAAAAACAREAAAAAAAIBEQJqZmZmZmURAmpmZmZmZRECamZmZmZlEQAAAAAAAwERAAAAAAADAREAAAAAAAMBEQJqZmZmZ2URAmpmZmZnZRECamZmZmdlEQJqZmZmZ2URAMzMzMzPzREAAAAAAAABFQAAAAAAAAEVAAAAAAAAARUDNzMzMzAxFQJqZmZmZGUVAmpmZmZkZRUAzMzMzMzNFQAAAAAAAQEVAAAAAAABARUAAAAAAAEBFQM3MzMzMTEVAZmZmZmZmRUBmZmZmZmZFQGZmZmZmZkVAZmZmZmZmRUBmZmZmZmZFQGZmZmZmZkVAZmZmZmZmRUBmZmZmZmZFQDMzMzMzc0VAAAAAAACARUAAAAAAAIBFQAAAAAAAgEVAAAAAAACARUDNzMzMzIxFQGZmZmZmpkVAZmZmZmamRUAzMzMzM7NFQAAAAAAAwEVAzczMzMzMRUBmZmZmZuZFQGZmZmZm5kVAZmZmZmbmRUBmZmZmZuZFQGZmZmZm5kVAZmZmZmbmRUAAAAAAAABGQAAAAAAAAEZAAAAAAAAARkAAAAAAAABGQAAAAAAAAEZAzczMzMwMRkBmZmZmZiZGQGZmZmZmJkZAZmZmZmYmRkAAAAAAAEBGQAAAAAAAQEZAAAAAAABARkAAAAAAAEBGQAAAAAAAQEZAmpmZmZlZRkBmZmZmZmZGQGZmZmZmZkZAZmZmZmZmRkBmZmZmZmZGQM3MzMzMjEZAzczMzMyMRkDNzMzMzIxGQM3MzMzMjEZAZmZmZmamRkBmZmZmZqZGQGZmZmZmpkZAZmZmZmamRkBmZmZmZqZGQGZmZmZmpkZAZmZmZmamRkBmZmZmZqZGQGZmZmZmpkZAZmZmZmamRkDNzMzMzMxGQM3MzMzMzEZAzczMzMzMRkDNzMzMzMxGQM3MzMzMzEZAzczMzMzMRkDNzMzMzMxGQM3MzMzMzEZAzczMzMzMRkBmZmZmZuZGQGZmZmZm5kZAZmZmZmbmRkBmZmZmZuZGQGZmZmZm5kZAZmZmZmbmRkBmZmZmZuZGQM3MzMzMDEdAzczMzMwMR0DNzMzMzAxHQM3MzMzMDEdAzczMzMwMR0DNzMzMzAxHQM3MzMzMDEdAzczMzMwMR0DNzMzMzAxHQGZmZmZmJkdAZmZmZmYmR0BmZmZmZiZHQGZmZmZmJkdAZmZmZmYmR0BmZmZmZiZHQGZmZmZmJkdAZmZmZmYmR0BmZmZmZiZHQM3MzMzMTEdAzczMzMxMR0DNzMzMzExHQM3MzMzMTEdAzczMzMxMR0DNzMzMzExHQM3MzMzMTEdAZmZmZmZmR0BmZmZmZmZHQGZmZmZmZkdAZmZmZmZmR0BmZmZmZmZHQGZmZmZmZkdAZmZmZmZmR0BmZmZmZmZHQGZmZmZmZkdAzczMzMyMR0DNzMzMzIxHQM3MzMzMjEdAzczMzMyMR0DNzMzMzIxHQM3MzMzMjEdAzczMzMyMR0DNzMzMzIxHQM3MzMzMjEdAzczMzMyMR0AzMzMzM7NHQDMzMzMzs0dAMzMzMzOzR0AzMzMzM7NHQM3MzMzMzEdAzczMzMzMR0DNzMzMzMxHQM3MzMzMzEdAzczMzMzMR0DNzMzMzMxHQDMzMzMz80dAMzMzMzPzR0AzMzMzM/NHQDMzMzMz80dAMzMzMzPzR0DNzMzMzAxIQM3MzMzMDEhAzczMzMwMSEAzMzMzMzNIQDMzMzMzM0hAzczMzMxMSEDNzMzMzExIQDMzMzMzs0hAMzMzMzPzSEAzMzMzM/NIQDMzMzMzM0lAmpmZmZlZSUCamZmZmVlJQDMzMzMzc0lAMzMzMzNzSUAzMzMzM3NJQDMzMzMzc0lAmpmZmZmZSUAAAAAAAMBJQJqZmZmZ2UlAmpmZmZnZSUCamZmZmdlJQJqZmZmZGUpAmpmZmZkZSkAAAAAAAEBKQAAAAAAAQEpAAAAAAABASkAAAAAAAEBKQAAAAAAAQEpAmpmZmZlZSkCamZmZmVlKQJqZmZmZWUpAmpmZmZlZSkAAAAAAAIBKQAAAAAAAgEpAAAAAAACASkAAAAAAAIBKQAAAAAAAgEpAAAAAAACASkAAAAAAAIBKQAAAAAAAgEpAAAAAAACASkCamZmZmZlKQJqZmZmZmUpAAAAAAADASkBmZmZmZuZKQGZmZmZm5kpAZmZmZmbmSkAAAAAAAABLQAAAAAAAAEtAAAAAAAAAS0AAAAAAAABLQAAAAAAAAEtAZmZmZmYmS0BmZmZmZiZLQGZmZmZmJktAZmZmZmYmS0AAAAAAAEBLQAAAAAAAQEtAAAAAAABAS0BmZmZmZmZLQGZmZmZmZktAZmZmZmZmS0AAAAAAAIBLQAAAAAAAgEtAZmZmZmamS0BmZmZmZqZLQM3MzMzMzEtAzczMzMzMS0DNzMzMzMxLQM3MzMzMzEtAzczMzMzMS0DNzMzMzMxLQGZmZmZm5ktAZmZmZmbmS0DNzMzMzAxMQGZmZmZmJkxAZmZmZmYmTEDNzMzMzExMQGZmZmZmZkxAZmZmZmZmTEDNzMzMzIxMQM3MzMzMjExAzczMzMyMTEDNzMzMzIxMQGZmZmZmpkxAZmZmZmamTEBmZmZmZqZMQM3MzMzMzExAzczMzMzMTEDNzMzMzMxMQM3MzMzMzExAMzMzMzPzTEAzMzMzM/NMQDMzMzMz80xAzczMzMwMTUDNzMzMzAxNQM3MzMzMDE1AMzMzMzMzTUAzMzMzMzNNQDMzMzMzM01AzczMzMxMTUDNzMzMzExNQM3MzMzMTE1AzczMzMxMTUDNzMzMzExNQDMzMzMzc01AzczMzMyMTUDNzMzMzIxNQM3MzMzMjE1AzczMzMyMTUAzMzMzM7NNQDMzMzMzs01AMzMzMzOzTUDNzMzMzMxNQM3MzMzMzE1AzczMzMzMTUAzMzMzM/NNQJqZmZmZGU5AmpmZmZlZTkCamZmZmVlOQDMzMzMzc05AmpmZmZmZTkCamZmZmZlOQJqZmZmZmU5AAAAAAAAAT0AAAAAAAABPQAAAAAAAAE9AAAAAAAAAT0CamZmZmRlPQJqZmZmZGU9AAAAAAABAT0AAAAAAAEBPQJqZmZmZWU9AmpmZmZlZT0CamZmZmVlPQAAAAAAAgE9AAAAAAACAT0CamZmZmdlPQJqZmZmZ2U9AAAAAAAAAUEAzMzMzMxNQQDMzMzMzE1BAMzMzMzMTUEAzMzMzMxNQQDMzMzMzE1BAAAAAAAAgUEAAAAAAACBQQAAAAAAAIFBAAAAAAAAgUEAAAAAAACBQQAAAAAAAIFBAMzMzMzMzUEAzMzMzMzNQQDMzMzMzM1BAAAAAAABAUEAAAAAAAEBQQAAAAAAAQFBAAAAAAABAUEAAAAAAAEBQQAAAAAAAQFBAMzMzMzNTUEAzMzMzM1NQQDMzMzMzU1BAAAAAAABgUEAAAAAAAGBQQAAAAAAAYFBAAAAAAABgUEAAAAAAAGBQQDMzMzMzc1BAMzMzMzNzUEAzMzMzM3NQQDMzMzMzc1BAMzMzMzNzUEAzMzMzM3NQQDMzMzMzc1BAMzMzMzNzUEAAAAAAAIBQQAAAAAAAgFBAAAAAAACAUEAAAAAAAIBQQAAAAAAAgFBAAAAAAACAUEAAAAAAAIBQQDMzMzMzk1BAMzMzMzOTUEAzMzMzM5NQQDMzMzMzk1BAZmZmZmamUEBmZmZmZqZQQGZmZmZmplBAZmZmZmamUEBmZmZmZqZQQGZmZmZmplBAZmZmZmamUEBmZmZmZqZQQDMzMzMzs1BAMzMzMzOzUEAzMzMzM7NQQDMzMzMzs1BAMzMzMzOzUEAzMzMzM7NQQGZmZmZmxlBAZmZmZmbGUEBmZmZmZsZQQGZmZmZmxlBAZmZmZmbGUEAzMzMzM9NQQDMzMzMz01BAMzMzMzPTUEAzMzMzM9NQQDMzMzMz01BAZmZmZmbmUEBmZmZmZuZQQGZmZmZm5lBAZmZmZmbmUEBmZmZmZuZQQGZmZmZm5lBAZmZmZmbmUEBmZmZmZuZQQGZmZmZm5lBAZmZmZmbmUEBmZmZmZuZQQDMzMzMz81BAMzMzMzPzUEAzMzMzM/NQQDMzMzMz81BAMzMzMzPzUEAzMzMzM/NQQGZmZmZmBlFAZmZmZmYGUUBmZmZmZgZRQGZmZmZmBlFAZmZmZmYGUUBmZmZmZgZRQGZmZmZmBlFAZmZmZmYGUUBmZmZmZgZRQGZmZmZmBlFAZmZmZmYGUUCamZmZmRlRQJqZmZmZGVFAmpmZmZkZUUCamZmZmRlRQJqZmZmZGVFAmpmZmZkZUUCamZmZmRlRQGZmZmZmJlFAZmZmZmYmUUBmZmZmZiZRQGZmZmZmJlFAZmZmZmYmUUBmZmZmZiZRQGZmZmZmJlFAZmZmZmYmUUBmZmZmZiZRQJqZmZmZOVFAmpmZmZk5UUCamZmZmTlRQGZmZmZmRlFAZmZmZmZGUUBmZmZmZkZRQGZmZmZmRlFAZmZmZmZGUUBmZmZmZkZRQGZmZmZmRlFAZmZmZmZGUUBmZmZmZkZRQGZmZmZmRlFAmpmZmZlZUUCamZmZmVlRQJqZmZmZWVFAmpmZmZlZUUCamZmZmVlRQJqZmZmZWVFAmpmZmZlZUUCamZmZmVlRQJqZmZmZWVFAZmZmZmZmUUBmZmZmZmZRQGZmZmZmZlFAZmZmZmZmUUBmZmZmZmZRQGZmZmZmZlFAZmZmZmZmUUBmZmZmZmZRQGZmZmZmZlFAZmZmZmZmUUCamZmZmXlRQJqZmZmZeVFAmpmZmZl5UUCamZmZmXlRQJqZmZmZeVFAmpmZmZl5UUCamZmZmXlRQJqZmZmZeVFAmpmZmZl5UUBmZmZmZoZRQGZmZmZmhlFAZmZmZmaGUUBmZmZmZoZRQGZmZmZmhlFAZmZmZmaGUUBmZmZmZoZRQGZmZmZmhlFAmpmZmZmZUUCamZmZmZlRQJqZmZmZmVFAmpmZmZmZUUCamZmZmZlRQJqZmZmZmVFAmpmZmZmZUUCamZmZmZlRQM3MzMzMrFFAzczMzMysUUDNzMzMzKxRQM3MzMzMrFFAzczMzMysUUDNzMzMzKxRQM3MzMzMrFFAzczMzMysUUCamZmZmblRQJqZmZmZuVFAmpmZmZm5UUDNzMzMzMxRQM3MzMzMzFFAzczMzMzMUUDNzMzMzMxRQM3MzMzMzFFAzczMzMzMUUDNzMzMzMxRQJqZmZmZ2VFAmpmZmZnZUUCamZmZmdlRQJqZmZmZ2VFAmpmZmZnZUUCamZmZmdlRQM3MzMzM7FFAzczMzMzsUUDNzMzMzOxRQM3MzMzM7FFAmpmZmZn5UUCamZmZmflRQJqZmZmZ+VFAzczMzMwMUkDNzMzMzAxSQM3MzMzMDFJAzczMzMwMUkDNzMzMzAxSQM3MzMzMDFJAmpmZmZkZUkCamZmZmRlSQJqZmZmZGVJAmpmZmZkZUkCamZmZmRlSQM3MzMzMLFJAzczMzMwsUkAAAAAAAEBSQAAAAAAAQFJAAAAAAABAUkDNzMzMzExSQM3MzMzMTFJAzczMzMxMUkDNzMzMzExSQM3MzMzMTFJAAAAAAABgUkAAAAAAAGBSQAAAAAAAYFJAAAAAAABgUkAAAAAAAGBSQM3MzMzMbFJAAAAAAACAUkAAAAAAAIBSQAAAAAAAgFJAzczMzMyMUkAAAAAAAKBSQAAAAAAAoFJAMzMzMzOzUkAAAAAAAMBSQDMzMzMz81JAAAAAAAAAU0AAAAAAACBTQDMzMzMzM1NAMzMzMzNTU0AzMzMzM1NTQGZmZmZmZlNAZmZmZmZmU0AzMzMzM7NTQGZmZmZmxlNAmpmZmZkZVEDNzMzMzExUQJqZmZmZeVRAzczMzMyMVECamZmZmZlUQJqZmZmZmVRAAAAAAAAgVUAAAAAAAIBVQGZmZmZmBlZAZmZmZmbmVkCamZmZmflWQAAAAAAAgFdAzczMzMysV0AAAAAAACBYQAAAAAAAIFhAMzMzMzNTWEAAAAAAAGBYQDMzMzMzk1hAmpmZmZkZWUDNzMzMzKxZQJqZmZmZ+VlAmpmZmZl5XEDNzMzMzAxdQM3MzMzMLF1AAAAAAABgXUAAAAAAAMBdQGZmZmZmJl5AZmZmZmZGXkCamZmZmZleQJqZmZmZuV5AZmZmZmbGXkAzMzMzM2NgQJqZmZmZeWFAmpmZmZmJYUCamZmZmalhQAAAAAAAAGRAMzMzMzPDZEDNzMzMzDxnQAAAAAAA0GdAzczMzMysa0A=\"},\"shape\":[670],\"dtype\":\"float64\",\"order\":\"little\"}],[\"Droplet Volume (uL)\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"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\"},\"shape\":[670],\"dtype\":\"float64\",\"order\":\"little\"}],[\"Spindle Length (um)\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"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\"},\"shape\":[670],\"dtype\":\"float64\",\"order\":\"little\"}],[\"Spindle Width (um)\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"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\"},\"shape\":[670],\"dtype\":\"float64\",\"order\":\"little\"}],[\"Spindle Area (um2)\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"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\"},\"shape\":[670],\"dtype\":\"float64\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1049\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1050\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Scatter\",\"id\":\"p1045\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Droplet Diameter (um)\"},\"y\":{\"type\":\"field\",\"field\":\"Spindle Length (um)\"},\"line_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.3},\"fill_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.3},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.3}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Scatter\",\"id\":\"p1046\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Droplet Diameter (um)\"},\"y\":{\"type\":\"field\",\"field\":\"Spindle Length (um)\"},\"line_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1},\"fill_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.1},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Scatter\",\"id\":\"p1047\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Droplet Diameter (um)\"},\"y\":{\"type\":\"field\",\"field\":\"Spindle Length (um)\"},\"line_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2},\"fill_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.2},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}}],\"toolbar\":{\"type\":\"object\",\"name\":\"Toolbar\",\"id\":\"p1011\",\"attributes\":{\"tools\":[{\"type\":\"object\",\"name\":\"PanTool\",\"id\":\"p1026\"},{\"type\":\"object\",\"name\":\"WheelZoomTool\",\"id\":\"p1027\",\"attributes\":{\"renderers\":\"auto\"}},{\"type\":\"object\",\"name\":\"BoxZoomTool\",\"id\":\"p1028\",\"attributes\":{\"dimensions\":\"both\",\"overlay\":{\"type\":\"object\",\"name\":\"BoxAnnotation\",\"id\":\"p1029\",\"attributes\":{\"syncable\":false,\"line_color\":\"black\",\"line_alpha\":1.0,\"line_width\":2,\"line_dash\":[4,4],\"fill_color\":\"lightgrey\",\"fill_alpha\":0.5,\"level\":\"overlay\",\"visible\":false,\"left\":{\"type\":\"number\",\"value\":\"nan\"},\"right\":{\"type\":\"number\",\"value\":\"nan\"},\"top\":{\"type\":\"number\",\"value\":\"nan\"},\"bottom\":{\"type\":\"number\",\"value\":\"nan\"},\"left_units\":\"canvas\",\"right_units\":\"canvas\",\"top_units\":\"canvas\",\"bottom_units\":\"canvas\",\"handles\":{\"type\":\"object\",\"name\":\"BoxInteractionHandles\",\"id\":\"p1035\",\"attributes\":{\"all\":{\"type\":\"object\",\"name\":\"AreaVisuals\",\"id\":\"p1034\",\"attributes\":{\"fill_color\":\"white\",\"hover_fill_color\":\"lightgray\"}}}}}}}},{\"type\":\"object\",\"name\":\"SaveTool\",\"id\":\"p1036\"},{\"type\":\"object\",\"name\":\"ResetTool\",\"id\":\"p1037\"},{\"type\":\"object\",\"name\":\"HelpTool\",\"id\":\"p1038\"}]}},\"left\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1021\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1022\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1023\"},\"axis_label\":\"spindle length (\\u00b5m)\",\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1024\"}}}],\"below\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1016\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1017\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1018\"},\"axis_label\":\"droplet diameter (\\u00b5m)\",\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1019\"}}}],\"center\":[{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1020\",\"attributes\":{\"axis\":{\"id\":\"p1016\"}}},{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1025\",\"attributes\":{\"dimension\":1,\"axis\":{\"id\":\"p1021\"}}}],\"frame_width\":400,\"frame_height\":300}}]}};\n const render_items = [{\"docid\":\"baf1fcdd-4119-4330-ab2d-27ae42529aa4\",\"roots\":{\"p1003\":\"d467fb85-55e5-4f3b-a4e6-6947b6787a42\"},\"root_ids\":[\"p1003\"]}];\n void root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n }\n if (root.Bokeh !== undefined) {\n embed_document(root);\n } else {\n let attempts = 0;\n const timer = setInterval(function(root) {\n if (root.Bokeh !== undefined) {\n clearInterval(timer);\n embed_document(root);\n } else {\n attempts++;\n if (attempts > 100) {\n clearInterval(timer);\n console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n }\n }\n }, 10, root)\n }\n})(window);", "application/vnd.bokehjs_exec.v0+json": "" }, "metadata": { "application/vnd.bokehjs_exec.v0+json": { "id": "p1003" } }, "output_type": "display_data" } ], "source": [ "df = pl.read_csv(os.path.join(data_path, 'good_invitro_droplet_data.csv'), comment_prefix='#')\n", "\n", "p = bokeh.plotting.figure(\n", " frame_height=300,\n", " frame_width=400,\n", " x_axis_label=\"droplet diameter (µm)\",\n", " y_axis_label=\"spindle length (µm)\",\n", " x_range=[0, 250],\n", " y_range=[0, 50],\n", ")\n", "\n", "p.scatter(\n", " source=df.to_dict(),\n", " x=\"Droplet Diameter (um)\",\n", " y=\"Spindle Length (um)\",\n", " alpha=0.3,\n", ")\n", "\n", "bokeh.io.show(p)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It is also useful to extract the data sets as Numpy arrays for speed in the MLE and bootstrap calculations." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "d = df['Droplet Diameter (um)'].to_numpy()\n", "ell = df['Spindle Length (um)'].to_numpy()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Performing MLE by direct numerical optimization\n", "\n", "We can take the same approach as we did with the mRNA counts from the smFISH experiments. We write a function for the log likelihood and then use numerical optimization to find the parameters.\n", "\n", "The joint probability density function for the data set is the product of the probability densities of Normals. Therefore, the log likelihood is the *sum* of *log* probability densities of Normals. We can code that up using the convenient functions in the `scipy.stats` module." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "def theor_spindle_length(gamma, phi, d):\n", " \"\"\"Compute spindle length using mathematical model\"\"\"\n", " return gamma * d / np.cbrt(1 + (gamma * d / phi)**3)\n", " \n", " \n", "def log_likelihood(params, d, ell):\n", " \"\"\"Log likelihood of spindle length model.\"\"\"\n", " gamma, phi, sigma = params\n", " \n", " if gamma <= 0 or gamma > 1 or phi <= 0:\n", " return -np.inf\n", "\n", " mu = theor_spindle_length(gamma, phi, d)\n", "\n", " return np.sum(st.norm.logpdf(ell, mu, sigma))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In looking at the code for the log likelihood, the convenience of the `scipy.stats` module is clear. We more or less code up the model as we would say it!\n", "\n", "We can now code up the MLE calculation. For our initial guesses, we can look at the data an make estimates. The initial slope of the $l$ vs. $d$ curve is about one-half, so we will guess an initial value of $\\gamma$ of 0.5. The plateau seems to be around 40 µm, so we will guess $\\phi = 40$ µm. Eyeballing the standard deviation in the data points, I would guess it is about 5 µm." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "def spindle_mle(d, ell):\n", " \"\"\"Compute MLE for parameters in spindle length model.\"\"\"\n", " with warnings.catch_warnings():\n", " warnings.simplefilter(\"ignore\")\n", "\n", " res = scipy.optimize.minimize(\n", " fun=lambda params, d, ell: -log_likelihood(params, d, ell),\n", " x0=np.array([0.5, 35, 5]),\n", " args=(d, ell),\n", " method='Powell'\n", " )\n", "\n", " if res.success:\n", " return res.x\n", " else:\n", " raise RuntimeError('Convergence failed with message', res.message)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's run the calculation to get MLEs for the parameters." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 0.86047455, 38.23124995, 3.75342168])" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mle_params = spindle_mle(d, ell)\n", "\n", "mle_params" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can take a quick look as to how the theoretical curve might look with respect to the data." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": "(function(root) {\n function embed_document(root) {\n const docs_json = {\"4bd76f12-01f8-4915-a6d6-d2fdc64ca41d\":{\"version\":\"3.7.3\",\"title\":\"Bokeh Application\",\"roots\":[{\"type\":\"object\",\"name\":\"Figure\",\"id\":\"p1003\",\"attributes\":{\"x_range\":{\"type\":\"object\",\"name\":\"Range1d\",\"id\":\"p1012\",\"attributes\":{\"end\":250}},\"y_range\":{\"type\":\"object\",\"name\":\"Range1d\",\"id\":\"p1013\",\"attributes\":{\"end\":50}},\"x_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1014\"},\"y_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1015\"},\"title\":{\"type\":\"object\",\"name\":\"Title\",\"id\":\"p1010\"},\"renderers\":[{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1048\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1039\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1040\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1041\"},\"data\":{\"type\":\"map\",\"entries\":[[\"Droplet Diameter (um)\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"mpmZmZkZO0AzMzMzMzM8QGZmZmZmZj1AAAAAAAAAP0AAAAAAAAA/QAAAAAAAgD9AMzMzMzOzP0AAAAAAAABAQAAAAAAAAEBAAAAAAAAAQEBmZmZmZiZAQGZmZmZmpkBAZmZmZmamQEBmZmZmZqZAQAAAAAAAwEBAAAAAAADAQEBmZmZmZuZAQGZmZmZm5kBAAAAAAAAAQUBmZmZmZiZBQGZmZmZmJkFAzczMzMxMQUDNzMzMzExBQGZmZmZmZkFAZmZmZmZmQUDNzMzMzIxBQM3MzMzMjEFAZmZmZmamQUDNzMzMzMxBQGZmZmZm5kFAZmZmZmbmQUBmZmZmZuZBQM3MzMzMDEJAzczMzMwMQkAzMzMzMzNCQM3MzMzMTEJAzczMzMxMQkAzMzMzM3NCQDMzMzMzc0JAMzMzMzNzQkAzMzMzM3NCQDMzMzMzc0JAMzMzMzNzQkDNzMzMzIxCQDMzMzMzs0JAMzMzMzOzQkAzMzMzM7NCQDMzMzMzs0JAzczMzMzMQkDNzMzMzMxCQDMzMzMz80JAMzMzMzPzQkAzMzMzM/NCQDMzMzMz80JAzczMzMwMQ0DNzMzMzAxDQDMzMzMzM0NAMzMzMzMzQ0AzMzMzMzNDQJqZmZmZWUNAmpmZmZlZQ0CamZmZmVlDQJqZmZmZWUNAMzMzMzNzQ0AzMzMzM3NDQDMzMzMzc0NAMzMzMzNzQ0CamZmZmZlDQDMzMzMzs0NAmpmZmZnZQ0CamZmZmdlDQJqZmZmZ2UNAmpmZmZnZQ0AzMzMzM/NDQDMzMzMz80NAmpmZmZkZRECamZmZmRlEQJqZmZmZGURAmpmZmZkZRECamZmZmRlEQDMzMzMzM0RAMzMzMzMzREAzMzMzMzNEQJqZmZmZWURAAAAAAACAREAAAAAAAIBEQJqZmZmZmURAmpmZmZmZRECamZmZmZlEQAAAAAAAwERAAAAAAADAREAAAAAAAMBEQJqZmZmZ2URAmpmZmZnZRECamZmZmdlEQJqZmZmZ2URAMzMzMzPzREAAAAAAAABFQAAAAAAAAEVAAAAAAAAARUDNzMzMzAxFQJqZmZmZGUVAmpmZmZkZRUAzMzMzMzNFQAAAAAAAQEVAAAAAAABARUAAAAAAAEBFQM3MzMzMTEVAZmZmZmZmRUBmZmZmZmZFQGZmZmZmZkVAZmZmZmZmRUBmZmZmZmZFQGZmZmZmZkVAZmZmZmZmRUBmZmZmZmZFQDMzMzMzc0VAAAAAAACARUAAAAAAAIBFQAAAAAAAgEVAAAAAAACARUDNzMzMzIxFQGZmZmZmpkVAZmZmZmamRUAzMzMzM7NFQAAAAAAAwEVAzczMzMzMRUBmZmZmZuZFQGZmZmZm5kVAZmZmZmbmRUBmZmZmZuZFQGZmZmZm5kVAZmZmZmbmRUAAAAAAAABGQAAAAAAAAEZAAAAAAAAARkAAAAAAAABGQAAAAAAAAEZAzczMzMwMRkBmZmZmZiZGQGZmZmZmJkZAZmZmZmYmRkAAAAAAAEBGQAAAAAAAQEZAAAAAAABARkAAAAAAAEBGQAAAAAAAQEZAmpmZmZlZRkBmZmZmZmZGQGZmZmZmZkZAZmZmZmZmRkBmZmZmZmZGQM3MzMzMjEZAzczMzMyMRkDNzMzMzIxGQM3MzMzMjEZAZmZmZmamRkBmZmZmZqZGQGZmZmZmpkZAZmZmZmamRkBmZmZmZqZGQGZmZmZmpkZAZmZmZmamRkBmZmZmZqZGQGZmZmZmpkZAZmZmZmamRkDNzMzMzMxGQM3MzMzMzEZAzczMzMzMRkDNzMzMzMxGQM3MzMzMzEZAzczMzMzMRkDNzMzMzMxGQM3MzMzMzEZAzczMzMzMRkBmZmZmZuZGQGZmZmZm5kZAZmZmZmbmRkBmZmZmZuZGQGZmZmZm5kZAZmZmZmbmRkBmZmZmZuZGQM3MzMzMDEdAzczMzMwMR0DNzMzMzAxHQM3MzMzMDEdAzczMzMwMR0DNzMzMzAxHQM3MzMzMDEdAzczMzMwMR0DNzMzMzAxHQGZmZmZmJkdAZmZmZmYmR0BmZmZmZiZHQGZmZmZmJkdAZmZmZmYmR0BmZmZmZiZHQGZmZmZmJkdAZmZmZmYmR0BmZmZmZiZHQM3MzMzMTEdAzczMzMxMR0DNzMzMzExHQM3MzMzMTEdAzczMzMxMR0DNzMzMzExHQM3MzMzMTEdAZmZmZmZmR0BmZmZmZmZHQGZmZmZmZkdAZmZmZmZmR0BmZmZmZmZHQGZmZmZmZkdAZmZmZmZmR0BmZmZmZmZHQGZmZmZmZkdAzczMzMyMR0DNzMzMzIxHQM3MzMzMjEdAzczMzMyMR0DNzMzMzIxHQM3MzMzMjEdAzczMzMyMR0DNzMzMzIxHQM3MzMzMjEdAzczMzMyMR0AzMzMzM7NHQDMzMzMzs0dAMzMzMzOzR0AzMzMzM7NHQM3MzMzMzEdAzczMzMzMR0DNzMzMzMxHQM3MzMzMzEdAzczMzMzMR0DNzMzMzMxHQDMzMzMz80dAMzMzMzPzR0AzMzMzM/NHQDMzMzMz80dAMzMzMzPzR0DNzMzMzAxIQM3MzMzMDEhAzczMzMwMSEAzMzMzMzNIQDMzMzMzM0hAzczMzMxMSEDNzMzMzExIQDMzMzMzs0hAMzMzMzPzSEAzMzMzM/NIQDMzMzMzM0lAmpmZmZlZSUCamZmZmVlJQDMzMzMzc0lAMzMzMzNzSUAzMzMzM3NJQDMzMzMzc0lAmpmZmZmZSUAAAAAAAMBJQJqZmZmZ2UlAmpmZmZnZSUCamZmZmdlJQJqZmZmZGUpAmpmZmZkZSkAAAAAAAEBKQAAAAAAAQEpAAAAAAABASkAAAAAAAEBKQAAAAAAAQEpAmpmZmZlZSkCamZmZmVlKQJqZmZmZWUpAmpmZmZlZSkAAAAAAAIBKQAAAAAAAgEpAAAAAAACASkAAAAAAAIBKQAAAAAAAgEpAAAAAAACASkAAAAAAAIBKQAAAAAAAgEpAAAAAAACASkCamZmZmZlKQJqZmZmZmUpAAAAAAADASkBmZmZmZuZKQGZmZmZm5kpAZmZmZmbmSkAAAAAAAABLQAAAAAAAAEtAAAAAAAAAS0AAAAAAAABLQAAAAAAAAEtAZmZmZmYmS0BmZmZmZiZLQGZmZmZmJktAZmZmZmYmS0AAAAAAAEBLQAAAAAAAQEtAAAAAAABAS0BmZmZmZmZLQGZmZmZmZktAZmZmZmZmS0AAAAAAAIBLQAAAAAAAgEtAZmZmZmamS0BmZmZmZqZLQM3MzMzMzEtAzczMzMzMS0DNzMzMzMxLQM3MzMzMzEtAzczMzMzMS0DNzMzMzMxLQGZmZmZm5ktAZmZmZmbmS0DNzMzMzAxMQGZmZmZmJkxAZmZmZmYmTEDNzMzMzExMQGZmZmZmZkxAZmZmZmZmTEDNzMzMzIxMQM3MzMzMjExAzczMzMyMTEDNzMzMzIxMQGZmZmZmpkxAZmZmZmamTEBmZmZmZqZMQM3MzMzMzExAzczMzMzMTEDNzMzMzMxMQM3MzMzMzExAMzMzMzPzTEAzMzMzM/NMQDMzMzMz80xAzczMzMwMTUDNzMzMzAxNQM3MzMzMDE1AMzMzMzMzTUAzMzMzMzNNQDMzMzMzM01AzczMzMxMTUDNzMzMzExNQM3MzMzMTE1AzczMzMxMTUDNzMzMzExNQDMzMzMzc01AzczMzMyMTUDNzMzMzIxNQM3MzMzMjE1AzczMzMyMTUAzMzMzM7NNQDMzMzMzs01AMzMzMzOzTUDNzMzMzMxNQM3MzMzMzE1AzczMzMzMTUAzMzMzM/NNQJqZmZmZGU5AmpmZmZlZTkCamZmZmVlOQDMzMzMzc05AmpmZmZmZTkCamZmZmZlOQJqZmZmZmU5AAAAAAAAAT0AAAAAAAABPQAAAAAAAAE9AAAAAAAAAT0CamZmZmRlPQJqZmZmZGU9AAAAAAABAT0AAAAAAAEBPQJqZmZmZWU9AmpmZmZlZT0CamZmZmVlPQAAAAAAAgE9AAAAAAACAT0CamZmZmdlPQJqZmZmZ2U9AAAAAAAAAUEAzMzMzMxNQQDMzMzMzE1BAMzMzMzMTUEAzMzMzMxNQQDMzMzMzE1BAAAAAAAAgUEAAAAAAACBQQAAAAAAAIFBAAAAAAAAgUEAAAAAAACBQQAAAAAAAIFBAMzMzMzMzUEAzMzMzMzNQQDMzMzMzM1BAAAAAAABAUEAAAAAAAEBQQAAAAAAAQFBAAAAAAABAUEAAAAAAAEBQQAAAAAAAQFBAMzMzMzNTUEAzMzMzM1NQQDMzMzMzU1BAAAAAAABgUEAAAAAAAGBQQAAAAAAAYFBAAAAAAABgUEAAAAAAAGBQQDMzMzMzc1BAMzMzMzNzUEAzMzMzM3NQQDMzMzMzc1BAMzMzMzNzUEAzMzMzM3NQQDMzMzMzc1BAMzMzMzNzUEAAAAAAAIBQQAAAAAAAgFBAAAAAAACAUEAAAAAAAIBQQAAAAAAAgFBAAAAAAACAUEAAAAAAAIBQQDMzMzMzk1BAMzMzMzOTUEAzMzMzM5NQQDMzMzMzk1BAZmZmZmamUEBmZmZmZqZQQGZmZmZmplBAZmZmZmamUEBmZmZmZqZQQGZmZmZmplBAZmZmZmamUEBmZmZmZqZQQDMzMzMzs1BAMzMzMzOzUEAzMzMzM7NQQDMzMzMzs1BAMzMzMzOzUEAzMzMzM7NQQGZmZmZmxlBAZmZmZmbGUEBmZmZmZsZQQGZmZmZmxlBAZmZmZmbGUEAzMzMzM9NQQDMzMzMz01BAMzMzMzPTUEAzMzMzM9NQQDMzMzMz01BAZmZmZmbmUEBmZmZmZuZQQGZmZmZm5lBAZmZmZmbmUEBmZmZmZuZQQGZmZmZm5lBAZmZmZmbmUEBmZmZmZuZQQGZmZmZm5lBAZmZmZmbmUEBmZmZmZuZQQDMzMzMz81BAMzMzMzPzUEAzMzMzM/NQQDMzMzMz81BAMzMzMzPzUEAzMzMzM/NQQGZmZmZmBlFAZmZmZmYGUUBmZmZmZgZRQGZmZmZmBlFAZmZmZmYGUUBmZmZmZgZRQGZmZmZmBlFAZmZmZmYGUUBmZmZmZgZRQGZmZmZmBlFAZmZmZmYGUUCamZmZmRlRQJqZmZmZGVFAmpmZmZkZUUCamZmZmRlRQJqZmZmZGVFAmpmZmZkZUUCamZmZmRlRQGZmZmZmJlFAZmZmZmYmUUBmZmZmZiZRQGZmZmZmJlFAZmZmZmYmUUBmZmZmZiZRQGZmZmZmJlFAZmZmZmYmUUBmZmZmZiZRQJqZmZmZOVFAmpmZmZk5UUCamZmZmTlRQGZmZmZmRlFAZmZmZmZGUUBmZmZmZkZRQGZmZmZmRlFAZmZmZmZGUUBmZmZmZkZRQGZmZmZmRlFAZmZmZmZGUUBmZmZmZkZRQGZmZmZmRlFAmpmZmZlZUUCamZmZmVlRQJqZmZmZWVFAmpmZmZlZUUCamZmZmVlRQJqZmZmZWVFAmpmZmZlZUUCamZmZmVlRQJqZmZmZWVFAZmZmZmZmUUBmZmZmZmZRQGZmZmZmZlFAZmZmZmZmUUBmZmZmZmZRQGZmZmZmZlFAZmZmZmZmUUBmZmZmZmZRQGZmZmZmZlFAZmZmZmZmUUCamZmZmXlRQJqZmZmZeVFAmpmZmZl5UUCamZmZmXlRQJqZmZmZeVFAmpmZmZl5UUCamZmZmXlRQJqZmZmZeVFAmpmZmZl5UUBmZmZmZoZRQGZmZmZmhlFAZmZmZmaGUUBmZmZmZoZRQGZmZmZmhlFAZmZmZmaGUUBmZmZmZoZRQGZmZmZmhlFAmpmZmZmZUUCamZmZmZlRQJqZmZmZmVFAmpmZmZmZUUCamZmZmZlRQJqZmZmZmVFAmpmZmZmZUUCamZmZmZlRQM3MzMzMrFFAzczMzMysUUDNzMzMzKxRQM3MzMzMrFFAzczMzMysUUDNzMzMzKxRQM3MzMzMrFFAzczMzMysUUCamZmZmblRQJqZmZmZuVFAmpmZmZm5UUDNzMzMzMxRQM3MzMzMzFFAzczMzMzMUUDNzMzMzMxRQM3MzMzMzFFAzczMzMzMUUDNzMzMzMxRQJqZmZmZ2VFAmpmZmZnZUUCamZmZmdlRQJqZmZmZ2VFAmpmZmZnZUUCamZmZmdlRQM3MzMzM7FFAzczMzMzsUUDNzMzMzOxRQM3MzMzM7FFAmpmZmZn5UUCamZmZmflRQJqZmZmZ+VFAzczMzMwMUkDNzMzMzAxSQM3MzMzMDFJAzczMzMwMUkDNzMzMzAxSQM3MzMzMDFJAmpmZmZkZUkCamZmZmRlSQJqZmZmZGVJAmpmZmZkZUkCamZmZmRlSQM3MzMzMLFJAzczMzMwsUkAAAAAAAEBSQAAAAAAAQFJAAAAAAABAUkDNzMzMzExSQM3MzMzMTFJAzczMzMxMUkDNzMzMzExSQM3MzMzMTFJAAAAAAABgUkAAAAAAAGBSQAAAAAAAYFJAAAAAAABgUkAAAAAAAGBSQM3MzMzMbFJAAAAAAACAUkAAAAAAAIBSQAAAAAAAgFJAzczMzMyMUkAAAAAAAKBSQAAAAAAAoFJAMzMzMzOzUkAAAAAAAMBSQDMzMzMz81JAAAAAAAAAU0AAAAAAACBTQDMzMzMzM1NAMzMzMzNTU0AzMzMzM1NTQGZmZmZmZlNAZmZmZmZmU0AzMzMzM7NTQGZmZmZmxlNAmpmZmZkZVEDNzMzMzExUQJqZmZmZeVRAzczMzMyMVECamZmZmZlUQJqZmZmZmVRAAAAAAAAgVUAAAAAAAIBVQGZmZmZmBlZAZmZmZmbmVkCamZmZmflWQAAAAAAAgFdAzczMzMysV0AAAAAAACBYQAAAAAAAIFhAMzMzMzNTWEAAAAAAAGBYQDMzMzMzk1hAmpmZmZkZWUDNzMzMzKxZQJqZmZmZ+VlAmpmZmZl5XEDNzMzMzAxdQM3MzMzMLF1AAAAAAABgXUAAAAAAAMBdQGZmZmZmJl5AZmZmZmZGXkCamZmZmZleQJqZmZmZuV5AZmZmZmbGXkAzMzMzM2NgQJqZmZmZeWFAmpmZmZmJYUCamZmZmalhQAAAAAAAAGRAMzMzMzPDZEDNzMzMzDxnQAAAAAAA0GdAzczMzMysa0A=\"},\"shape\":[670],\"dtype\":\"float64\",\"order\":\"little\"}],[\"Droplet Volume (uL)\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"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\"},\"shape\":[670],\"dtype\":\"float64\",\"order\":\"little\"}],[\"Spindle Length (um)\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"ZmZmZmbmPEAzMzMzM7M2QDMzMzMzMzpAMzMzMzMzM0BmZmZmZmY8QM3MzMzMTDhAmpmZmZkZN0AzMzMzMzM5QM3MzMzMzDhAMzMzMzOzN0AAAAAAAIA5QJqZmZmZmTpAMzMzMzOzOECamZmZmRk5QM3MzMzMTD1AAAAAAACAO0AAAAAAAIA6QGZmZmZmZj5AAAAAAAAAO0DNzMzMzMw/QAAAAAAAAD5AzczMzMzMPEDNzMzMzEw6QM3MzMzMDEBAAAAAAACAOkAzMzMzM7M6QJqZmZmZmTpAMzMzMzOzO0DNzMzMzEw2QJqZmZmZGTpAMzMzMzOzO0CamZmZmZk9QAAAAAAAAEFAAAAAAAAAPUBmZmZmZmY+QM3MzMzMzDxAZmZmZmbmNUDNzMzMzEw9QGZmZmZmZkFAzczMzMwMQEBmZmZmZmZBQAAAAAAAAD5AMzMzMzMzPUBmZmZmZuY7QM3MzMzMTDlAmpmZmZmZOUCamZmZmZk6QM3MzMzMDEFAZmZmZmbmO0CamZmZmZk/QDMzMzMzMzhAzczMzMzMPEBmZmZmZmY+QJqZmZmZmTtAAAAAAACAPEBmZmZmZmY/QDMzMzMzMzhAZmZmZmYmQEAzMzMzMzM+QAAAAAAAAD5AZmZmZmZmPUAzMzMzMzM9QGZmZmZmZjxAZmZmZmbmO0BmZmZmZmZBQJqZmZmZGTpAzczMzMzMP0AzMzMzMzM+QGZmZmZmZjxAZmZmZmZmOUDNzMzMzEw5QM3MzMzMzD1AAAAAAACAPEBmZmZmZuY4QAAAAAAAgDpAZmZmZmbmP0BmZmZmZuY7QAAAAAAAAD5AmpmZmZmZPEBmZmZmZmY9QJqZmZmZmT1AAAAAAACAO0DNzMzMzAxAQAAAAAAAgD9AmpmZmZkZOkDNzMzMzEw8QAAAAAAAAD1AZmZmZmZmPEBmZmZmZuY+QM3MzMzMTD5AMzMzMzNzQEAAAAAAAIA9QDMzMzMzMztAMzMzMzOzPUCamZmZmRlBQGZmZmZmJkFAMzMzMzOzPkBmZmZmZuY9QGZmZmZmZjxAAAAAAABAQEAzMzMzMzNAQJqZmZmZmTpAzczMzMzMOkBmZmZmZuY6QJqZmZmZmT5AAAAAAAAAO0CamZmZmRlBQM3MzMzMzDpAMzMzMzOzPEAAAAAAAIA6QAAAAAAAgD1AzczMzMzMP0CamZmZmZk8QDMzMzMzs0FAZmZmZmbmQkAAAAAAAAA8QAAAAAAAgD1AzczMzMzMP0AzMzMzM7M+QM3MzMzMTDlAZmZmZmbmOkBmZmZmZmY6QJqZmZmZGT1AzczMzMzMPUBmZmZmZmZAQAAAAAAAADxAMzMzMzMzOkBmZmZmZuY8QAAAAAAAgEBAAAAAAADAQUDNzMzMzMw/QAAAAAAAQEFAmpmZmZkZO0DNzMzMzIxCQGZmZmZm5jxAZmZmZmZmQUAzMzMzM7M/QDMzMzMzMzlAzczMzMzMO0AAAAAAAAA7QM3MzMzMTDpAMzMzMzMzPUAzMzMzMzNAQM3MzMzMTDxAMzMzMzMzOkDNzMzMzEw/QJqZmZmZGTtAzczMzMxMQUBmZmZmZuY6QM3MzMzMTD5AAAAAAABAQEAAAAAAAAA6QJqZmZmZGT1AZmZmZmbmQEAzMzMzM7M7QGZmZmZm5jxAZmZmZmZmOUDNzMzMzIxBQDMzMzMzMz5AMzMzMzMzQEBmZmZmZmY6QJqZmZmZmUBAzczMzMyMQUBmZmZmZuY9QJqZmZmZGT5AmpmZmZkZO0AzMzMzMzM5QAAAAAAAQEFAzczMzMxMP0AzMzMzM7M2QGZmZmZmZjxAzczMzMxMPkBmZmZmZmY+QDMzMzMzsz1AMzMzMzOzQECamZmZmRlBQGZmZmZm5jhAmpmZmZkZPUDNzMzMzMw/QDMzMzMzszxAZmZmZmZmOEDNzMzMzExBQAAAAAAAQEBAZmZmZmbmPkCamZmZmRk7QM3MzMzMTDtAMzMzMzMzP0DNzMzMzMxBQJqZmZmZGUBAZmZmZmbmOUCamZmZmVlBQM3MzMzMTD1AmpmZmZkZQEAAAAAAAEBAQDMzMzMzszxAmpmZmZkZPUAzMzMzMzM9QM3MzMzMzD1AmpmZmZmZO0DNzMzMzAxAQGZmZmZmZj5AzczMzMzMPkAzMzMzM7M/QGZmZmZm5j9AMzMzMzOzPECamZmZmRk7QDMzMzMzMz5AAAAAAACAO0AzMzMzM7M5QM3MzMzMTDpAmpmZmZkZPkDNzMzMzEw7QDMzMzMzMz1AMzMzMzOzP0CamZmZmZk6QGZmZmZmZj9AmpmZmZmZQUAAAAAAAABAQM3MzMzMjEFAAAAAAACAOkAAAAAAAIA9QAAAAAAAAEBAMzMzMzOzQUDNzMzMzMw+QM3MzMzMTDxAzczMzMzMP0BmZmZmZmY+QJqZmZmZmTtAZmZmZmbmQkAzMzMzM7M8QDMzMzMzsztAAAAAAACAO0CamZmZmRk9QM3MzMzMzD9AZmZmZmYmQUAzMzMzM/NAQAAAAAAAQEFAmpmZmZlZQUDNzMzMzIxAQJqZmZmZGUBAAAAAAACAO0AAAAAAAIA3QJqZmZmZmT5AAAAAAAAAQEAzMzMzMzM7QAAAAAAAgD1AzczMzMxMQUCamZmZmRk+QDMzMzMzszxAMzMzMzMzPEBmZmZmZuY9QM3MzMzMTD1AMzMzMzMzO0AAAAAAAIBAQJqZmZmZWUJAZmZmZmYmQUAAAAAAAIBCQDMzMzMzMz9AmpmZmZkZPUAzMzMzM7M6QGZmZmZmZkBAmpmZmZkZPkAzMzMzM/NAQJqZmZmZGT5AzczMzMzMQEAAAAAAAIA6QDMzMzMzszxAzczMzMxMP0CamZmZmRk/QM3MzMzMzEJAzczMzMzMO0CamZmZmZk7QM3MzMzMTD1AmpmZmZmZRUCamZmZmZlDQGZmZmZmZj5AmpmZmZmZQUBmZmZmZuY9QGZmZmZm5jdAZmZmZmamQEAzMzMzM7NEQAAAAAAAgD5AAAAAAACAQkAAAAAAAAA7QJqZmZmZWUNAZmZmZmZmQUAAAAAAAABCQJqZmZmZmUFAMzMzMzMzQUDNzMzMzIxBQM3MzMzMjEBAzczMzMxMPkAzMzMzM3NCQJqZmZmZGT9AAAAAAACAOkAzMzMzMzM+QJqZmZmZmUJAzczMzMxMQEBmZmZmZuZBQGZmZmZm5j5AZmZmZmbmQEAzMzMzMzM6QDMzMzMzMzhAZmZmZmbmQkBmZmZmZiZAQM3MzMzMTD5AZmZmZmYmQEBmZmZmZqZAQAAAAAAAQERAAAAAAADAQUAAAAAAAIA8QAAAAAAAAEJAMzMzMzOzPkAzMzMzM3NFQGZmZmZmZkBAZmZmZmYmQECamZmZmdlEQAAAAAAAQEJAzczMzMxMQ0BmZmZmZuZDQM3MzMzMTEBAzczMzMwMREAAAAAAAAA9QDMzMzMzc0BAmpmZmZnZQECamZmZmdlAQM3MzMzMTEJAmpmZmZnZQEBmZmZmZuY+QJqZmZmZ2UBAZmZmZmamQECamZmZmRk4QGZmZmZmZkFAzczMzMyMQUBmZmZmZmY/QGZmZmZm5kFAMzMzMzMzQUBmZmZmZqZBQJqZmZmZWUFAZmZmZmZmP0BmZmZmZmZAQGZmZmZmZkJAMzMzMzPzQEAAAAAAAAA8QAAAAAAAQEBAmpmZmZkZQUBmZmZmZmZAQDMzMzMz80FAZmZmZmamQEBmZmZmZiZAQJqZmZmZmUBAzczMzMwMQkBmZmZmZmZCQGZmZmZmJkFAmpmZmZlZQkDNzMzMzEw8QGZmZmZmJkNAmpmZmZmZQ0CamZmZmRk9QDMzMzMzs0FAzczMzMzMP0AAAAAAAMBAQGZmZmZmpkFAZmZmZmYmQkAAAAAAAABBQM3MzMzMzD9AzczMzMzMQECamZmZmVlBQJqZmZmZGUBAAAAAAADAQUBmZmZmZqZAQM3MzMzMTDxAMzMzMzNzQkAAAAAAAMBDQJqZmZmZmTtAmpmZmZkZPkAzMzMzM/NBQAAAAAAAQEFAzczMzMxMQkBmZmZmZmZDQGZmZmZm5kBAMzMzMzMzREAzMzMzM3NDQM3MzMzMDEJAAAAAAACAPkAzMzMzM7NAQM3MzMzMTEBAAAAAAABAQkDNzMzMzMxDQGZmZmZmJkRAmpmZmZmZOkCamZmZmRk7QAAAAAAAwEBAAAAAAADAQkAzMzMzMzM9QGZmZmZmJkNAzczMzMyMQkDNzMzMzExFQM3MzMzMDEBAmpmZmZmZQEAzMzMzM3NCQDMzMzMz80FAMzMzMzNzRkAzMzMzM/NEQM3MzMzMzEFAzczMzMzMQ0AAAAAAAEBEQGZmZmZmZj9AAAAAAACAREAzMzMzM7M9QAAAAAAAgEFAmpmZmZlZQUAzMzMzM7M7QAAAAAAAwEFAzczMzMwMQECamZmZmZlBQGZmZmZmJkRAmpmZmZmZPUCamZmZmRk+QGZmZmZmZj5AAAAAAABAQEDNzMzMzAxBQAAAAAAAAEJAmpmZmZnZQkBmZmZmZmZCQAAAAAAAwEJAmpmZmZkZRkAzMzMzMzM7QDMzMzMzsz9AZmZmZmbmP0AzMzMzM/NCQM3MzMzMDEBAMzMzMzNzQUCamZmZmdlBQJqZmZmZmT5AZmZmZmamQ0CamZmZmRlCQJqZmZmZWUJAzczMzMwMRUBmZmZmZmY6QM3MzMzMTDdAmpmZmZmZPkAAAAAAAMBBQJqZmZmZmTpAzczMzMzMPUCamZmZmRk+QGZmZmZmJkFAAAAAAACAREDNzMzMzIxEQAAAAAAAwEdAMzMzMzOzPkDNzMzMzMw+QDMzMzMz80FAMzMzMzNzQ0AAAAAAAIBBQJqZmZmZmUBAMzMzMzOzQEAAAAAAAABCQGZmZmZmZj9AzczMzMwMQ0CamZmZmVlAQAAAAAAAQEFAZmZmZmYmQkDNzMzMzEw9QAAAAAAAgENAmpmZmZmZP0CamZmZmZlDQGZmZmZm5j5AmpmZmZnZQEBmZmZmZiZAQDMzMzMzc0JAAAAAAACAP0DNzMzMzMw/QJqZmZmZWUNAzczMzMwMQkCamZmZmZk7QAAAAAAAgD1AzczMzMxMQECamZmZmRlBQM3MzMzMzEFAMzMzMzMzQEDNzMzMzAxCQJqZmZmZWUVAMzMzMzMzPkDNzMzMzExDQGZmZmZmpkBAzczMzMzMP0CamZmZmVlDQAAAAAAAQEFAZmZmZmbmPkAAAAAAAABAQDMzMzMzM0JAmpmZmZkZPUAAAAAAAMBCQDMzMzMz80BAmpmZmZmZPUAAAAAAAAA+QDMzMzMzMz1AAAAAAADAQ0CamZmZmVlDQM3MzMzMzD5AZmZmZmYmQEBmZmZmZmZBQM3MzMzMzD9AzczMzMzMQUBmZmZmZuY8QM3MzMzMjEFAAAAAAACAQkBmZmZmZiZBQM3MzMzMDEJAMzMzMzOzQUBmZmZmZiZCQJqZmZmZ2UFAmpmZmZkZPUCamZmZmdlCQAAAAAAAQEJAmpmZmZlZQUBmZmZmZqZCQM3MzMzMDEJAZmZmZmYmREAzMzMzM7M/QGZmZmZm5kBAMzMzMzPzQUBmZmZmZiZAQDMzMzMzc0FAMzMzMzOzQEAzMzMzMzNAQGZmZmZm5j9AZmZmZmbmQEBmZmZmZmZBQGZmZmZmJkFAAAAAAAAAQUDNzMzMzExCQJqZmZmZGT5AZmZmZmYmQEAzMzMzM3NBQJqZmZmZWUFAMzMzMzNzQkDNzMzMzMw/QJqZmZmZWUBAmpmZmZmZREDNzMzMzEw9QGZmZmZm5j9AzczMzMyMQ0BmZmZmZuY/QM3MzMzMTD5AZmZmZmYmQEDNzMzMzExAQM3MzMzMjEJAzczMzMxMQ0BmZmZmZmY+QGZmZmZmJkRAZmZmZmbmPECamZmZmRk/QM3MzMzMDEBAMzMzMzOzQkAzMzMzM7M+QJqZmZmZmT1AzczMzMzMP0CamZmZmZlCQDMzMzMzM0JAmpmZmZkZQUDNzMzMzMw/QGZmZmZm5j9AzczMzMzMQkAzMzMzMzNCQJqZmZmZGUBAZmZmZmYmQUAzMzMzMzM/QM3MzMzMjEJAAAAAAADAQEDNzMzMzMxDQDMzMzMzsz1AMzMzMzNzQUCamZmZmZlAQAAAAAAAwEBAmpmZmZmZQ0AzMzMzM/NCQJqZmZmZmUFAmpmZmZmZQUCamZmZmZlBQJqZmZmZGUhAAAAAAABAQUAAAAAAAEBDQGZmZmZmJkRAzczMzMzMP0AzMzMzMzNCQAAAAAAAAEBAZmZmZmZmQEDNzMzMzEw2QDMzMzMzM0NAzczMzMyMQ0CamZmZmdlDQAAAAAAAAEJAZmZmZmZmQECamZmZmdlCQDMzMzMzc0RAmpmZmZmZQkAAAAAAAEBCQJqZmZmZWUNAAAAAAADAQEDNzMzMzIxBQM3MzMzMzEFAZmZmZmamQkBmZmZmZmZFQJqZmZmZ2UBAzczMzMyMQECamZmZmVlBQM3MzMzMzENAzczMzMzMRUDNzMzMzIxBQDMzMzMz80NAAAAAAACAQ0BmZmZmZiZCQAAAAAAAwEJAZmZmZmbmQUAzMzMzM/NEQM3MzMzMzD5AzczMzMwMQ0DNzMzMzIxCQAAAAAAAwENAZmZmZmbmQEAzMzMzM/NCQAAAAAAAgEVAMzMzMzNzQkCamZmZmdlDQGZmZmZmJkBAZmZmZmbmPUDNzMzMzExEQM3MzMzMTEFAAAAAAABAQ0DNzMzMzAxEQAAAAAAAAEVAzczMzMwMRUAzMzMzMzNGQGZmZmZm5kZAmpmZmZmZQECamZmZmRlAQM3MzMzMDEBAMzMzMzPzQkBmZmZmZiZEQJqZmZmZmUFAzczMzMwMQkDNzMzMzMxDQDMzMzMz80RAMzMzMzMzQEDNzMzMzAxDQM3MzMzMTEdAzczMzMzMQECamZmZmZlFQJqZmZmZGUBAzczMzMxMR0AAAAAAAIBDQM3MzMzMjEFAMzMzMzNzRkDNzMzMzAxDQGZmZmZmZkFAZmZmZmamR0AAAAAAAIBFQM3MzMzMzERAMzMzMzMzRUBmZmZmZqZEQAAAAAAAAEVAZmZmZmamRECamZmZmRlFQJqZmZmZmUZAAAAAAADARUAzMzMzM7NFQAAAAAAAQERAZmZmZmYmQEA=\"},\"shape\":[670],\"dtype\":\"float64\",\"order\":\"little\"}],[\"Spindle Width (um)\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"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\"},\"shape\":[670],\"dtype\":\"float64\",\"order\":\"little\"}],[\"Spindle Area (um2)\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"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\"},\"shape\":[670],\"dtype\":\"float64\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1049\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1050\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Scatter\",\"id\":\"p1045\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Droplet Diameter (um)\"},\"y\":{\"type\":\"field\",\"field\":\"Spindle Length (um)\"},\"line_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.3},\"fill_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.3},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.3}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Scatter\",\"id\":\"p1046\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Droplet Diameter (um)\"},\"y\":{\"type\":\"field\",\"field\":\"Spindle Length (um)\"},\"line_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1},\"fill_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.1},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Scatter\",\"id\":\"p1047\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Droplet Diameter (um)\"},\"y\":{\"type\":\"field\",\"field\":\"Spindle Length (um)\"},\"line_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2},\"fill_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.2},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1062\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1056\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1057\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1058\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"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\"},\"shape\":[200],\"dtype\":\"float64\",\"order\":\"little\"}],[\"y\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"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\"},\"shape\":[200],\"dtype\":\"float64\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1063\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1064\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1059\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"orange\",\"line_width\":2}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1060\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"orange\",\"line_alpha\":0.1,\"line_width\":2}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1061\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"orange\",\"line_alpha\":0.2,\"line_width\":2}}}}],\"toolbar\":{\"type\":\"object\",\"name\":\"Toolbar\",\"id\":\"p1011\",\"attributes\":{\"tools\":[{\"type\":\"object\",\"name\":\"PanTool\",\"id\":\"p1026\"},{\"type\":\"object\",\"name\":\"WheelZoomTool\",\"id\":\"p1027\",\"attributes\":{\"renderers\":\"auto\"}},{\"type\":\"object\",\"name\":\"BoxZoomTool\",\"id\":\"p1028\",\"attributes\":{\"dimensions\":\"both\",\"overlay\":{\"type\":\"object\",\"name\":\"BoxAnnotation\",\"id\":\"p1029\",\"attributes\":{\"syncable\":false,\"line_color\":\"black\",\"line_alpha\":1.0,\"line_width\":2,\"line_dash\":[4,4],\"fill_color\":\"lightgrey\",\"fill_alpha\":0.5,\"level\":\"overlay\",\"visible\":false,\"left\":{\"type\":\"number\",\"value\":\"nan\"},\"right\":{\"type\":\"number\",\"value\":\"nan\"},\"top\":{\"type\":\"number\",\"value\":\"nan\"},\"bottom\":{\"type\":\"number\",\"value\":\"nan\"},\"left_units\":\"canvas\",\"right_units\":\"canvas\",\"top_units\":\"canvas\",\"bottom_units\":\"canvas\",\"handles\":{\"type\":\"object\",\"name\":\"BoxInteractionHandles\",\"id\":\"p1035\",\"attributes\":{\"all\":{\"type\":\"object\",\"name\":\"AreaVisuals\",\"id\":\"p1034\",\"attributes\":{\"fill_color\":\"white\",\"hover_fill_color\":\"lightgray\"}}}}}}}},{\"type\":\"object\",\"name\":\"SaveTool\",\"id\":\"p1036\"},{\"type\":\"object\",\"name\":\"ResetTool\",\"id\":\"p1037\"},{\"type\":\"object\",\"name\":\"HelpTool\",\"id\":\"p1038\"}]}},\"left\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1021\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1022\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1023\"},\"axis_label\":\"spindle length (\\u00b5m)\",\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1024\"}}}],\"below\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1016\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1017\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1018\"},\"axis_label\":\"droplet diameter (\\u00b5m)\",\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1019\"}}}],\"center\":[{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1020\",\"attributes\":{\"axis\":{\"id\":\"p1016\"}}},{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1025\",\"attributes\":{\"dimension\":1,\"axis\":{\"id\":\"p1021\"}}}],\"frame_width\":400,\"frame_height\":300}}]}};\n const render_items = [{\"docid\":\"4bd76f12-01f8-4915-a6d6-d2fdc64ca41d\",\"roots\":{\"p1003\":\"d52ff4c7-45bc-4312-8eb9-ac3e350a77f3\"},\"root_ids\":[\"p1003\"]}];\n void root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n }\n if (root.Bokeh !== undefined) {\n embed_document(root);\n } else {\n let attempts = 0;\n const timer = setInterval(function(root) {\n if (root.Bokeh !== undefined) {\n clearInterval(timer);\n embed_document(root);\n } else {\n attempts++;\n if (attempts > 100) {\n clearInterval(timer);\n console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n }\n }\n }, 10, root)\n }\n})(window);", "application/vnd.bokehjs_exec.v0+json": "" }, "metadata": { "application/vnd.bokehjs_exec.v0+json": { "id": "p1003" } }, "output_type": "display_data" } ], "source": [ "# Compute theoretical curve using MLE parameters\n", "d_theor = np.linspace(0, 250, 200)\n", "ell_theor = theor_spindle_length(*mle_params[:-1], d_theor)\n", "\n", "# Add theoretical curve to the plot\n", "p.line(d_theor, ell_theor, line_width=2, line_color=\"orange\")\n", "\n", "bokeh.io.show(p)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Of course, we are not using the full generative model here, since we are not using the parameter $\\sigma$. We will discuss in much more detail in the lesson on model assessment how to visualize the entire generative model as it relates to the measured data." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Least squares\n", "\n", "We worked out in [Lesson @sec-mle-for-variate-covariate-models] that when we have a homoscedastic Normal model for residuals, we may compute the MLE by first minimizing the residual sum of squares and then computing the MLE for the variance of the Normally distributed residuals as $\\sigma^* = \\sqrt{\\text{RSS}^* / n}$, where $n$ is the total number of data points.\n", "\n", "Conveniently, this is the form of our generative model, so we can split the optimization problem in two parts. First, find the values of parameters $\\gamma$ and $\\phi$ that minimize the residual sum of squares. Then, using these values, compute the MLE for $\\sigma$ using the analytical result we have just derived.\n", "\n", "The [Levenberg-Marquardt algorithm](https://en.wikipedia.org/wiki/Levenberg–Marquardt_algorithm) is a fast, robust algorithm to perform minimization of the RSS. A variant of this is implemented in `scipy.optimization.least_squares()` ([docs](https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.least_squares.html)). To use that algorithm you need to define a function for the residual; that is a function that returns the quantity $l_i - \\mu_i$. The function has call signature `f(params, *args)`, where `params` is a Numpy array containing the parameters you will use in the optimization (in our case, $\\gamma$ and $\\phi$), and `args` is a tuple of any other arguments passed to the function, which almost always include the data (in our case `(d, ell)`). We can code up that function." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "def resid(params, d, ell):\n", " \"\"\"Residual for spindle length model.\"\"\"\n", " return ell - theor_spindle_length(*params, d)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can call `scipy.optimize.least_squares()` to perform the MLE. We can also specify bounds as a tuple containing a list of the lower bounds of the respective parameters and a list of the upper bounds of the respective parameters. We bound $\\gamma$ between zero and one, and $\\phi$ just has to be positive." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(array([ 0.8601068 , 38.24676911]), np.float64(3.7549998715440034))" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "res = scipy.optimize.least_squares(\n", " resid, np.array([0.5, 35]), args=(d, ell), bounds=([0, 0], [1, np.inf])\n", ")\n", "\n", "# Compute residual sum of squares from optimal params\n", "rss_mle = np.sum(resid(res.x, d, ell)**2)\n", "\n", "# Compute MLE for sigma\n", "sigma_mle = np.sqrt(rss_mle / len(d))\n", "\n", "# Take a look\n", "res.x, sigma_mle" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Indeed, we got the same results as before. Let's code this procedure up into a function. Looking ahead to using `bebi103.bootstrap.draw_bs_reps_mle()`, we need the function to take the data set as a single argument." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "def spindle_mle_lstq(data):\n", " \"\"\"Compute MLE for parameters in spindle length model.\"\"\"\n", " # Unpack data\n", " d = data[:, 0]\n", " ell = data[:, 1]\n", " \n", " res = scipy.optimize.least_squares(\n", " resid, np.array([0.5, 35]), args=(d, ell), bounds=([0, 0], [1, np.inf])\n", " )\n", "\n", " # Compute residual sum of squares from optimal params\n", " rss_mle = np.sum(resid(res.x, d, ell)**2)\n", "\n", " # Compute MLE for sigma\n", " sigma_mle = np.sqrt(rss_mle / len(d))\n", " \n", " return tuple([x for x in res.x] + [sigma_mle])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The big advantages of doing this are the robustness and speed of the Levenberg-Marquardt algorithm. Let's do a speed test." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Timing for MLE by Powell's method:\n", "5.09 ms ± 17.4 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n", "\n", "Timing for MLE by least_squares:\n", "1.36 ms ± 2.47 μs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n" ] } ], "source": [ "print(\"Timing for MLE by Powell's method:\")\n", "%timeit spindle_mle(d, ell)\n", "\n", "print(\"\\nTiming for MLE by least_squares:\")\n", "data = df[['Droplet Diameter (um)', 'Spindle Length (um)']].to_numpy()\n", "%timeit spindle_mle_lstq(data)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "That's a substantial speed boost of nearly 4×." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Confidence intervals\n", "\n", "We can now proceed to compute confidence intervals for our parameters. We will do a parametric bootstrap here. We use the generative model parametrized by the MLE to regenerate data sets. For each value of $d$ (which are fixed), we draw values of $l$ using the generative distribution). Then we perform MLE of those to get confidence intervals. To use `bebi103.draw_bs_reps_mle()`, then, we just are left to supply the bootstrap sample generating function." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "def gen_spindle_data(params, d, size, rng):\n", " \"\"\"Generate a new spindle data set.\"\"\"\n", " mu = theor_spindle_length(*params[:-1], d)\n", " sigma = params[-1]\n", "\n", " return np.vstack((d, rng.normal(mu, sigma))).transpose()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that we were careful to make sure the data set has the appropriate dimensions; the row indexes the trial. We can now compute our replicates and confidence intervals." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "95% Confidence intervals\n", "γ: [ 0.83, 0.89]\n", "φ: [37.54, 39.03]\n", "σ: [ 3.54, 3.95]\n", "\n" ] } ], "source": [ "bs_reps = bebi103.bootstrap.draw_bs_reps_mle(\n", " spindle_mle_lstq,\n", " gen_spindle_data,\n", " data=df[[\"Droplet Diameter (um)\", \"Spindle Length (um)\"]].to_numpy(),\n", " mle_args=(),\n", " gen_args=(d,),\n", " size=10_000,\n", " n_jobs=9,\n", " progress_bar=False,\n", ")\n", "\n", "# Compute confidence intervals\n", "conf_ints = np.percentile(bs_reps, [2.5, 97.5], axis=0)\n", "\n", "# Print the results\n", "print(\n", " \"\"\"95% Confidence intervals\n", "γ: [ {0:.2f}, {1:.2f}]\n", "φ: [{2:.2f}, {3:.2f}]\n", "σ: [ {4:.2f}, {5:.2f}]\n", "\"\"\".format(\n", " *conf_ints.transpose().ravel()\n", " )\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The confidence intervals are given in each column for $\\gamma$, $\\phi$, and $\\sigma$, respectively, and are quite tight. This is because we have lots of data points. This does *not* mean that the data are tightly distributed about the theoretical curve, only that the MLE estimates for the parameters will not vary much if we repeated the experiment and analysis." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Other confidence intervals\n", "\n", "We have computed parametric confidence intervals by regenerating spindle lengths for each droplet diameter we measured using the generative model parametrized by the MLE. There are many ways to compute confidence intervals for variate-covariate models, including pairs, residual, and wild bootstrap. Briefly, here are the respective techniques.\n", "\n", "**Pairs bootstrap**: As we saw when doing nonparametric bootstrap confidence intervals for correlation coefficients, we can apply a similar technique here. We resample the data set as, in this case, pairs of droplet diameters and spindle lengths $(d_i, \\ell_i)$, and compute MLE estimates for the parameters for each bootstrap sample.\n", "\n", "**Residual bootstrap**: In residual bootstrap, the *residuals* are resampled. The procedure goes as follows.\n", "\n", "1. Compute the MLE for the parameters of the model, $\\theta^*$. In the spindle length example, $\\theta^* = (\\gamma^*, \\phi^*)$.\n", "2. Define $\\hat{y}_i = y(x_i; \\theta^*)$ to be the value of $y$ computed as point $x_i$ using the theoretical curve parametrized by the MLE estimate for $\\theta$.\n", "3. Define residual $i$ as $\\epsilon_i = y_i - \\hat{y}_i$.\n", "4. Draw a bootstrap sample of the residuals, randomly assigning a new residual to each datum. Let $\\epsilon_j$ be the $j$th *resampled* residual (that is the $j$th residual in the bootstrap sample of residuals). \n", "5. Generate a bootstrap sample of your data set where the $j$th data point $(x_j, \\hat{y}_j + \\epsilon_j)$.\n", "5. Recompute the MLE for $\\theta$ from this bootstrap sample.\n", "\n", "**Wild bootstrap**: In wild bootstrap, the residuals are resampled parametrically. If residual $i$ is $\\epsilon_i = y_i - \\hat{y}_i$, then a new residual applied to data point $i$ is $\\epsilon_i\\,v_i$, where $v_i$ is drawn from a Normal distribution with mean zero and variance one. Thus, data point $i$ in the bootstrap sample is $(x_i, \\hat{y}_i + \\epsilon_i\\,v_i)$. The MLE for $\\theta$ is then computed from this bootstrap sample." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Why I do not advocate for using these other methods\n", "\n", "Pairs bootstrap is a nonparametric way of getting bootstrap samples, with the bootstrap replicate computed using a parametric inference technique. This can work well if we have a large number of data points *and* no *x*-values are severely undersampled in the experiment. This is not always the case, however, though it is in the case of the spindle length data.\n", "\n", "Residual bootstrap implicitly models the residuals of homoscedastic, since any given residual may be applied to any given data point. Again, this is often not the case.\n", "\n", "Wild bootstrap is a twist on residual bootstrap that attempts to model heteroscedasticity. In using wild bootstrap, we have implicitly baked into model that the residual for each data point is normally distributed about the empirical residual with a scale parameter that scales with the size of the empirical residual. This is a way of dealing with heteroscedasticity without seriously considering the variation in measurement in a generative way. But, we really should *think generatively*. If we are going to model, we should model everything. A full generative model, including how we might expect the variability to change as a function of the measured and/or explanatory variables, is preferable.\n", "\n", "For variate-covariate models, I usually prefer to do the parametric bootstrap method we have covered in this lesson. If I have enough well-sampled data points, then pairs bootstrap is a reasonable way to nonparametrically get bootstrap samples to compute a confidence interval. If I am sure of homoscedasticity, residual bootstrap is a good method. I generally shy away from wild bootstrap completely, since I prefer to explicitly model heteroscedasticity." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Computing environment" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Python implementation: CPython\n", "Python version : 3.13.5\n", "IPython version : 9.4.0\n", "\n", "numpy : 2.2.6\n", "scipy : 1.16.0\n", "polars : 1.31.0\n", "bokeh : 3.7.3\n", "bebi103 : 0.1.28\n", "jupyterlab: 4.4.5\n", "\n" ] } ], "source": [ "%load_ext watermark\n", "%watermark -v -p numpy,scipy,polars,bokeh,bebi103,jupyterlab" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.13.5" } }, "nbformat": 4, "nbformat_minor": 4 }