Repository: optimagic-dev/optimagic (language: python)

Issue:
Improve estimation table and its documentation
### Issues with current version estimation table

- The argument `sig_digits` does not actually implement a rounding to significant digits, but a simple rounding to a fixed number of decimal points. No other kind of rounding is implemented.
- The argument `left_decimals` is confusing and actually rather a hack to achieve padding that anything related to rounding.
- `sig_levels` is too abbreviated
- The documentation is in matlab style, i.e. there are millions of examples for each argument instead of descriptions of arguments. There is also a rather long setup section before the first estimation table is shown. 

### To-Do Code

- [x] rename `left_decimals` to padding and  incorporate the information that is currently only in the Notes into the description of that argument 
- [x] rename `sig_levels` to `significance_levels`
- [x] remove `sig_digits` argument
- [x] Add a new argument called `number_format`. The following things would be valid for that argument:
    - [x] An integer (which would specify the number of digits behind the decimal point)
    - [x] A formatting string or list/tuple of format strings. If multiple, they are applied in order, and in between the number is converted back to float. 
    - [x] A function that takes a float and returns a string
- [x] Add a new argument called `add_trailing_zeros`. If True, all numbers that are not formatted in scientific notation after applying `number_format` are padded with zeros to the right until all numbers have the same amount of decimal points. 
- [x] Add a new argument called `add_leading_zeros` (analogous to trailing zeros)

### Suggested default for number formatting

- `add_trailing_zeros`=True
- `add_leading_zeros`=False
- `number_format`=`("{0:.3g}", "{0:.5f}", "{0:.5g}")`, i.e.
    - Set all but the 3 most significant digits to zero
    - Set all digits after the fifth decimal point to zero
    - Switch to scientific notation for large numbers only at a magnitude of 1e5, despite only showing three significant digits
    - 
### To-Do Documentation

The current documentation should be almost completely replaced by the following:

- [x] A simple code example with associated output. All optional arguments should be left out but we should show how easy it is to combine statsmodels results with custom models. I would use the same example model as in the [ml tutorial](https://estimagic.readthedocs.io/en/stable/getting_started/first_likelihood_estimation_with_estimagic.html) and [msm tutorial](https://estimagic.readthedocs.io/en/stable/getting_started/first_msm_estimation_with_estimagic.html) so we can refer to the code there and load and show the result DataFrames which can then be compared to a OLS estimation using statsmodels. 
- [x] One example of an estimation table that uses multiple optional arguments at once and the associated output. In the end there should be a link to the API documentation that explains all optional arguments. 
- [x] One example that introduces the statistics (number of observation, ....) and how they are added in estimagic models. 
- [x] One example that uses `return_type="python"`, does a modification to the DataFrame (e.g. drop a few rows and add a row called "controls" that has a checkmark in some columns and a cross in the others. 
- [x] A general description of the philosophy behind the estimation table that inspires to use it creatively
    - Why return type "python" can cover many use-cases that are normally achieved with many arguments 
    - How outputs from any language can be brought into one of our "model" formats
    - ...
- [x] Background information on float formatting strings in Python with links to the resources I mention above.

Moreover we should do the following:

- [x] Link to the estimation table documentation in all estimation examples
- [x] Replace the outputs in the estimation table notebook by images of actual latex tables instead of trying to render LaTeX in the notebook (it currently does not work)
- [x] Make sure the typo `sisetup` code snippet is fixed everywhere (e.g. [here](https://github.com/OpenSourceEconomics/estimagic/blob/20d2fbd1d3e159504f47d8b8133b5067873d17f1/src/estimagic/visualization/estimation_table.py#L156) and [here](https://github.com/OpenSourceEconomics/estimagic/blob/20d2fbd1d3e159504f47d8b8133b5067873d17f1/src/estimagic/visualization/estimation_table.py#L93)). One uses a `_` and one a `-` and only one of them can be correct.

### Discussion

- Should we formally deprecate the old arguments or simply do the changes? I think we can simply do the changes. 
- What would be a good example for the more advanced sections? Should we stick to the example we are using currently in the estimation table documentation?
- Should we switch from a documentation notebook to an rst file with dropdown containers so we can accommodate more examples without cluttering the page?


Discussion / hints:
> here for discussion of rounding to significant digits

That link is not quite it, I think. Only looks to the right of the decimal separator, right? 

One of my (and many others') pet peeves is that false sense of precision created by many tables. Like you see mean income of 38,234 Euros. Nobody cares about the 34 bit. People will start interpreting that (despite standard errors on the magnitude of hundreds), however, and miss the important parts.

Here is a function I have been using, probably got that from SO at some point, but cannot find the source.

```py
def nsf(num, n=3):
    """n-Significant Figures"""
    numstr = ("{0:.%ie}" % (n - 1)).format(num)
    return float(numstr)
```
It is `\sisetup{input-symbols=()}`, see here https://github.com/OpenSourceEconomics/estimagic/issues/253#issuecomment-974103608
Another trivial but useful return type would be `df`. Should probably be the default even. 

That is, return a dataframe with all the formatting of *** etc, which then takes advantage of the html rendering in a notebook. Currently, html looks ugly in notebooks.


Instead of `return_type='python'`, maybe `'modifiable'` or something like that? `'elements'` ? 
Thinking of it, why think of it as two functions? 

1. Format results (i.e., return the python / modifiable stuff). Potentially have different options of returning strings only or numbers (already rounded)
2. Get the view in the output format you want

One may want to think of a short-hand again, but conceptually this might make sense?
I checked out the version at the branch `improve_estimation_table`. A few remarks:

- `number_format` is currently also applied to "Observations". This statistic should, however, never be rounded.
- I am also thinking about two functions/steps, e.g., to allow me to exchange column and index names. By using `tabular_tex` this is already possible. But it would be great if `tabular_tex` had some default values (as `estimation_table` already has).
- @mpetrosian, you haven't opened a PR yet, right? Would be happy to help out if needed.
- Does anybody of you have a code example where `estimation_table` is used in a project? (-> just PM me)

Fix patch:
diff --git a/CHANGES.rst b/CHANGES.rst
index b05e8a969..60e4efe7f 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -7,6 +7,53 @@ releases are available on `Anaconda.org
 <https://anaconda.org/OpenSourceEconomics/estimagic>`_.
 
 
+0.3.0
+-----
+
+Fist release with pytree support in optimization, estimation and differentiation.
+
+Breaking changes
+
+- New ``OptimizeResult`` object is returned by ``maximize`` and ``minimize``. This
+  breaks all code that expects the old result dictionary. Usage of the new result is
+  explained in the getting started tutorial on optimization.
+- New internal optimizer interface that can break optimization with custom optimizers
+- The inferface of ``process_constraints`` changed quite drastically. This breaks
+  code that used ``process_constraints`` to get the number of free parameters or check
+  if constraints are valid. There are new high level functions
+  ``estimagic.check_constraints`` and ``estimagic.count_free_params`` instead.
+- Some functions from ``estimagic.logging.read_log`` are removed and replaced by
+  ``estimagic.OptimizeLogReader``.
+- Convenience functions to create namedtuples are removed from ``estimagic.utilities``.
+
+
+- :gh:`339` Incorporates user feedback and polishes the documentation.
+- :gh:`338` Improves log reading functions (:ghuser:`janosg`)
+- :gh:`336` Adds pytree support to the dashboard (:ghuser:`roecla`).
+- :gh:`335` Introduces an ``OptimizeResult`` object and functionality for history
+  plotting (:ghuser:`janosg`).
+- :gh:`333` Uses new history collection feature to speed up benchmarking
+  (:ghuser:`segsell`).
+- :gh:`330` Is a major rewrite of the estimation code (:ghuser:`timmens`).
+- :gh:`328` Improves quadratic surrogate solvers used in pounders and tranquilo
+  (:ghuser:`segsell`).
+- :gh:`326` Improves documentation of numerical derivatives (:ghuser:`timmens`).
+- :gh:`325` Improves the slice_plot (:ghuser:`mpetrosian`)
+- :gh:`324` Adds ability to collect optimization histories without logging
+  (:ghuser:`janosg`).
+- :gh:`311` and :gh:`288` rewrite all plotting code in plotly (:ghuser:`timmens`
+  and :ghuser:`aidatak97`).
+- :gh:`306` improves quadratic surrogate solvers used in pounders and tranquilo
+  (:ghuser:`segsell`).
+- :gh:`305` allows pytrees during optimization and rewrites large parts of the
+  constraints processing (:ghuser:`janosg`).
+- :gh:`303` introduces a new optimizer interface that makes it easier to add optimizers
+  and makes it possible to access optimizer specific information outside of the
+  intrenal_criterion_and_derivative (:ghuser:`janosg` and :ghuser:`roecla`).
+
+
+
+
 0.2.5
 -----
 
diff --git a/codecov.yml b/codecov.yml
index bdf7dbef9..236b93d51 100644
--- a/codecov.yml
+++ b/codecov.yml
@@ -9,10 +9,10 @@ coverage:
   status:
     patch:
       default:
-        target: 75%
+        target: 85%
     project:
       default:
-        target: 87%
+        target: 90%
 
 ignore:
   - ".tox/**/*"
diff --git a/docs/source/getting_started/first_likelihood_estimation_with_estimagic.ipynb b/docs/source/getting_started/first_likelihood_estimation_with_estimagic.ipynb
index 361d9a30b..fc1efd17f 100644
--- a/docs/source/getting_started/first_likelihood_estimation_with_estimagic.ipynb
+++ b/docs/source/getting_started/first_likelihood_estimation_with_estimagic.ipynb
@@ -338,7 +338,7 @@
    "name": "python",
    "nbconvert_exporter": "python",
    "pygments_lexer": "ipython3",
-   "version": "3.8.12"
+   "version": "3.8.13"
   }
  },
  "nbformat": 4,
diff --git a/docs/source/how_to_guides/miscellaneous/how_to_generate_publication_quality_tables.ipynb b/docs/source/how_to_guides/miscellaneous/how_to_generate_publication_quality_tables.ipynb
index 2a73e0577..ce88c6031 100644
--- a/docs/source/how_to_guides/miscellaneous/how_to_generate_publication_quality_tables.ipynb
+++ b/docs/source/how_to_guides/miscellaneous/how_to_generate_publication_quality_tables.ipynb
@@ -2,246 +2,193 @@
  "cells": [
   {
    "cell_type": "markdown",
+   "metadata": {},
    "source": [
     "# How to generate publication quality tables\n"
-   ],
-   "metadata": {}
-  },
-  {
-   "cell_type": "markdown",
-   "source": [
-    "estimagic helps you generate publication quality html and LaTex tables, given a list of estimation results."
-   ],
-   "metadata": {}
+   ]
   },
   {
    "cell_type": "markdown",
+   "metadata": {},
    "source": [
-    "## Set up"
-   ],
-   "metadata": {}
+    "Estimagic can create publication quality tables of parameter estimates in LaTeX or HTML. It works with the results from `estimate_ml` and `estimate_msm` but also supports statsmodels results out of the box. \n",
+    "\n",
+    "You can get almost limitless flexibility if you split the table generation into two steps. The fist generates a DataFrame which you can customize to your liking, the second renders that DataFrame in LaTeX or HTML."
+   ]
   },
   {
    "cell_type": "code",
-   "execution_count": 2,
+   "execution_count": 1,
+   "metadata": {},
+   "outputs": [],
    "source": [
-    "import io\n",
-    "import re\n",
-    "from collections import namedtuple\n",
-    "from copy import copy, deepcopy\n",
-    "\n",
     "import numpy as np\n",
     "import pandas as pd\n",
-    "import statsmodels.api as sm\n",
+    "import statsmodels.formula.api as sm\n",
     "from IPython.core.display import HTML, Latex\n",
     "\n",
-    "import estimagic.visualization.estimation_table as et\n",
+    "from estimagic import estimation_table, render_html, render_latex\n",
     "from estimagic.config import EXAMPLE_DIR"
-   ],
-   "outputs": [],
-   "metadata": {}
+   ]
   },
   {
-   "cell_type": "code",
-   "execution_count": 4,
+   "cell_type": "markdown",
+   "metadata": {},
    "source": [
-    "# Load dataset\n",
-    "df = pd.read_csv(EXAMPLE_DIR / \"diabetes.csv\", index_col=0)"
-   ],
+    "## Create tables from statsmodels results"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "metadata": {},
    "outputs": [],
-   "metadata": {}
+   "source": [
+    "df = pd.read_csv(EXAMPLE_DIR / \"diabetes.csv\", index_col=0)\n",
+    "mod1 = sm.ols(\"target ~ Age + Sex\", data=df).fit()\n",
+    "mod2 = sm.ols(\"target ~ Age + Sex + BMI + ABP\", data=df).fit()\n",
+    "models = [mod1, mod2]"
+   ]
   },
   {
    "cell_type": "code",
    "execution_count": 3,
-   "source": [
-    "df.head()"
-   ],
+   "metadata": {
+    "scrolled": false
+   },
    "outputs": [
     {
-     "output_type": "execute_result",
      "data": {
       "text/html": [
-       "<div>\n",
-       "<style scoped>\n",
-       "    .dataframe tbody tr th:only-of-type {\n",
-       "        vertical-align: middle;\n",
-       "    }\n",
-       "\n",
-       "    .dataframe tbody tr th {\n",
-       "        vertical-align: top;\n",
-       "    }\n",
-       "\n",
-       "    .dataframe thead th {\n",
-       "        text-align: right;\n",
-       "    }\n",
-       "</style>\n",
        "<table border=\"1\" class=\"dataframe\">\n",
        "  <thead>\n",
-       "    <tr style=\"text-align: right;\">\n",
+       "    <tr>\n",
+       "      <th></th>\n",
+       "      <th colspan=\"2\" halign=\"left\">target</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th></th>\n",
+       "      <th>(1)</th>\n",
+       "      <th>(2)</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>Intercept</th>\n",
+       "      <td>152.00$^{*** }$</td>\n",
+       "      <td>152.00$^{*** }$</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
        "      <th></th>\n",
+       "      <td>(3.61)</td>\n",
+       "      <td>(2.85)</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
        "      <th>Age</th>\n",
+       "      <td>301.00$^{*** }$</td>\n",
+       "      <td>37.20$^{ }$</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th></th>\n",
+       "      <td>(77.10)</td>\n",
+       "      <td>(64.10)</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
        "      <th>Sex</th>\n",
+       "      <td>17.40$^{ }$</td>\n",
+       "      <td>-107.00$^{* }$</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th></th>\n",
+       "      <td>(77.10)</td>\n",
+       "      <td>(62.10)</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
        "      <th>BMI</th>\n",
+       "      <td></td>\n",
+       "      <td>787.00$^{*** }$</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th></th>\n",
+       "      <td></td>\n",
+       "      <td>(65.40)</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
        "      <th>ABP</th>\n",
-       "      <th>S1</th>\n",
-       "      <th>S2</th>\n",
-       "      <th>S3</th>\n",
-       "      <th>S4</th>\n",
-       "      <th>S5</th>\n",
-       "      <th>S6</th>\n",
-       "      <th>target</th>\n",
+       "      <td></td>\n",
+       "      <td>417.00$^{*** }$</td>\n",
        "    </tr>\n",
-       "  </thead>\n",
-       "  <tbody>\n",
        "    <tr>\n",
-       "      <th>0</th>\n",
-       "      <td>0.038076</td>\n",
-       "      <td>0.050680</td>\n",
-       "      <td>0.061696</td>\n",
-       "      <td>0.021872</td>\n",
-       "      <td>-0.044223</td>\n",
-       "      <td>-0.034821</td>\n",
-       "      <td>-0.043401</td>\n",
-       "      <td>-0.002592</td>\n",
-       "      <td>0.019908</td>\n",
-       "      <td>-0.017646</td>\n",
-       "      <td>151.0</td>\n",
+       "      <th></th>\n",
+       "      <td></td>\n",
+       "      <td>(69.50)</td>\n",
+       "    </tr>\n",
+       "  <tr><td colspan=\"3\" style=\"border-bottom: 1px solid black\">\n",
+       "            </td></tr>  <tbody>\n",
+       "    <tr>\n",
+       "      <th>R$^2$</th>\n",
+       "      <td>0.04</td>\n",
+       "      <td>0.40</td>\n",
        "    </tr>\n",
        "    <tr>\n",
-       "      <th>1</th>\n",
-       "      <td>-0.001882</td>\n",
-       "      <td>-0.044642</td>\n",
-       "      <td>-0.051474</td>\n",
-       "      <td>-0.026328</td>\n",
-       "      <td>-0.008449</td>\n",
-       "      <td>-0.019163</td>\n",
-       "      <td>0.074412</td>\n",
-       "      <td>-0.039493</td>\n",
-       "      <td>-0.068330</td>\n",
-       "      <td>-0.092204</td>\n",
-       "      <td>75.0</td>\n",
+       "      <th>Adj. R$^2$</th>\n",
+       "      <td>0.03</td>\n",
+       "      <td>0.40</td>\n",
        "    </tr>\n",
        "    <tr>\n",
-       "      <th>2</th>\n",
-       "      <td>0.085299</td>\n",
-       "      <td>0.050680</td>\n",
-       "      <td>0.044451</td>\n",
-       "      <td>-0.005671</td>\n",
-       "      <td>-0.045599</td>\n",
-       "      <td>-0.034194</td>\n",
-       "      <td>-0.032356</td>\n",
-       "      <td>-0.002592</td>\n",
-       "      <td>0.002864</td>\n",
-       "      <td>-0.025930</td>\n",
-       "      <td>141.0</td>\n",
+       "      <th>Residual Std. Error</th>\n",
+       "      <td>75.90</td>\n",
+       "      <td>60.00</td>\n",
        "    </tr>\n",
        "    <tr>\n",
-       "      <th>3</th>\n",
-       "      <td>-0.089063</td>\n",
-       "      <td>-0.044642</td>\n",
-       "      <td>-0.011595</td>\n",
-       "      <td>-0.036656</td>\n",
-       "      <td>0.012191</td>\n",
-       "      <td>0.024991</td>\n",
-       "      <td>-0.036038</td>\n",
-       "      <td>0.034309</td>\n",
-       "      <td>0.022692</td>\n",
-       "      <td>-0.009362</td>\n",
-       "      <td>206.0</td>\n",
+       "      <th>F Statistic</th>\n",
+       "      <td>8.06$^{***}$</td>\n",
+       "      <td>72.90$^{***}$</td>\n",
        "    </tr>\n",
        "    <tr>\n",
-       "      <th>4</th>\n",
-       "      <td>0.005383</td>\n",
-       "      <td>-0.044642</td>\n",
-       "      <td>-0.036385</td>\n",
-       "      <td>0.021872</td>\n",
-       "      <td>0.003935</td>\n",
-       "      <td>0.015596</td>\n",
-       "      <td>0.008142</td>\n",
-       "      <td>-0.002592</td>\n",
-       "      <td>-0.031991</td>\n",
-       "      <td>-0.046641</td>\n",
-       "      <td>135.0</td>\n",
+       "      <th>Observations</th>\n",
+       "      <td>442</td>\n",
+       "      <td>442</td>\n",
        "    </tr>\n",
-       "  </tbody>\n",
-       "</table>\n",
-       "</div>"
+       "  <tr><td colspan=\"3\" style=\"border-bottom: 1px solid black\">\n",
+       "        </td></tr>\n",
+       "        <tr><td style=\"text-align: left\">Note:</td><td colspan=\"2\"\n",
+       "        style=\"text-align: right\"><sup>***</sup>p&lt;0.01; <sup>**</sup>p&lt;0.05; <sup>*</sup>p&lt;0.1 </td></tbody>\n",
+       "</table>"
       ],
       "text/plain": [
-       "        Age       Sex       BMI       ABP        S1        S2        S3  \\\n",
-       "0  0.038076  0.050680  0.061696  0.021872 -0.044223 -0.034821 -0.043401   \n",
-       "1 -0.001882 -0.044642 -0.051474 -0.026328 -0.008449 -0.019163  0.074412   \n",
-       "2  0.085299  0.050680  0.044451 -0.005671 -0.045599 -0.034194 -0.032356   \n",
-       "3 -0.089063 -0.044642 -0.011595 -0.036656  0.012191  0.024991 -0.036038   \n",
-       "4  0.005383 -0.044642 -0.036385  0.021872  0.003935  0.015596  0.008142   \n",
-       "\n",
-       "         S4        S5        S6  target  \n",
-       "0 -0.002592  0.019908 -0.017646   151.0  \n",
-       "1 -0.039493 -0.068330 -0.092204    75.0  \n",
-       "2 -0.002592  0.002864 -0.025930   141.0  \n",
-       "3  0.034309  0.022692 -0.009362   206.0  \n",
-       "4 -0.002592 -0.031991 -0.046641   135.0  "
+       "<IPython.core.display.HTML object>"
       ]
      },
+     "execution_count": 3,
      "metadata": {},
-     "execution_count": 3
+     "output_type": "execute_result"
     }
    ],
-   "metadata": {}
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 4,
    "source": [
-    "# Fit regressions\n",
-    "est = sm.OLS(endog=df[\"target\"], exog=sm.add_constant(df[df.columns[0:4]])).fit()\n",
-    "est2 = sm.OLS(endog=df[\"target\"], exog=sm.add_constant(df[df.columns[0:6]])).fit()"
-   ],
-   "outputs": [],
-   "metadata": {}
+    "HTML(estimation_table(models, return_type=\"html\"))"
+   ]
   },
   {
    "cell_type": "markdown",
+   "metadata": {},
    "source": [
-    "The estimation results can be passed as `statsmodels` regression results, or as a tuple with attributes `params` (pandas DataFrame), with parameter values, standard errors and/or confidence intervals and p-values, and `info` (dict) with summary statistics of the model."
-   ],
-   "metadata": {}
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 5,
-   "source": [
-    "# Extract `params` and `info`\n",
-    "namedtuplee = namedtuple(\"namedtuplee\", \"params info\")\n",
-    "est3 = namedtuplee(\n",
-    "    params=et._extract_params_from_sm(est),\n",
-    "    info={**et._extract_info_from_sm(est)},\n",
-    ")\n",
+    "## Adding estimagic results\n",
     "\n",
-    "# Remove redundant information\n",
-    "del est3.info[\"df_model\"]\n",
-    "del est3.info[\"df_resid\"]"
-   ],
-   "outputs": [],
-   "metadata": {}
-  },
-  {
-   "cell_type": "markdown",
-   "source": [
-    "The resulting dictionary contains all the information we need:"
-   ],
-   "metadata": {}
+    "`estimate_ml` and `estimate_msm` can both generate summaries of estimation results. Those summaries are either DataFrames with the columns `\"value\"`, `\"standard_error\"`, `\"p_value\"` and `\"stars\"` or pytrees containing such DataFrames. \n",
+    "\n",
+    "For examples, check out our tutorials on [`estimate_ml`](../../getting_started/first_likelihood_estimation_with_estimagic.ipynb) and [`estimate_msm`](../../getting_started/first_msm_estimation_with_estimagic.ipynb).\n",
+    "\n",
+    "\n",
+    "Assume we got the following DataFrame from an estimation summary:"
+   ]
   },
   {
    "cell_type": "code",
-   "execution_count": 6,
-   "source": [
-    "est3[0]"
-   ],
+   "execution_count": 4,
+   "metadata": {},
    "outputs": [
     {
-     "output_type": "execute_result",
      "data": {
       "text/html": [
        "<div>\n",
@@ -263,316 +210,191 @@
        "    <tr style=\"text-align: right;\">\n",
        "      <th></th>\n",
        "      <th>value</th>\n",
-       "      <th>pvalue</th>\n",
        "      <th>standard_error</th>\n",
-       "      <th>ci_lower</th>\n",
-       "      <th>ci_upper</th>\n",
+       "      <th>p_value</th>\n",
        "    </tr>\n",
        "  </thead>\n",
        "  <tbody>\n",
        "    <tr>\n",
-       "      <th>const</th>\n",
-       "      <td>152.133484</td>\n",
-       "      <td>2.048808e-193</td>\n",
-       "      <td>2.852749</td>\n",
-       "      <td>146.526671</td>\n",
-       "      <td>157.740298</td>\n",
+       "      <th>Intercept</th>\n",
+       "      <td>142.123</td>\n",
+       "      <td>3.14150</td>\n",
+       "      <td>1.000000e-08</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>Age</th>\n",
-       "      <td>37.241211</td>\n",
-       "      <td>5.616557e-01</td>\n",
-       "      <td>64.117433</td>\n",
-       "      <td>-88.775663</td>\n",
-       "      <td>163.258084</td>\n",
+       "      <td>51.456</td>\n",
+       "      <td>2.71828</td>\n",
+       "      <td>1.000000e-08</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>Sex</th>\n",
-       "      <td>-106.577520</td>\n",
-       "      <td>8.695658e-02</td>\n",
-       "      <td>62.125062</td>\n",
-       "      <td>-228.678572</td>\n",
-       "      <td>15.523532</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>BMI</th>\n",
-       "      <td>787.179313</td>\n",
-       "      <td>5.345260e-29</td>\n",
-       "      <td>65.424126</td>\n",
-       "      <td>658.594255</td>\n",
-       "      <td>915.764371</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>ABP</th>\n",
-       "      <td>416.673772</td>\n",
-       "      <td>4.245663e-09</td>\n",
-       "      <td>69.494666</td>\n",
-       "      <td>280.088446</td>\n",
-       "      <td>553.259097</td>\n",
+       "      <td>-33.789</td>\n",
+       "      <td>1.61800</td>\n",
+       "      <td>1.000000e-08</td>\n",
        "    </tr>\n",
        "  </tbody>\n",
        "</table>\n",
        "</div>"
       ],
       "text/plain": [
-       "            value         pvalue  standard_error    ci_lower    ci_upper\n",
-       "const  152.133484  2.048808e-193        2.852749  146.526671  157.740298\n",
-       "Age     37.241211   5.616557e-01       64.117433  -88.775663  163.258084\n",
-       "Sex   -106.577520   8.695658e-02       62.125062 -228.678572   15.523532\n",
-       "BMI    787.179313   5.345260e-29       65.424126  658.594255  915.764371\n",
-       "ABP    416.673772   4.245663e-09       69.494666  280.088446  553.259097"
-      ]
-     },
-     "metadata": {},
-     "execution_count": 6
-    }
-   ],
-   "metadata": {}
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 7,
-   "source": [
-    "est3[1]"
-   ],
-   "outputs": [
-    {
-     "output_type": "execute_result",
-     "data": {
-      "text/plain": [
-       "{'rsquared': 0.40026108237713975,\n",
-       " 'rsquared_adj': 0.3947714813005003,\n",
-       " 'fvalue': 72.912599073987,\n",
-       " 'f_pvalue': 2.7007228809503304e-47,\n",
-       " 'dependent_variable': 'target',\n",
-       " 'resid_std_err': 59.97560860753489,\n",
-       " 'n_obs': 442.0}"
+       "             value  standard_error       p_value\n",
+       "Intercept  142.123         3.14150  1.000000e-08\n",
+       "Age         51.456         2.71828  1.000000e-08\n",
+       "Sex        -33.789         1.61800  1.000000e-08"
       ]
      },
+     "execution_count": 4,
      "metadata": {},
-     "execution_count": 7
+     "output_type": "execute_result"
     }
    ],
-   "metadata": {}
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 8,
-   "source": [
-    "# Make copy of estimation results\n",
-    "est4 = {}\n",
-    "est4[\"params\"] = deepcopy(est3.params)\n",
-    "est4[\"info\"] = deepcopy(est3.info)\n",
-    "\n",
-    "est5 = {}\n",
-    "est5[\"params\"] = deepcopy(est3.params)\n",
-    "est5[\"info\"] = deepcopy(est3.info)"
-   ],
-   "outputs": [],
-   "metadata": {}
-  },
-  {
-   "cell_type": "markdown",
    "source": [
-    "## Basics"
-   ],
-   "metadata": {}
+    "params = pd.DataFrame(\n",
+    "    {\n",
+    "        \"value\": [142.123, 51.456, -33.789],\n",
+    "        \"standard_error\": [3.1415, 2.71828, 1.6180],\n",
+    "        \"p_value\": [1e-8] * 3,\n",
+    "    },\n",
+    "    index=[\"Intercept\", \"Age\", \"Sex\"],\n",
+    ")\n",
+    "params"
+   ]
   },
   {
    "cell_type": "markdown",
+   "metadata": {},
    "source": [
-    "Basic features include custom title and custom names for models, columns, index and parameters."
-   ],
-   "metadata": {}
+    "You can either use just the params DataFrame or a dictionary containing \"params\" and additional information in `estimation_table`."
+   ]
   },
   {
-   "cell_type": "markdown",
+   "cell_type": "code",
+   "execution_count": 5,
+   "metadata": {},
+   "outputs": [],
    "source": [
-    "### Basic table, without title"
-   ],
-   "metadata": {}
+    "mod3 = {\"params\": params, \"name\": \"target\", \"info\": {\"n_obs\": 445}}\n",
+    "models = [mod1, mod2, mod3]"
+   ]
   },
   {
    "cell_type": "code",
-   "execution_count": 9,
-   "source": [
-    "ex_html = et.estimation_table([est, est2, est3, est4, est5], return_type=\"html\")\n",
-    "HTML(ex_html)"
-   ],
+   "execution_count": 6,
+   "metadata": {},
    "outputs": [
     {
-     "output_type": "execute_result",
      "data": {
       "text/html": [
        "<table border=\"1\" class=\"dataframe\">\n",
        "  <thead>\n",
-       "    <tr style=\"text-align: center;\">\n",
+       "    <tr>\n",
+       "      <th></th>\n",
+       "      <th colspan=\"3\" halign=\"left\">target</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
        "      <th></th>\n",
        "      <th>(1)</th>\n",
        "      <th>(2)</th>\n",
        "      <th>(3)</th>\n",
-       "      <th>(4)</th>\n",
-       "      <th>(5)</th>\n",
        "    </tr>\n",
        "  </thead>\n",
        "  <tbody>\n",
        "    <tr>\n",
-       "      <th>const</th>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "      <td>152.13$^{*** }$</td>\n",
+       "      <th>Intercept</th>\n",
+       "      <td>152.00$^{*** }$</td>\n",
+       "      <td>152.00$^{*** }$</td>\n",
+       "      <td>142.00$^{*** }$</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th></th>\n",
+       "      <td>(3.61)</td>\n",
        "      <td>(2.85)</td>\n",
-       "      <td>(2.85)</td>\n",
-       "      <td>(2.85)</td>\n",
-       "      <td>(2.85)</td>\n",
-       "      <td>(2.85)</td>\n",
+       "      <td>(3.14)</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>Age</th>\n",
-       "      <td>37.24$^{ }$</td>\n",
-       "      <td>24.7$^{ }$</td>\n",
-       "      <td>37.24$^{ }$</td>\n",
-       "      <td>37.24$^{ }$</td>\n",
-       "      <td>37.24$^{ }$</td>\n",
+       "      <td>301.00$^{*** }$</td>\n",
+       "      <td>37.20$^{ }$</td>\n",
+       "      <td>51.50$^{*** }$</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th></th>\n",
-       "      <td>(64.12)</td>\n",
-       "      <td>(65.41)</td>\n",
-       "      <td>(64.12)</td>\n",
-       "      <td>(64.12)</td>\n",
-       "      <td>(64.12)</td>\n",
+       "      <td>(77.10)</td>\n",
+       "      <td>(64.10)</td>\n",
+       "      <td>(2.72)</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>Sex</th>\n",
-       "      <td>-106.58$^{* }$</td>\n",
-       "      <td>-82.86$^{ }$</td>\n",
-       "      <td>-106.58$^{* }$</td>\n",
-       "      <td>-106.58$^{* }$</td>\n",
-       "      <td>-106.58$^{* }$</td>\n",
+       "      <td>17.40$^{ }$</td>\n",
+       "      <td>-107.00$^{* }$</td>\n",
+       "      <td>-33.80$^{*** }$</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th></th>\n",
-       "      <td>(62.13)</td>\n",
-       "      <td>(64.85)</td>\n",
-       "      <td>(62.13)</td>\n",
-       "      <td>(62.13)</td>\n",
-       "      <td>(62.13)</td>\n",
+       "      <td>(77.10)</td>\n",
+       "      <td>(62.10)</td>\n",
+       "      <td>(1.62)</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>BMI</th>\n",
-       "      <td>787.18$^{*** }$</td>\n",
-       "      <td>789.74$^{*** }$</td>\n",
-       "      <td>787.18$^{*** }$</td>\n",
-       "      <td>787.18$^{*** }$</td>\n",
-       "      <td>787.18$^{*** }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(65.42)</td>\n",
-       "      <td>(66.89)</td>\n",
-       "      <td>(65.42)</td>\n",
-       "      <td>(65.42)</td>\n",
-       "      <td>(65.42)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>ABP</th>\n",
-       "      <td>416.67$^{*** }$</td>\n",
-       "      <td>397.58$^{*** }$</td>\n",
-       "      <td>416.67$^{*** }$</td>\n",
-       "      <td>416.67$^{*** }$</td>\n",
-       "      <td>416.67$^{*** }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(69.49)</td>\n",
-       "      <td>(70.87)</td>\n",
-       "      <td>(69.49)</td>\n",
-       "      <td>(69.49)</td>\n",
-       "      <td>(69.49)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>S1</th>\n",
-       "      <td></td>\n",
-       "      <td>197.85$^{ }$</td>\n",
-       "      <td></td>\n",
        "      <td></td>\n",
+       "      <td>787.00$^{*** }$</td>\n",
        "      <td></td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th></th>\n",
        "      <td></td>\n",
-       "      <td>(143.81)</td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
+       "      <td>(65.40)</td>\n",
        "      <td></td>\n",
        "    </tr>\n",
        "    <tr>\n",
-       "      <th>S2</th>\n",
-       "      <td></td>\n",
-       "      <td>-169.25$^{ }$</td>\n",
-       "      <td></td>\n",
+       "      <th>ABP</th>\n",
        "      <td></td>\n",
+       "      <td>417.00$^{*** }$</td>\n",
        "      <td></td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th></th>\n",
        "      <td></td>\n",
-       "      <td>(142.74)</td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
+       "      <td>(69.50)</td>\n",
        "      <td></td>\n",
        "    </tr>\n",
-       "  <tr><td colspan=\"6\" style=\"border-bottom: 1px solid black\">\n",
+       "  <tr><td colspan=\"4\" style=\"border-bottom: 1px solid black\">\n",
        "            </td></tr>  <tbody>\n",
        "    <tr>\n",
-       "      <th>Observations</th>\n",
-       "      <td>442.0</td>\n",
-       "      <td>442.0</td>\n",
-       "      <td>442.0</td>\n",
-       "      <td>442.0</td>\n",
-       "      <td>442.0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
        "      <th>R$^2$</th>\n",
-       "      <td>0.4</td>\n",
-       "      <td>0.4</td>\n",
-       "      <td>0.4</td>\n",
-       "      <td>0.4</td>\n",
-       "      <td>0.4</td>\n",
+       "      <td>0.04</td>\n",
+       "      <td>0.40</td>\n",
+       "      <td></td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>Adj. R$^2$</th>\n",
-       "      <td>0.39</td>\n",
-       "      <td>0.39</td>\n",
-       "      <td>0.39</td>\n",
-       "      <td>0.39</td>\n",
-       "      <td>0.39</td>\n",
+       "      <td>0.03</td>\n",
+       "      <td>0.40</td>\n",
+       "      <td></td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>Residual Std. Error</th>\n",
-       "      <td>59.98</td>\n",
-       "      <td>59.98</td>\n",
-       "      <td>59.98</td>\n",
-       "      <td>59.98</td>\n",
-       "      <td>59.98</td>\n",
+       "      <td>75.90</td>\n",
+       "      <td>60.00</td>\n",
+       "      <td></td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>F Statistic</th>\n",
-       "      <td>72.91$^{***}$</td>\n",
-       "      <td>48.91$^{***}$</td>\n",
-       "      <td>72.91$^{***}$</td>\n",
-       "      <td>72.91$^{***}$</td>\n",
-       "      <td>72.91$^{***}$</td>\n",
+       "      <td>8.06$^{***}$</td>\n",
+       "      <td>72.90$^{***}$</td>\n",
+       "      <td></td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>Observations</th>\n",
+       "      <td>442</td>\n",
+       "      <td>442</td>\n",
+       "      <td>445</td>\n",
        "    </tr>\n",
-       "  <tr><td colspan=\"6\" style=\"border-bottom: 1px solid black\">\n",
+       "  <tr><td colspan=\"4\" style=\"border-bottom: 1px solid black\">\n",
        "        </td></tr>\n",
-       "        <tr><td style=\"text-align: left\">Note:</td><td colspan=\"5\"\n",
+       "        <tr><td style=\"text-align: left\">Note:</td><td colspan=\"3\"\n",
        "        style=\"text-align: right\"><sup>***</sup>p&lt;0.01; <sup>**</sup>p&lt;0.05; <sup>*</sup>p&lt;0.1 </td></tbody>\n",
        "</table>"
       ],
@@ -580,3972 +402,290 @@
        "<IPython.core.display.HTML object>"
       ]
      },
+     "execution_count": 6,
      "metadata": {},
-     "execution_count": 9
+     "output_type": "execute_result"
     }
    ],
-   "metadata": {}
+   "source": [
+    "HTML(estimation_table(models, return_type=\"html\"))"
+   ]
   },
   {
-   "cell_type": "code",
-   "execution_count": 10,
+   "cell_type": "markdown",
+   "metadata": {},
    "source": [
-    "ex_latex = et.estimation_table(\n",
-    "    [est, est2, est3, est4, est5],\n",
-    "    return_type=\"latex\",\n",
-    "    left_decimals=4,\n",
-    "    alignment_warning=False,\n",
-    "    siunitx_warning=False,\n",
-    ")\n",
-    "Latex(ex_latex)"
-   ],
-   "outputs": [
-    {
-     "output_type": "execute_result",
-     "data": {
-      "text/latex": [
-       "\\begin{tabular}{lS[table-format =4.2]S[table-format =4.2]S[table-format =4.2]S[table-format =4.2]S[table-format =4.2]}\n",
-       "\\toprule\n",
-       "{} &            {(1)} &            {(2)} &            {(3)} &            {(4)} &            {(5)} \\\\\n",
-       "\\midrule\n",
-       "const &  152.13$^{*** }$ &  152.13$^{*** }$ &  152.13$^{*** }$ &  152.13$^{*** }$ &  152.13$^{*** }$ \\\\\n",
-       "      &           (2.85) &           (2.85) &           (2.85) &           (2.85) &           (2.85) \\\\\n",
-       "Age   &      37.24$^{ }$ &       24.7$^{ }$ &      37.24$^{ }$ &      37.24$^{ }$ &      37.24$^{ }$ \\\\\n",
-       "      &          (64.12) &          (65.41) &          (64.12) &          (64.12) &          (64.12) \\\\\n",
-       "Sex   &   -106.58$^{* }$ &     -82.86$^{ }$ &   -106.58$^{* }$ &   -106.58$^{* }$ &   -106.58$^{* }$ \\\\\n",
-       "      &          (62.13) &          (64.85) &          (62.13) &          (62.13) &          (62.13) \\\\\n",
-       "BMI   &  787.18$^{*** }$ &  789.74$^{*** }$ &  787.18$^{*** }$ &  787.18$^{*** }$ &  787.18$^{*** }$ \\\\\n",
-       "      &          (65.42) &          (66.89) &          (65.42) &          (65.42) &          (65.42) \\\\\n",
-       "ABP   &  416.67$^{*** }$ &  397.58$^{*** }$ &  416.67$^{*** }$ &  416.67$^{*** }$ &  416.67$^{*** }$ \\\\\n",
-       "      &          (69.49) &          (70.87) &          (69.49) &          (69.49) &          (69.49) \\\\\n",
-       "S1    &                  &     197.85$^{ }$ &                  &                  &                  \\\\\n",
-       "      &                  &         (143.81) &                  &                  &                  \\\\\n",
-       "S2    &                  &    -169.25$^{ }$ &                  &                  &                  \\\\\n",
-       "      &                  &         (142.74) &                  &                  &                  \\\\\n",
-       "\\midrule\n",
-       "Observations &          442.0 &          442.0 &          442.0 &          442.0 &          442.0 \\\\\n",
-       "R$^2$ &            0.4 &            0.4 &            0.4 &            0.4 &            0.4 \\\\\n",
-       "Adj. R$^2$ &           0.39 &           0.39 &           0.39 &           0.39 &           0.39 \\\\\n",
-       "Residual Std. Error &          59.98 &          59.98 &          59.98 &          59.98 &          59.98 \\\\\n",
-       "F Statistic &  72.91$^{***}$ &  48.91$^{***}$ &  72.91$^{***}$ &  72.91$^{***}$ &  72.91$^{***}$ \\\\\n",
-       "\\midrule\n",
-       "\\textit{Note:} & \\multicolumn{5}{r}{$^{***}$p$<$0.01;$^{**}$p$<$0.05;$^{*}$p$<$0.1} \\\\\n",
-       "\\bottomrule\n",
-       "\\end{tabular}\n"
-      ],
-      "text/plain": [
-       "<IPython.core.display.Latex object>"
-      ]
-     },
-     "metadata": {},
-     "execution_count": 10
-    }
-   ],
-   "metadata": {}
+    "## Selecting the right return_type\n",
+    "\n",
+    "The following return types are supported:\n",
+    "- `\"latex\"`: Returns a string that you can save and import into a LaTeX document\n",
+    "- `\"html\"`: Returns a string that you can save and import into a HTML document.\n",
+    "- `\"render_inputs\"`: Returns a dictionary with the following entries:\n",
+    "    - `\"body\"`: A DataFrame containing the main table\n",
+    "    - `\"footer\"`: A DataFrame containing the statisics\n",
+    "    - other stuff that you should ignore\n",
+    "- `\"dataframe\"`: Returns a DataFrame you can look at in a notebook"
+   ]
   },
   {
    "cell_type": "markdown",
+   "metadata": {},
    "source": [
-    "### Basic table, with title"
-   ],
-   "metadata": {}
+    "## Use `render_inputs` for maximum flexibility\n",
+    "\n",
+    "As an example, let's assume we want to remove a few rows from the footer.\n",
+    "\n",
+    "Let's first look at the footer we get from `estimation_table`"
+   ]
   },
   {
    "cell_type": "code",
    "execution_count": 11,
-   "source": [
-    "ex_html = et.estimation_table(\n",
-    "    [est, est2, est3, est4, est5],\n",
-    "    return_type=\"html\",\n",
-    "    render_options={\"caption\": \"This is a caption\"},\n",
-    ")\n",
-    "HTML(ex_html)"
-   ],
+   "metadata": {},
    "outputs": [
     {
-     "output_type": "execute_result",
      "data": {
       "text/html": [
-       "This is a caption<br><table border=\"1\" class=\"dataframe\">\n",
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead tr th {\n",
+       "        text-align: left;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
        "  <thead>\n",
-       "    <tr style=\"text-align: center;\">\n",
+       "    <tr>\n",
+       "      <th></th>\n",
+       "      <th colspan=\"3\" halign=\"left\">target</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
        "      <th></th>\n",
        "      <th>(1)</th>\n",
        "      <th>(2)</th>\n",
        "      <th>(3)</th>\n",
-       "      <th>(4)</th>\n",
-       "      <th>(5)</th>\n",
        "    </tr>\n",
        "  </thead>\n",
        "  <tbody>\n",
        "    <tr>\n",
-       "      <th>const</th>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "      <td>152.13$^{*** }$</td>\n",
+       "      <th>R$^2$</th>\n",
+       "      <td>0.04</td>\n",
+       "      <td>0.40</td>\n",
+       "      <td></td>\n",
        "    </tr>\n",
        "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(2.85)</td>\n",
-       "      <td>(2.85)</td>\n",
-       "      <td>(2.85)</td>\n",
-       "      <td>(2.85)</td>\n",
-       "      <td>(2.85)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>Age</th>\n",
-       "      <td>37.24$^{ }$</td>\n",
-       "      <td>24.7$^{ }$</td>\n",
-       "      <td>37.24$^{ }$</td>\n",
-       "      <td>37.24$^{ }$</td>\n",
-       "      <td>37.24$^{ }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(64.12)</td>\n",
-       "      <td>(65.41)</td>\n",
-       "      <td>(64.12)</td>\n",
-       "      <td>(64.12)</td>\n",
-       "      <td>(64.12)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>Sex</th>\n",
-       "      <td>-106.58$^{* }$</td>\n",
-       "      <td>-82.86$^{ }$</td>\n",
-       "      <td>-106.58$^{* }$</td>\n",
-       "      <td>-106.58$^{* }$</td>\n",
-       "      <td>-106.58$^{* }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(62.13)</td>\n",
-       "      <td>(64.85)</td>\n",
-       "      <td>(62.13)</td>\n",
-       "      <td>(62.13)</td>\n",
-       "      <td>(62.13)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>BMI</th>\n",
-       "      <td>787.18$^{*** }$</td>\n",
-       "      <td>789.74$^{*** }$</td>\n",
-       "      <td>787.18$^{*** }$</td>\n",
-       "      <td>787.18$^{*** }$</td>\n",
-       "      <td>787.18$^{*** }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(65.42)</td>\n",
-       "      <td>(66.89)</td>\n",
-       "      <td>(65.42)</td>\n",
-       "      <td>(65.42)</td>\n",
-       "      <td>(65.42)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>ABP</th>\n",
-       "      <td>416.67$^{*** }$</td>\n",
-       "      <td>397.58$^{*** }$</td>\n",
-       "      <td>416.67$^{*** }$</td>\n",
-       "      <td>416.67$^{*** }$</td>\n",
-       "      <td>416.67$^{*** }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(69.49)</td>\n",
-       "      <td>(70.87)</td>\n",
-       "      <td>(69.49)</td>\n",
-       "      <td>(69.49)</td>\n",
-       "      <td>(69.49)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>S1</th>\n",
-       "      <td></td>\n",
-       "      <td>197.85$^{ }$</td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td></td>\n",
-       "      <td>(143.81)</td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>S2</th>\n",
-       "      <td></td>\n",
-       "      <td>-169.25$^{ }$</td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td></td>\n",
-       "      <td>(142.74)</td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "    </tr>\n",
-       "  <tr><td colspan=\"6\" style=\"border-bottom: 1px solid black\">\n",
-       "            </td></tr>  <tbody>\n",
-       "    <tr>\n",
-       "      <th>Observations</th>\n",
-       "      <td>442.0</td>\n",
-       "      <td>442.0</td>\n",
-       "      <td>442.0</td>\n",
-       "      <td>442.0</td>\n",
-       "      <td>442.0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>R$^2$</th>\n",
-       "      <td>0.4</td>\n",
-       "      <td>0.4</td>\n",
-       "      <td>0.4</td>\n",
-       "      <td>0.4</td>\n",
-       "      <td>0.4</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>Adj. R$^2$</th>\n",
-       "      <td>0.39</td>\n",
-       "      <td>0.39</td>\n",
-       "      <td>0.39</td>\n",
-       "      <td>0.39</td>\n",
-       "      <td>0.39</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>Residual Std. Error</th>\n",
-       "      <td>59.98</td>\n",
-       "      <td>59.98</td>\n",
-       "      <td>59.98</td>\n",
-       "      <td>59.98</td>\n",
-       "      <td>59.98</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>F Statistic</th>\n",
-       "      <td>72.91$^{***}$</td>\n",
-       "      <td>48.91$^{***}$</td>\n",
-       "      <td>72.91$^{***}$</td>\n",
-       "      <td>72.91$^{***}$</td>\n",
-       "      <td>72.91$^{***}$</td>\n",
-       "    </tr>\n",
-       "  <tr><td colspan=\"6\" style=\"border-bottom: 1px solid black\">\n",
-       "        </td></tr>\n",
-       "        <tr><td style=\"text-align: left\">Note:</td><td colspan=\"5\"\n",
-       "        style=\"text-align: right\"><sup>***</sup>p&lt;0.01; <sup>**</sup>p&lt;0.05; <sup>*</sup>p&lt;0.1 </td></tbody>\n",
-       "</table>"
-      ],
-      "text/plain": [
-       "<IPython.core.display.HTML object>"
-      ]
-     },
-     "metadata": {},
-     "execution_count": 11
-    }
-   ],
-   "metadata": {}
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 12,
-   "source": [
-    "ex_tex = et.estimation_table(\n",
-    "    [est, est2, est3, est4, est5],\n",
-    "    left_decimals=4,\n",
-    "    return_type=\"latex\",\n",
-    "    render_options={\"caption\": \"This is a caption\"},\n",
-    "    alignment_warning=False,\n",
-    "    siunitx_warning=False,\n",
-    ")\n",
-    "Latex(ex_tex)"
-   ],
-   "outputs": [
-    {
-     "output_type": "execute_result",
-     "data": {
-      "text/latex": [
-       "\\begin{table}\n",
-       "\\centering\n",
-       "\\caption{This is a caption}\n",
-       "\\begin{tabular}{lS[table-format =4.2]S[table-format =4.2]S[table-format =4.2]S[table-format =4.2]S[table-format =4.2]}\n",
-       "\\toprule\n",
-       "{} &            {(1)} &            {(2)} &            {(3)} &            {(4)} &            {(5)} \\\\\n",
-       "\\midrule\n",
-       "const &  152.13$^{*** }$ &  152.13$^{*** }$ &  152.13$^{*** }$ &  152.13$^{*** }$ &  152.13$^{*** }$ \\\\\n",
-       "      &           (2.85) &           (2.85) &           (2.85) &           (2.85) &           (2.85) \\\\\n",
-       "Age   &      37.24$^{ }$ &       24.7$^{ }$ &      37.24$^{ }$ &      37.24$^{ }$ &      37.24$^{ }$ \\\\\n",
-       "      &          (64.12) &          (65.41) &          (64.12) &          (64.12) &          (64.12) \\\\\n",
-       "Sex   &   -106.58$^{* }$ &     -82.86$^{ }$ &   -106.58$^{* }$ &   -106.58$^{* }$ &   -106.58$^{* }$ \\\\\n",
-       "      &          (62.13) &          (64.85) &          (62.13) &          (62.13) &          (62.13) \\\\\n",
-       "BMI   &  787.18$^{*** }$ &  789.74$^{*** }$ &  787.18$^{*** }$ &  787.18$^{*** }$ &  787.18$^{*** }$ \\\\\n",
-       "      &          (65.42) &          (66.89) &          (65.42) &          (65.42) &          (65.42) \\\\\n",
-       "ABP   &  416.67$^{*** }$ &  397.58$^{*** }$ &  416.67$^{*** }$ &  416.67$^{*** }$ &  416.67$^{*** }$ \\\\\n",
-       "      &          (69.49) &          (70.87) &          (69.49) &          (69.49) &          (69.49) \\\\\n",
-       "S1    &                  &     197.85$^{ }$ &                  &                  &                  \\\\\n",
-       "      &                  &         (143.81) &                  &                  &                  \\\\\n",
-       "S2    &                  &    -169.25$^{ }$ &                  &                  &                  \\\\\n",
-       "      &                  &         (142.74) &                  &                  &                  \\\\\n",
-       "\\midrule\n",
-       "Observations &          442.0 &          442.0 &          442.0 &          442.0 &          442.0 \\\\\n",
-       "R$^2$ &            0.4 &            0.4 &            0.4 &            0.4 &            0.4 \\\\\n",
-       "Adj. R$^2$ &           0.39 &           0.39 &           0.39 &           0.39 &           0.39 \\\\\n",
-       "Residual Std. Error &          59.98 &          59.98 &          59.98 &          59.98 &          59.98 \\\\\n",
-       "F Statistic &  72.91$^{***}$ &  48.91$^{***}$ &  72.91$^{***}$ &  72.91$^{***}$ &  72.91$^{***}$ \\\\\n",
-       "\\midrule\n",
-       "\\textit{Note:} & \\multicolumn{5}{r}{$^{***}$p$<$0.01;$^{**}$p$<$0.05;$^{*}$p$<$0.1} \\\\\n",
-       "\\bottomrule\n",
-       "\\end{tabular}\n",
-       "\n",
-       "\\end{table}\n"
-      ],
-      "text/plain": [
-       "<IPython.core.display.Latex object>"
-      ]
-     },
-     "metadata": {},
-     "execution_count": 12
-    }
-   ],
-   "metadata": {}
-  },
-  {
-   "cell_type": "markdown",
-   "source": [
-    "### Column names"
-   ],
-   "metadata": {}
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 13,
-   "source": [
-    "ex_html = et.estimation_table(\n",
-    "    [est, est2, est3, est4, est5],\n",
-    "    return_type=\"html\",\n",
-    "    render_options={\"caption\": \"This is a caption\"},\n",
-    "    custom_col_names=list(\"abcde\"),\n",
-    ")\n",
-    "HTML(ex_html)"
-   ],
-   "outputs": [
-    {
-     "output_type": "execute_result",
-     "data": {
-      "text/html": [
-       "This is a caption<br><table border=\"1\" class=\"dataframe\">\n",
-       "  <thead>\n",
-       "    <tr style=\"text-align: center;\">\n",
-       "      <th></th>\n",
-       "      <th>a</th>\n",
-       "      <th>b</th>\n",
-       "      <th>c</th>\n",
-       "      <th>d</th>\n",
-       "      <th>e</th>\n",
-       "    </tr>\n",
-       "  </thead>\n",
-       "  <tbody>\n",
-       "    <tr>\n",
-       "      <th>const</th>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(2.85)</td>\n",
-       "      <td>(2.85)</td>\n",
-       "      <td>(2.85)</td>\n",
-       "      <td>(2.85)</td>\n",
-       "      <td>(2.85)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>Age</th>\n",
-       "      <td>37.24$^{ }$</td>\n",
-       "      <td>24.7$^{ }$</td>\n",
-       "      <td>37.24$^{ }$</td>\n",
-       "      <td>37.24$^{ }$</td>\n",
-       "      <td>37.24$^{ }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(64.12)</td>\n",
-       "      <td>(65.41)</td>\n",
-       "      <td>(64.12)</td>\n",
-       "      <td>(64.12)</td>\n",
-       "      <td>(64.12)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>Sex</th>\n",
-       "      <td>-106.58$^{* }$</td>\n",
-       "      <td>-82.86$^{ }$</td>\n",
-       "      <td>-106.58$^{* }$</td>\n",
-       "      <td>-106.58$^{* }$</td>\n",
-       "      <td>-106.58$^{* }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(62.13)</td>\n",
-       "      <td>(64.85)</td>\n",
-       "      <td>(62.13)</td>\n",
-       "      <td>(62.13)</td>\n",
-       "      <td>(62.13)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>BMI</th>\n",
-       "      <td>787.18$^{*** }$</td>\n",
-       "      <td>789.74$^{*** }$</td>\n",
-       "      <td>787.18$^{*** }$</td>\n",
-       "      <td>787.18$^{*** }$</td>\n",
-       "      <td>787.18$^{*** }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(65.42)</td>\n",
-       "      <td>(66.89)</td>\n",
-       "      <td>(65.42)</td>\n",
-       "      <td>(65.42)</td>\n",
-       "      <td>(65.42)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>ABP</th>\n",
-       "      <td>416.67$^{*** }$</td>\n",
-       "      <td>397.58$^{*** }$</td>\n",
-       "      <td>416.67$^{*** }$</td>\n",
-       "      <td>416.67$^{*** }$</td>\n",
-       "      <td>416.67$^{*** }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(69.49)</td>\n",
-       "      <td>(70.87)</td>\n",
-       "      <td>(69.49)</td>\n",
-       "      <td>(69.49)</td>\n",
-       "      <td>(69.49)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>S1</th>\n",
-       "      <td></td>\n",
-       "      <td>197.85$^{ }$</td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td></td>\n",
-       "      <td>(143.81)</td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>S2</th>\n",
-       "      <td></td>\n",
-       "      <td>-169.25$^{ }$</td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td></td>\n",
-       "      <td>(142.74)</td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "    </tr>\n",
-       "  <tr><td colspan=\"6\" style=\"border-bottom: 1px solid black\">\n",
-       "            </td></tr>  <tbody>\n",
-       "    <tr>\n",
-       "      <th>Observations</th>\n",
-       "      <td>442.0</td>\n",
-       "      <td>442.0</td>\n",
-       "      <td>442.0</td>\n",
-       "      <td>442.0</td>\n",
-       "      <td>442.0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>R$^2$</th>\n",
-       "      <td>0.4</td>\n",
-       "      <td>0.4</td>\n",
-       "      <td>0.4</td>\n",
-       "      <td>0.4</td>\n",
-       "      <td>0.4</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>Adj. R$^2$</th>\n",
-       "      <td>0.39</td>\n",
-       "      <td>0.39</td>\n",
-       "      <td>0.39</td>\n",
-       "      <td>0.39</td>\n",
-       "      <td>0.39</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>Residual Std. Error</th>\n",
-       "      <td>59.98</td>\n",
-       "      <td>59.98</td>\n",
-       "      <td>59.98</td>\n",
-       "      <td>59.98</td>\n",
-       "      <td>59.98</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>F Statistic</th>\n",
-       "      <td>72.91$^{***}$</td>\n",
-       "      <td>48.91$^{***}$</td>\n",
-       "      <td>72.91$^{***}$</td>\n",
-       "      <td>72.91$^{***}$</td>\n",
-       "      <td>72.91$^{***}$</td>\n",
-       "    </tr>\n",
-       "  <tr><td colspan=\"6\" style=\"border-bottom: 1px solid black\">\n",
-       "        </td></tr>\n",
-       "        <tr><td style=\"text-align: left\">Note:</td><td colspan=\"5\"\n",
-       "        style=\"text-align: right\"><sup>***</sup>p&lt;0.01; <sup>**</sup>p&lt;0.05; <sup>*</sup>p&lt;0.1 </td></tbody>\n",
-       "</table>"
-      ],
-      "text/plain": [
-       "<IPython.core.display.HTML object>"
-      ]
-     },
-     "metadata": {},
-     "execution_count": 13
-    }
-   ],
-   "metadata": {}
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 14,
-   "source": [
-    "ex_tex = et.estimation_table(\n",
-    "    [est, est2, est3, est4, est5],\n",
-    "    return_type=\"latex\",\n",
-    "    render_options={\"caption\": \"This is a caption\"},\n",
-    "    left_decimals=4,\n",
-    "    custom_col_names=list(\"abcde\"),\n",
-    "    alignment_warning=False,\n",
-    "    siunitx_warning=False,\n",
-    ")\n",
-    "Latex(ex_tex)"
-   ],
-   "outputs": [
-    {
-     "output_type": "execute_result",
-     "data": {
-      "text/latex": [
-       "\\begin{table}\n",
-       "\\centering\n",
-       "\\caption{This is a caption}\n",
-       "\\begin{tabular}{lS[table-format =4.2]S[table-format =4.2]S[table-format =4.2]S[table-format =4.2]S[table-format =4.2]}\n",
-       "\\toprule\n",
-       "{} &              {a} &              {b} &              {c} &              {d} &              {e} \\\\\n",
-       "\\midrule\n",
-       "const &  152.13$^{*** }$ &  152.13$^{*** }$ &  152.13$^{*** }$ &  152.13$^{*** }$ &  152.13$^{*** }$ \\\\\n",
-       "      &           (2.85) &           (2.85) &           (2.85) &           (2.85) &           (2.85) \\\\\n",
-       "Age   &      37.24$^{ }$ &       24.7$^{ }$ &      37.24$^{ }$ &      37.24$^{ }$ &      37.24$^{ }$ \\\\\n",
-       "      &          (64.12) &          (65.41) &          (64.12) &          (64.12) &          (64.12) \\\\\n",
-       "Sex   &   -106.58$^{* }$ &     -82.86$^{ }$ &   -106.58$^{* }$ &   -106.58$^{* }$ &   -106.58$^{* }$ \\\\\n",
-       "      &          (62.13) &          (64.85) &          (62.13) &          (62.13) &          (62.13) \\\\\n",
-       "BMI   &  787.18$^{*** }$ &  789.74$^{*** }$ &  787.18$^{*** }$ &  787.18$^{*** }$ &  787.18$^{*** }$ \\\\\n",
-       "      &          (65.42) &          (66.89) &          (65.42) &          (65.42) &          (65.42) \\\\\n",
-       "ABP   &  416.67$^{*** }$ &  397.58$^{*** }$ &  416.67$^{*** }$ &  416.67$^{*** }$ &  416.67$^{*** }$ \\\\\n",
-       "      &          (69.49) &          (70.87) &          (69.49) &          (69.49) &          (69.49) \\\\\n",
-       "S1    &                  &     197.85$^{ }$ &                  &                  &                  \\\\\n",
-       "      &                  &         (143.81) &                  &                  &                  \\\\\n",
-       "S2    &                  &    -169.25$^{ }$ &                  &                  &                  \\\\\n",
-       "      &                  &         (142.74) &                  &                  &                  \\\\\n",
-       "\\midrule\n",
-       "Observations &          442.0 &          442.0 &          442.0 &          442.0 &          442.0 \\\\\n",
-       "R$^2$ &            0.4 &            0.4 &            0.4 &            0.4 &            0.4 \\\\\n",
-       "Adj. R$^2$ &           0.39 &           0.39 &           0.39 &           0.39 &           0.39 \\\\\n",
-       "Residual Std. Error &          59.98 &          59.98 &          59.98 &          59.98 &          59.98 \\\\\n",
-       "F Statistic &  72.91$^{***}$ &  48.91$^{***}$ &  72.91$^{***}$ &  72.91$^{***}$ &  72.91$^{***}$ \\\\\n",
-       "\\midrule\n",
-       "\\textit{Note:} & \\multicolumn{5}{r}{$^{***}$p$<$0.01;$^{**}$p$<$0.05;$^{*}$p$<$0.1} \\\\\n",
-       "\\bottomrule\n",
-       "\\end{tabular}\n",
-       "\n",
-       "\\end{table}\n"
-      ],
-      "text/plain": [
-       "<IPython.core.display.Latex object>"
-      ]
-     },
-     "metadata": {},
-     "execution_count": 14
-    }
-   ],
-   "metadata": {}
-  },
-  {
-   "cell_type": "markdown",
-   "source": [
-    "Column names can be hidden by passing `show_col_names=False`:"
-   ],
-   "metadata": {}
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 15,
-   "source": [
-    "ex_html = et.estimation_table(\n",
-    "    [est, est2, est3, est4, est5],\n",
-    "    return_type=\"html\",\n",
-    "    render_options={\"caption\": \"This is a caption\"},\n",
-    "    show_col_names=False,\n",
-    ")\n",
-    "HTML(ex_html)"
-   ],
-   "outputs": [
-    {
-     "output_type": "execute_result",
-     "data": {
-      "text/html": [
-       "This is a caption<br><table border=\"1\" class=\"dataframe\">\n",
-       "  <thead>\n",
-       "    <tr style=\"text-align: center;\">\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "    </tr>\n",
-       "  </thead>\n",
-       "  <tbody>\n",
-       "    <tr>\n",
-       "      <th>const</th>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(2.85)</td>\n",
-       "      <td>(2.85)</td>\n",
-       "      <td>(2.85)</td>\n",
-       "      <td>(2.85)</td>\n",
-       "      <td>(2.85)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>Age</th>\n",
-       "      <td>37.24$^{ }$</td>\n",
-       "      <td>24.7$^{ }$</td>\n",
-       "      <td>37.24$^{ }$</td>\n",
-       "      <td>37.24$^{ }$</td>\n",
-       "      <td>37.24$^{ }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(64.12)</td>\n",
-       "      <td>(65.41)</td>\n",
-       "      <td>(64.12)</td>\n",
-       "      <td>(64.12)</td>\n",
-       "      <td>(64.12)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>Sex</th>\n",
-       "      <td>-106.58$^{* }$</td>\n",
-       "      <td>-82.86$^{ }$</td>\n",
-       "      <td>-106.58$^{* }$</td>\n",
-       "      <td>-106.58$^{* }$</td>\n",
-       "      <td>-106.58$^{* }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(62.13)</td>\n",
-       "      <td>(64.85)</td>\n",
-       "      <td>(62.13)</td>\n",
-       "      <td>(62.13)</td>\n",
-       "      <td>(62.13)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>BMI</th>\n",
-       "      <td>787.18$^{*** }$</td>\n",
-       "      <td>789.74$^{*** }$</td>\n",
-       "      <td>787.18$^{*** }$</td>\n",
-       "      <td>787.18$^{*** }$</td>\n",
-       "      <td>787.18$^{*** }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(65.42)</td>\n",
-       "      <td>(66.89)</td>\n",
-       "      <td>(65.42)</td>\n",
-       "      <td>(65.42)</td>\n",
-       "      <td>(65.42)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>ABP</th>\n",
-       "      <td>416.67$^{*** }$</td>\n",
-       "      <td>397.58$^{*** }$</td>\n",
-       "      <td>416.67$^{*** }$</td>\n",
-       "      <td>416.67$^{*** }$</td>\n",
-       "      <td>416.67$^{*** }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(69.49)</td>\n",
-       "      <td>(70.87)</td>\n",
-       "      <td>(69.49)</td>\n",
-       "      <td>(69.49)</td>\n",
-       "      <td>(69.49)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>S1</th>\n",
-       "      <td></td>\n",
-       "      <td>197.85$^{ }$</td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td></td>\n",
-       "      <td>(143.81)</td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>S2</th>\n",
-       "      <td></td>\n",
-       "      <td>-169.25$^{ }$</td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td></td>\n",
-       "      <td>(142.74)</td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "    </tr>\n",
-       "  <tr><td colspan=\"6\" style=\"border-bottom: 1px solid black\">\n",
-       "            </td></tr>  <tbody>\n",
-       "    <tr>\n",
-       "      <th>Observations</th>\n",
-       "      <td>442.0</td>\n",
-       "      <td>442.0</td>\n",
-       "      <td>442.0</td>\n",
-       "      <td>442.0</td>\n",
-       "      <td>442.0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>R$^2$</th>\n",
-       "      <td>0.4</td>\n",
-       "      <td>0.4</td>\n",
-       "      <td>0.4</td>\n",
-       "      <td>0.4</td>\n",
-       "      <td>0.4</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>Adj. R$^2$</th>\n",
-       "      <td>0.39</td>\n",
-       "      <td>0.39</td>\n",
-       "      <td>0.39</td>\n",
-       "      <td>0.39</td>\n",
-       "      <td>0.39</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>Residual Std. Error</th>\n",
-       "      <td>59.98</td>\n",
-       "      <td>59.98</td>\n",
-       "      <td>59.98</td>\n",
-       "      <td>59.98</td>\n",
-       "      <td>59.98</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>F Statistic</th>\n",
-       "      <td>72.91$^{***}$</td>\n",
-       "      <td>48.91$^{***}$</td>\n",
-       "      <td>72.91$^{***}$</td>\n",
-       "      <td>72.91$^{***}$</td>\n",
-       "      <td>72.91$^{***}$</td>\n",
-       "    </tr>\n",
-       "  <tr><td colspan=\"6\" style=\"border-bottom: 1px solid black\">\n",
-       "        </td></tr>\n",
-       "        <tr><td style=\"text-align: left\">Note:</td><td colspan=\"5\"\n",
-       "        style=\"text-align: right\"><sup>***</sup>p&lt;0.01; <sup>**</sup>p&lt;0.05; <sup>*</sup>p&lt;0.1 </td></tbody>\n",
-       "</table>"
-      ],
-      "text/plain": [
-       "<IPython.core.display.HTML object>"
-      ]
-     },
-     "metadata": {},
-     "execution_count": 15
-    }
-   ],
-   "metadata": {}
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 16,
-   "source": [
-    "ex_tex = et.estimation_table(\n",
-    "    [est, est2, est3, est4, est5],\n",
-    "    return_type=\"latex\",\n",
-    "    render_options={\"caption\": \"This is a caption\"},\n",
-    "    left_decimals=4,\n",
-    "    show_col_names=False,\n",
-    "    alignment_warning=False,\n",
-    "    siunitx_warning=False,\n",
-    ")\n",
-    "Latex(ex_tex)"
-   ],
-   "outputs": [
-    {
-     "output_type": "execute_result",
-     "data": {
-      "text/latex": [
-       "\\begin{table}\n",
-       "\\centering\n",
-       "\\caption{This is a caption}\n",
-       "\\begin{tabular}{lS[table-format =4.2]S[table-format =4.2]S[table-format =4.2]S[table-format =4.2]S[table-format =4.2]}\n",
-       "\\toprule\n",
-       "{} \\\\\n",
-       "\\midrule\n",
-       "const &  152.13$^{*** }$ &  152.13$^{*** }$ &  152.13$^{*** }$ &  152.13$^{*** }$ &  152.13$^{*** }$ \\\\\n",
-       "      &           (2.85) &           (2.85) &           (2.85) &           (2.85) &           (2.85) \\\\\n",
-       "Age   &      37.24$^{ }$ &       24.7$^{ }$ &      37.24$^{ }$ &      37.24$^{ }$ &      37.24$^{ }$ \\\\\n",
-       "      &          (64.12) &          (65.41) &          (64.12) &          (64.12) &          (64.12) \\\\\n",
-       "Sex   &   -106.58$^{* }$ &     -82.86$^{ }$ &   -106.58$^{* }$ &   -106.58$^{* }$ &   -106.58$^{* }$ \\\\\n",
-       "      &          (62.13) &          (64.85) &          (62.13) &          (62.13) &          (62.13) \\\\\n",
-       "BMI   &  787.18$^{*** }$ &  789.74$^{*** }$ &  787.18$^{*** }$ &  787.18$^{*** }$ &  787.18$^{*** }$ \\\\\n",
-       "      &          (65.42) &          (66.89) &          (65.42) &          (65.42) &          (65.42) \\\\\n",
-       "ABP   &  416.67$^{*** }$ &  397.58$^{*** }$ &  416.67$^{*** }$ &  416.67$^{*** }$ &  416.67$^{*** }$ \\\\\n",
-       "      &          (69.49) &          (70.87) &          (69.49) &          (69.49) &          (69.49) \\\\\n",
-       "S1    &                  &     197.85$^{ }$ &                  &                  &                  \\\\\n",
-       "      &                  &         (143.81) &                  &                  &                  \\\\\n",
-       "S2    &                  &    -169.25$^{ }$ &                  &                  &                  \\\\\n",
-       "      &                  &         (142.74) &                  &                  &                  \\\\\n",
-       "\\midrule\n",
-       "Observations &          442.0 &          442.0 &          442.0 &          442.0 &          442.0 \\\\\n",
-       "R$^2$ &            0.4 &            0.4 &            0.4 &            0.4 &            0.4 \\\\\n",
-       "Adj. R$^2$ &           0.39 &           0.39 &           0.39 &           0.39 &           0.39 \\\\\n",
-       "Residual Std. Error &          59.98 &          59.98 &          59.98 &          59.98 &          59.98 \\\\\n",
-       "F Statistic &  72.91$^{***}$ &  48.91$^{***}$ &  72.91$^{***}$ &  72.91$^{***}$ &  72.91$^{***}$ \\\\\n",
-       "\\midrule\n",
-       "\\textit{Note:} & \\multicolumn{5}{r}{$^{***}$p$<$0.01;$^{**}$p$<$0.05;$^{*}$p$<$0.1} \\\\\n",
-       "\\bottomrule\n",
-       "\\end{tabular}\n",
-       "\n",
-       "\\end{table}\n"
-      ],
-      "text/plain": [
-       "<IPython.core.display.Latex object>"
-      ]
-     },
-     "metadata": {},
-     "execution_count": 16
-    }
-   ],
-   "metadata": {}
-  },
-  {
-   "cell_type": "markdown",
-   "source": [
-    "### Model names"
-   ],
-   "metadata": {}
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 17,
-   "source": [
-    "custom_mod_names = {\"M a\": [0], \"M b-d\": [1, 2, 3], \"M e\": [4]}"
-   ],
-   "outputs": [],
-   "metadata": {}
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 18,
-   "source": [
-    "ex_html = et.estimation_table(\n",
-    "    [est, est2, est3, est4, est5],\n",
-    "    return_type=\"html\",\n",
-    "    render_options={\"caption\": \"This is a caption\"},\n",
-    "    custom_model_names=custom_mod_names,\n",
-    "    custom_col_names=list(\"abcde\"),\n",
-    ")\n",
-    "HTML(ex_html)"
-   ],
-   "outputs": [
-    {
-     "output_type": "execute_result",
-     "data": {
-      "text/html": [
-       "This is a caption<br><table border=\"1\" class=\"dataframe\">\n",
-       "  <thead>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <th>M a</th>\n",
-       "      <th colspan=\"3\" halign=\"left\">M b-d</th>\n",
-       "      <th>M e</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <th>a</th>\n",
-       "      <th>b</th>\n",
-       "      <th>c</th>\n",
-       "      <th>d</th>\n",
-       "      <th>e</th>\n",
-       "    </tr>\n",
-       "  </thead>\n",
-       "  <tbody>\n",
-       "    <tr>\n",
-       "      <th>const</th>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(2.85)</td>\n",
-       "      <td>(2.85)</td>\n",
-       "      <td>(2.85)</td>\n",
-       "      <td>(2.85)</td>\n",
-       "      <td>(2.85)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>Age</th>\n",
-       "      <td>37.24$^{ }$</td>\n",
-       "      <td>24.7$^{ }$</td>\n",
-       "      <td>37.24$^{ }$</td>\n",
-       "      <td>37.24$^{ }$</td>\n",
-       "      <td>37.24$^{ }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(64.12)</td>\n",
-       "      <td>(65.41)</td>\n",
-       "      <td>(64.12)</td>\n",
-       "      <td>(64.12)</td>\n",
-       "      <td>(64.12)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>Sex</th>\n",
-       "      <td>-106.58$^{* }$</td>\n",
-       "      <td>-82.86$^{ }$</td>\n",
-       "      <td>-106.58$^{* }$</td>\n",
-       "      <td>-106.58$^{* }$</td>\n",
-       "      <td>-106.58$^{* }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(62.13)</td>\n",
-       "      <td>(64.85)</td>\n",
-       "      <td>(62.13)</td>\n",
-       "      <td>(62.13)</td>\n",
-       "      <td>(62.13)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>BMI</th>\n",
-       "      <td>787.18$^{*** }$</td>\n",
-       "      <td>789.74$^{*** }$</td>\n",
-       "      <td>787.18$^{*** }$</td>\n",
-       "      <td>787.18$^{*** }$</td>\n",
-       "      <td>787.18$^{*** }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(65.42)</td>\n",
-       "      <td>(66.89)</td>\n",
-       "      <td>(65.42)</td>\n",
-       "      <td>(65.42)</td>\n",
-       "      <td>(65.42)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>ABP</th>\n",
-       "      <td>416.67$^{*** }$</td>\n",
-       "      <td>397.58$^{*** }$</td>\n",
-       "      <td>416.67$^{*** }$</td>\n",
-       "      <td>416.67$^{*** }$</td>\n",
-       "      <td>416.67$^{*** }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(69.49)</td>\n",
-       "      <td>(70.87)</td>\n",
-       "      <td>(69.49)</td>\n",
-       "      <td>(69.49)</td>\n",
-       "      <td>(69.49)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>S1</th>\n",
-       "      <td></td>\n",
-       "      <td>197.85$^{ }$</td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td></td>\n",
-       "      <td>(143.81)</td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>S2</th>\n",
-       "      <td></td>\n",
-       "      <td>-169.25$^{ }$</td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td></td>\n",
-       "      <td>(142.74)</td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "    </tr>\n",
-       "  <tr><td colspan=\"6\" style=\"border-bottom: 1px solid black\">\n",
-       "            </td></tr>  <tbody>\n",
-       "    <tr>\n",
-       "      <th>Observations</th>\n",
-       "      <td>442.0</td>\n",
-       "      <td>442.0</td>\n",
-       "      <td>442.0</td>\n",
-       "      <td>442.0</td>\n",
-       "      <td>442.0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>R$^2$</th>\n",
-       "      <td>0.4</td>\n",
-       "      <td>0.4</td>\n",
-       "      <td>0.4</td>\n",
-       "      <td>0.4</td>\n",
-       "      <td>0.4</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>Adj. R$^2$</th>\n",
-       "      <td>0.39</td>\n",
-       "      <td>0.39</td>\n",
-       "      <td>0.39</td>\n",
-       "      <td>0.39</td>\n",
-       "      <td>0.39</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>Residual Std. Error</th>\n",
-       "      <td>59.98</td>\n",
-       "      <td>59.98</td>\n",
-       "      <td>59.98</td>\n",
-       "      <td>59.98</td>\n",
-       "      <td>59.98</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>F Statistic</th>\n",
-       "      <td>72.91$^{***}$</td>\n",
-       "      <td>48.91$^{***}$</td>\n",
-       "      <td>72.91$^{***}$</td>\n",
-       "      <td>72.91$^{***}$</td>\n",
-       "      <td>72.91$^{***}$</td>\n",
-       "    </tr>\n",
-       "  <tr><td colspan=\"6\" style=\"border-bottom: 1px solid black\">\n",
-       "        </td></tr>\n",
-       "        <tr><td style=\"text-align: left\">Note:</td><td colspan=\"5\"\n",
-       "        style=\"text-align: right\"><sup>***</sup>p&lt;0.01; <sup>**</sup>p&lt;0.05; <sup>*</sup>p&lt;0.1 </td></tbody>\n",
-       "</table>"
-      ],
-      "text/plain": [
-       "<IPython.core.display.HTML object>"
-      ]
-     },
-     "metadata": {},
-     "execution_count": 18
-    }
-   ],
-   "metadata": {}
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 19,
-   "source": [
-    "ex_tex = et.estimation_table(\n",
-    "    [est, est2, est3, est4, est5],\n",
-    "    return_type=\"latex\",\n",
-    "    render_options={\"caption\": \"This is a caption\"},\n",
-    "    left_decimals=4,\n",
-    "    custom_model_names=custom_mod_names,\n",
-    "    custom_col_names=list(\"abcde\"),\n",
-    "    alignment_warning=False,\n",
-    "    siunitx_warning=False,\n",
-    ")\n",
-    "Latex(ex_tex)"
-   ],
-   "outputs": [
-    {
-     "output_type": "execute_result",
-     "data": {
-      "text/latex": [
-       "\\begin{table}\n",
-       "\\centering\n",
-       "\\caption{This is a caption}\n",
-       "\\begin{tabular}{lS[table-format =4.2]S[table-format =4.2]S[table-format =4.2]S[table-format =4.2]S[table-format =4.2]}\n",
-       "\\toprule\n",
-       "{} &            {M a} & \\multicolumn{3}{c}{{M b-d}} &            {M e} \\\\\n",
-       "\\cmidrule(lr){2-2}\n",
-       "\\cmidrule(lr){3-5}\n",
-       "\\cmidrule(lr){6-6}\n",
-       "\n",
-       "{} &              {a} &              {b} &              {c} &              {d} &              {e} \\\\\n",
-       "\\midrule\n",
-       "const &  152.13$^{*** }$ &  152.13$^{*** }$ &  152.13$^{*** }$ &  152.13$^{*** }$ &  152.13$^{*** }$ \\\\\n",
-       "      &           (2.85) &           (2.85) &           (2.85) &           (2.85) &           (2.85) \\\\\n",
-       "Age   &      37.24$^{ }$ &       24.7$^{ }$ &      37.24$^{ }$ &      37.24$^{ }$ &      37.24$^{ }$ \\\\\n",
-       "      &          (64.12) &          (65.41) &          (64.12) &          (64.12) &          (64.12) \\\\\n",
-       "Sex   &   -106.58$^{* }$ &     -82.86$^{ }$ &   -106.58$^{* }$ &   -106.58$^{* }$ &   -106.58$^{* }$ \\\\\n",
-       "      &          (62.13) &          (64.85) &          (62.13) &          (62.13) &          (62.13) \\\\\n",
-       "BMI   &  787.18$^{*** }$ &  789.74$^{*** }$ &  787.18$^{*** }$ &  787.18$^{*** }$ &  787.18$^{*** }$ \\\\\n",
-       "      &          (65.42) &          (66.89) &          (65.42) &          (65.42) &          (65.42) \\\\\n",
-       "ABP   &  416.67$^{*** }$ &  397.58$^{*** }$ &  416.67$^{*** }$ &  416.67$^{*** }$ &  416.67$^{*** }$ \\\\\n",
-       "      &          (69.49) &          (70.87) &          (69.49) &          (69.49) &          (69.49) \\\\\n",
-       "S1    &                  &     197.85$^{ }$ &                  &                  &                  \\\\\n",
-       "      &                  &         (143.81) &                  &                  &                  \\\\\n",
-       "S2    &                  &    -169.25$^{ }$ &                  &                  &                  \\\\\n",
-       "      &                  &         (142.74) &                  &                  &                  \\\\\n",
-       "\\midrule\n",
-       "Observations &          442.0 &          442.0 &          442.0 &          442.0 &          442.0 \\\\\n",
-       "R$^2$ &            0.4 &            0.4 &            0.4 &            0.4 &            0.4 \\\\\n",
-       "Adj. R$^2$ &           0.39 &           0.39 &           0.39 &           0.39 &           0.39 \\\\\n",
-       "Residual Std. Error &          59.98 &          59.98 &          59.98 &          59.98 &          59.98 \\\\\n",
-       "F Statistic &  72.91$^{***}$ &  48.91$^{***}$ &  72.91$^{***}$ &  72.91$^{***}$ &  72.91$^{***}$ \\\\\n",
-       "\\midrule\n",
-       "\\textit{Note:} & \\multicolumn{5}{r}{$^{***}$p$<$0.01;$^{**}$p$<$0.05;$^{*}$p$<$0.1} \\\\\n",
-       "\\bottomrule\n",
-       "\\end{tabular}\n",
-       "\n",
-       "\\end{table}\n"
-      ],
-      "text/plain": [
-       "<IPython.core.display.Latex object>"
-      ]
-     },
-     "metadata": {},
-     "execution_count": 19
-    }
-   ],
-   "metadata": {}
-  },
-  {
-   "cell_type": "markdown",
-   "source": [
-    "### Index name"
-   ],
-   "metadata": {}
-  },
-  {
-   "cell_type": "markdown",
-   "source": [
-    "By default, the index name is \"index\":"
-   ],
-   "metadata": {}
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 20,
-   "source": [
-    "ex_html = et.estimation_table(\n",
-    "    [est, est2, est3, est4, est5],\n",
-    "    return_type=\"html\",\n",
-    "    render_options={\"caption\": \"This is a caption\", \"index_names\": True},\n",
-    "    custom_model_names=custom_mod_names,\n",
-    ")\n",
-    "HTML(ex_html)"
-   ],
-   "outputs": [
-    {
-     "output_type": "execute_result",
-     "data": {
-      "text/html": [
-       "This is a caption<br><table border=\"1\" class=\"dataframe\">\n",
-       "  <thead>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <th>M a</th>\n",
-       "      <th colspan=\"3\" halign=\"left\">M b-d</th>\n",
-       "      <th>M e</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <th>(1)</th>\n",
-       "      <th>(2)</th>\n",
-       "      <th>(3)</th>\n",
-       "      <th>(4)</th>\n",
-       "      <th>(5)</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>index</th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "    </tr>\n",
-       "  </thead>\n",
-       "  <tbody>\n",
-       "    <tr>\n",
-       "      <th>const</th>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(2.85)</td>\n",
-       "      <td>(2.85)</td>\n",
-       "      <td>(2.85)</td>\n",
-       "      <td>(2.85)</td>\n",
-       "      <td>(2.85)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>Age</th>\n",
-       "      <td>37.24$^{ }$</td>\n",
-       "      <td>24.7$^{ }$</td>\n",
-       "      <td>37.24$^{ }$</td>\n",
-       "      <td>37.24$^{ }$</td>\n",
-       "      <td>37.24$^{ }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(64.12)</td>\n",
-       "      <td>(65.41)</td>\n",
-       "      <td>(64.12)</td>\n",
-       "      <td>(64.12)</td>\n",
-       "      <td>(64.12)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>Sex</th>\n",
-       "      <td>-106.58$^{* }$</td>\n",
-       "      <td>-82.86$^{ }$</td>\n",
-       "      <td>-106.58$^{* }$</td>\n",
-       "      <td>-106.58$^{* }$</td>\n",
-       "      <td>-106.58$^{* }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(62.13)</td>\n",
-       "      <td>(64.85)</td>\n",
-       "      <td>(62.13)</td>\n",
-       "      <td>(62.13)</td>\n",
-       "      <td>(62.13)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>BMI</th>\n",
-       "      <td>787.18$^{*** }$</td>\n",
-       "      <td>789.74$^{*** }$</td>\n",
-       "      <td>787.18$^{*** }$</td>\n",
-       "      <td>787.18$^{*** }$</td>\n",
-       "      <td>787.18$^{*** }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(65.42)</td>\n",
-       "      <td>(66.89)</td>\n",
-       "      <td>(65.42)</td>\n",
-       "      <td>(65.42)</td>\n",
-       "      <td>(65.42)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>ABP</th>\n",
-       "      <td>416.67$^{*** }$</td>\n",
-       "      <td>397.58$^{*** }$</td>\n",
-       "      <td>416.67$^{*** }$</td>\n",
-       "      <td>416.67$^{*** }$</td>\n",
-       "      <td>416.67$^{*** }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(69.49)</td>\n",
-       "      <td>(70.87)</td>\n",
-       "      <td>(69.49)</td>\n",
-       "      <td>(69.49)</td>\n",
-       "      <td>(69.49)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>S1</th>\n",
-       "      <td></td>\n",
-       "      <td>197.85$^{ }$</td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td></td>\n",
-       "      <td>(143.81)</td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>S2</th>\n",
-       "      <td></td>\n",
-       "      <td>-169.25$^{ }$</td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td></td>\n",
-       "      <td>(142.74)</td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "    </tr>\n",
-       "  <tr><td colspan=\"6\" style=\"border-bottom: 1px solid black\">\n",
-       "            </td></tr>  <tbody>\n",
-       "    <tr>\n",
-       "      <th>Observations</th>\n",
-       "      <td>442.0</td>\n",
-       "      <td>442.0</td>\n",
-       "      <td>442.0</td>\n",
-       "      <td>442.0</td>\n",
-       "      <td>442.0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>R$^2$</th>\n",
-       "      <td>0.4</td>\n",
-       "      <td>0.4</td>\n",
-       "      <td>0.4</td>\n",
-       "      <td>0.4</td>\n",
-       "      <td>0.4</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>Adj. R$^2$</th>\n",
-       "      <td>0.39</td>\n",
-       "      <td>0.39</td>\n",
-       "      <td>0.39</td>\n",
-       "      <td>0.39</td>\n",
-       "      <td>0.39</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>Residual Std. Error</th>\n",
-       "      <td>59.98</td>\n",
-       "      <td>59.98</td>\n",
-       "      <td>59.98</td>\n",
-       "      <td>59.98</td>\n",
-       "      <td>59.98</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>F Statistic</th>\n",
-       "      <td>72.91$^{***}$</td>\n",
-       "      <td>48.91$^{***}$</td>\n",
-       "      <td>72.91$^{***}$</td>\n",
-       "      <td>72.91$^{***}$</td>\n",
-       "      <td>72.91$^{***}$</td>\n",
-       "    </tr>\n",
-       "  <tr><td colspan=\"6\" style=\"border-bottom: 1px solid black\">\n",
-       "        </td></tr>\n",
-       "        <tr><td style=\"text-align: left\">Note:</td><td colspan=\"5\"\n",
-       "        style=\"text-align: right\"><sup>***</sup>p&lt;0.01; <sup>**</sup>p&lt;0.05; <sup>*</sup>p&lt;0.1 </td></tbody>\n",
-       "</table>"
-      ],
-      "text/plain": [
-       "<IPython.core.display.HTML object>"
-      ]
-     },
-     "metadata": {},
-     "execution_count": 20
-    }
-   ],
-   "metadata": {}
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 21,
-   "source": [
-    "ex_tex = et.estimation_table(\n",
-    "    [est, est2, est3, est4, est5],\n",
-    "    return_type=\"latex\",\n",
-    "    render_options={\"caption\": \"This is a caption\", \"index_names\": True},\n",
-    "    left_decimals=4,\n",
-    "    custom_model_names=custom_mod_names,\n",
-    "    alignment_warning=False,\n",
-    "    siunitx_warning=False,\n",
-    ")\n",
-    "Latex(ex_tex)"
-   ],
-   "outputs": [
-    {
-     "output_type": "execute_result",
-     "data": {
-      "text/latex": [
-       "\\begin{table}\n",
-       "\\centering\n",
-       "\\caption{This is a caption}\n",
-       "\\begin{tabular}{lS[table-format =4.2]S[table-format =4.2]S[table-format =4.2]S[table-format =4.2]S[table-format =4.2]}\n",
-       "\\toprule\n",
-       "{} &            {M a} & \\multicolumn{3}{c}{{M b-d}} &            {M e} \\\\\n",
-       "\\cmidrule(lr){2-2}\n",
-       "\\cmidrule(lr){3-5}\n",
-       "\\cmidrule(lr){6-6}\n",
-       "\n",
-       "{} &            {(1)} &            {(2)} &            {(3)} &            {(4)} &            {(5)} \\\\\n",
-       "index &                  &                  &                  &                  &                  \\\\\n",
-       "\\midrule\n",
-       "const &  152.13$^{*** }$ &  152.13$^{*** }$ &  152.13$^{*** }$ &  152.13$^{*** }$ &  152.13$^{*** }$ \\\\\n",
-       "      &           (2.85) &           (2.85) &           (2.85) &           (2.85) &           (2.85) \\\\\n",
-       "Age   &      37.24$^{ }$ &       24.7$^{ }$ &      37.24$^{ }$ &      37.24$^{ }$ &      37.24$^{ }$ \\\\\n",
-       "      &          (64.12) &          (65.41) &          (64.12) &          (64.12) &          (64.12) \\\\\n",
-       "Sex   &   -106.58$^{* }$ &     -82.86$^{ }$ &   -106.58$^{* }$ &   -106.58$^{* }$ &   -106.58$^{* }$ \\\\\n",
-       "      &          (62.13) &          (64.85) &          (62.13) &          (62.13) &          (62.13) \\\\\n",
-       "BMI   &  787.18$^{*** }$ &  789.74$^{*** }$ &  787.18$^{*** }$ &  787.18$^{*** }$ &  787.18$^{*** }$ \\\\\n",
-       "      &          (65.42) &          (66.89) &          (65.42) &          (65.42) &          (65.42) \\\\\n",
-       "ABP   &  416.67$^{*** }$ &  397.58$^{*** }$ &  416.67$^{*** }$ &  416.67$^{*** }$ &  416.67$^{*** }$ \\\\\n",
-       "      &          (69.49) &          (70.87) &          (69.49) &          (69.49) &          (69.49) \\\\\n",
-       "S1    &                  &     197.85$^{ }$ &                  &                  &                  \\\\\n",
-       "      &                  &         (143.81) &                  &                  &                  \\\\\n",
-       "S2    &                  &    -169.25$^{ }$ &                  &                  &                  \\\\\n",
-       "      &                  &         (142.74) &                  &                  &                  \\\\\n",
-       "\\midrule\n",
-       "Observations &          442.0 &          442.0 &          442.0 &          442.0 &          442.0 \\\\\n",
-       "R$^2$ &            0.4 &            0.4 &            0.4 &            0.4 &            0.4 \\\\\n",
-       "Adj. R$^2$ &           0.39 &           0.39 &           0.39 &           0.39 &           0.39 \\\\\n",
-       "Residual Std. Error &          59.98 &          59.98 &          59.98 &          59.98 &          59.98 \\\\\n",
-       "F Statistic &  72.91$^{***}$ &  48.91$^{***}$ &  72.91$^{***}$ &  72.91$^{***}$ &  72.91$^{***}$ \\\\\n",
-       "\\midrule\n",
-       "\\textit{Note:} & \\multicolumn{5}{r}{$^{***}$p$<$0.01;$^{**}$p$<$0.05;$^{*}$p$<$0.1} \\\\\n",
-       "\\bottomrule\n",
-       "\\end{tabular}\n",
-       "\n",
-       "\\end{table}\n"
-      ],
-      "text/plain": [
-       "<IPython.core.display.Latex object>"
-      ]
-     },
-     "metadata": {},
-     "execution_count": 21
-    }
-   ],
-   "metadata": {}
-  },
-  {
-   "cell_type": "markdown",
-   "source": [
-    "This can be customized by passing a different index name to `custom_index_names`:"
-   ],
-   "metadata": {}
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 22,
-   "source": [
-    "ex_html = et.estimation_table(\n",
-    "    [est, est2, est3, est4, est5],\n",
-    "    return_type=\"html\",\n",
-    "    render_options={\n",
-    "        \"caption\": \"This is a caption\",\n",
-    "    },\n",
-    "    custom_index_names=[\"Variables\"],\n",
-    "    custom_model_names=custom_mod_names,\n",
-    ")\n",
-    "HTML(ex_html)"
-   ],
-   "outputs": [
-    {
-     "output_type": "execute_result",
-     "data": {
-      "text/html": [
-       "This is a caption<br><table border=\"1\" class=\"dataframe\">\n",
-       "  <thead>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <th>M a</th>\n",
-       "      <th colspan=\"3\" halign=\"left\">M b-d</th>\n",
-       "      <th>M e</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <th>(1)</th>\n",
-       "      <th>(2)</th>\n",
-       "      <th>(3)</th>\n",
-       "      <th>(4)</th>\n",
-       "      <th>(5)</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>Variables</th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "    </tr>\n",
-       "  </thead>\n",
-       "  <tbody>\n",
-       "    <tr>\n",
-       "      <th>const</th>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(2.85)</td>\n",
-       "      <td>(2.85)</td>\n",
-       "      <td>(2.85)</td>\n",
-       "      <td>(2.85)</td>\n",
-       "      <td>(2.85)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>Age</th>\n",
-       "      <td>37.24$^{ }$</td>\n",
-       "      <td>24.7$^{ }$</td>\n",
-       "      <td>37.24$^{ }$</td>\n",
-       "      <td>37.24$^{ }$</td>\n",
-       "      <td>37.24$^{ }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(64.12)</td>\n",
-       "      <td>(65.41)</td>\n",
-       "      <td>(64.12)</td>\n",
-       "      <td>(64.12)</td>\n",
-       "      <td>(64.12)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>Sex</th>\n",
-       "      <td>-106.58$^{* }$</td>\n",
-       "      <td>-82.86$^{ }$</td>\n",
-       "      <td>-106.58$^{* }$</td>\n",
-       "      <td>-106.58$^{* }$</td>\n",
-       "      <td>-106.58$^{* }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(62.13)</td>\n",
-       "      <td>(64.85)</td>\n",
-       "      <td>(62.13)</td>\n",
-       "      <td>(62.13)</td>\n",
-       "      <td>(62.13)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>BMI</th>\n",
-       "      <td>787.18$^{*** }$</td>\n",
-       "      <td>789.74$^{*** }$</td>\n",
-       "      <td>787.18$^{*** }$</td>\n",
-       "      <td>787.18$^{*** }$</td>\n",
-       "      <td>787.18$^{*** }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(65.42)</td>\n",
-       "      <td>(66.89)</td>\n",
-       "      <td>(65.42)</td>\n",
-       "      <td>(65.42)</td>\n",
-       "      <td>(65.42)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>ABP</th>\n",
-       "      <td>416.67$^{*** }$</td>\n",
-       "      <td>397.58$^{*** }$</td>\n",
-       "      <td>416.67$^{*** }$</td>\n",
-       "      <td>416.67$^{*** }$</td>\n",
-       "      <td>416.67$^{*** }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(69.49)</td>\n",
-       "      <td>(70.87)</td>\n",
-       "      <td>(69.49)</td>\n",
-       "      <td>(69.49)</td>\n",
-       "      <td>(69.49)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>S1</th>\n",
-       "      <td></td>\n",
-       "      <td>197.85$^{ }$</td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td></td>\n",
-       "      <td>(143.81)</td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>S2</th>\n",
-       "      <td></td>\n",
-       "      <td>-169.25$^{ }$</td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td></td>\n",
-       "      <td>(142.74)</td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "    </tr>\n",
-       "  <tr><td colspan=\"6\" style=\"border-bottom: 1px solid black\">\n",
-       "            </td></tr>  <tbody>\n",
-       "    <tr>\n",
-       "      <th>Observations</th>\n",
-       "      <td>442.0</td>\n",
-       "      <td>442.0</td>\n",
-       "      <td>442.0</td>\n",
-       "      <td>442.0</td>\n",
-       "      <td>442.0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>R$^2$</th>\n",
-       "      <td>0.4</td>\n",
-       "      <td>0.4</td>\n",
-       "      <td>0.4</td>\n",
-       "      <td>0.4</td>\n",
-       "      <td>0.4</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>Adj. R$^2$</th>\n",
-       "      <td>0.39</td>\n",
-       "      <td>0.39</td>\n",
-       "      <td>0.39</td>\n",
-       "      <td>0.39</td>\n",
-       "      <td>0.39</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>Residual Std. Error</th>\n",
-       "      <td>59.98</td>\n",
-       "      <td>59.98</td>\n",
-       "      <td>59.98</td>\n",
-       "      <td>59.98</td>\n",
-       "      <td>59.98</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>F Statistic</th>\n",
-       "      <td>72.91$^{***}$</td>\n",
-       "      <td>48.91$^{***}$</td>\n",
-       "      <td>72.91$^{***}$</td>\n",
-       "      <td>72.91$^{***}$</td>\n",
-       "      <td>72.91$^{***}$</td>\n",
-       "    </tr>\n",
-       "  <tr><td colspan=\"6\" style=\"border-bottom: 1px solid black\">\n",
-       "        </td></tr>\n",
-       "        <tr><td style=\"text-align: left\">Note:</td><td colspan=\"5\"\n",
-       "        style=\"text-align: right\"><sup>***</sup>p&lt;0.01; <sup>**</sup>p&lt;0.05; <sup>*</sup>p&lt;0.1 </td></tbody>\n",
-       "</table>"
-      ],
-      "text/plain": [
-       "<IPython.core.display.HTML object>"
-      ]
-     },
-     "metadata": {},
-     "execution_count": 22
-    }
-   ],
-   "metadata": {}
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 23,
-   "source": [
-    "ex_tex = et.estimation_table(\n",
-    "    [est, est2, est3, est4, est5],\n",
-    "    return_type=\"latex\",\n",
-    "    render_options={\n",
-    "        \"caption\": \"This is a caption\",\n",
-    "    },\n",
-    "    custom_index_names=[\"Variables\"],\n",
-    "    left_decimals=4,\n",
-    "    custom_model_names=custom_mod_names,\n",
-    "    alignment_warning=False,\n",
-    "    siunitx_warning=False,\n",
-    ")\n",
-    "Latex(ex_tex)"
-   ],
-   "outputs": [
-    {
-     "output_type": "execute_result",
-     "data": {
-      "text/latex": [
-       "\\begin{table}\n",
-       "\\centering\n",
-       "\\caption{This is a caption}\n",
-       "\\begin{tabular}{lS[table-format =4.2]S[table-format =4.2]S[table-format =4.2]S[table-format =4.2]S[table-format =4.2]}\n",
-       "\\toprule\n",
-       "{} &            {M a} & \\multicolumn{3}{c}{{M b-d}} &            {M e} \\\\\n",
-       "\\cmidrule(lr){2-2}\n",
-       "\\cmidrule(lr){3-5}\n",
-       "\\cmidrule(lr){6-6}\n",
-       "\n",
-       "{} &            {(1)} &            {(2)} &            {(3)} &            {(4)} &            {(5)} \\\\\n",
-       "Variables &                  &                  &                  &                  &                  \\\\\n",
-       "\\midrule\n",
-       "const     &  152.13$^{*** }$ &  152.13$^{*** }$ &  152.13$^{*** }$ &  152.13$^{*** }$ &  152.13$^{*** }$ \\\\\n",
-       "          &           (2.85) &           (2.85) &           (2.85) &           (2.85) &           (2.85) \\\\\n",
-       "Age       &      37.24$^{ }$ &       24.7$^{ }$ &      37.24$^{ }$ &      37.24$^{ }$ &      37.24$^{ }$ \\\\\n",
-       "          &          (64.12) &          (65.41) &          (64.12) &          (64.12) &          (64.12) \\\\\n",
-       "Sex       &   -106.58$^{* }$ &     -82.86$^{ }$ &   -106.58$^{* }$ &   -106.58$^{* }$ &   -106.58$^{* }$ \\\\\n",
-       "          &          (62.13) &          (64.85) &          (62.13) &          (62.13) &          (62.13) \\\\\n",
-       "BMI       &  787.18$^{*** }$ &  789.74$^{*** }$ &  787.18$^{*** }$ &  787.18$^{*** }$ &  787.18$^{*** }$ \\\\\n",
-       "          &          (65.42) &          (66.89) &          (65.42) &          (65.42) &          (65.42) \\\\\n",
-       "ABP       &  416.67$^{*** }$ &  397.58$^{*** }$ &  416.67$^{*** }$ &  416.67$^{*** }$ &  416.67$^{*** }$ \\\\\n",
-       "          &          (69.49) &          (70.87) &          (69.49) &          (69.49) &          (69.49) \\\\\n",
-       "S1        &                  &     197.85$^{ }$ &                  &                  &                  \\\\\n",
-       "          &                  &         (143.81) &                  &                  &                  \\\\\n",
-       "S2        &                  &    -169.25$^{ }$ &                  &                  &                  \\\\\n",
-       "          &                  &         (142.74) &                  &                  &                  \\\\\n",
-       "\\midrule\n",
-       "Observations &          442.0 &          442.0 &          442.0 &          442.0 &          442.0 \\\\\n",
-       "R$^2$ &            0.4 &            0.4 &            0.4 &            0.4 &            0.4 \\\\\n",
-       "Adj. R$^2$ &           0.39 &           0.39 &           0.39 &           0.39 &           0.39 \\\\\n",
-       "Residual Std. Error &          59.98 &          59.98 &          59.98 &          59.98 &          59.98 \\\\\n",
-       "F Statistic &  72.91$^{***}$ &  48.91$^{***}$ &  72.91$^{***}$ &  72.91$^{***}$ &  72.91$^{***}$ \\\\\n",
-       "\\midrule\n",
-       "\\textit{Note:} & \\multicolumn{5}{r}{$^{***}$p$<$0.01;$^{**}$p$<$0.05;$^{*}$p$<$0.1} \\\\\n",
-       "\\bottomrule\n",
-       "\\end{tabular}\n",
-       "\n",
-       "\\end{table}\n"
-      ],
-      "text/plain": [
-       "<IPython.core.display.Latex object>"
-      ]
-     },
-     "metadata": {},
-     "execution_count": 23
-    }
-   ],
-   "metadata": {}
-  },
-  {
-   "cell_type": "markdown",
-   "source": [
-    "### Parameter names"
-   ],
-   "metadata": {}
-  },
-  {
-   "cell_type": "markdown",
-   "source": [
-    "Custom parameter names can be specified by passing a dictionary to `custom_param_names`:"
-   ],
-   "metadata": {}
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 24,
-   "source": [
-    "cust_par_names = {\"const\": \"Intercept\", \"Sex\": \"Gender\"}"
-   ],
-   "outputs": [],
-   "metadata": {}
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 25,
-   "source": [
-    "ex_html = et.estimation_table(\n",
-    "    [est, est2, est3, est4, est5],\n",
-    "    return_type=\"html\",\n",
-    "    render_options={\n",
-    "        \"caption\": \"This is a caption\",\n",
-    "    },\n",
-    "    custom_index_names=[\"Variables\"],\n",
-    "    custom_model_names=custom_mod_names,\n",
-    "    custom_param_names=cust_par_names,\n",
-    ")\n",
-    "HTML(ex_html)"
-   ],
-   "outputs": [
-    {
-     "output_type": "execute_result",
-     "data": {
-      "text/html": [
-       "This is a caption<br><table border=\"1\" class=\"dataframe\">\n",
-       "  <thead>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <th>M a</th>\n",
-       "      <th colspan=\"3\" halign=\"left\">M b-d</th>\n",
-       "      <th>M e</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <th>(1)</th>\n",
-       "      <th>(2)</th>\n",
-       "      <th>(3)</th>\n",
-       "      <th>(4)</th>\n",
-       "      <th>(5)</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>Variables</th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "    </tr>\n",
-       "  </thead>\n",
-       "  <tbody>\n",
-       "    <tr>\n",
-       "      <th>Intercept</th>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(2.85)</td>\n",
-       "      <td>(2.85)</td>\n",
-       "      <td>(2.85)</td>\n",
-       "      <td>(2.85)</td>\n",
-       "      <td>(2.85)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>Age</th>\n",
-       "      <td>37.24$^{ }$</td>\n",
-       "      <td>24.7$^{ }$</td>\n",
-       "      <td>37.24$^{ }$</td>\n",
-       "      <td>37.24$^{ }$</td>\n",
-       "      <td>37.24$^{ }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(64.12)</td>\n",
-       "      <td>(65.41)</td>\n",
-       "      <td>(64.12)</td>\n",
-       "      <td>(64.12)</td>\n",
-       "      <td>(64.12)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>Gender</th>\n",
-       "      <td>-106.58$^{* }$</td>\n",
-       "      <td>-82.86$^{ }$</td>\n",
-       "      <td>-106.58$^{* }$</td>\n",
-       "      <td>-106.58$^{* }$</td>\n",
-       "      <td>-106.58$^{* }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(62.13)</td>\n",
-       "      <td>(64.85)</td>\n",
-       "      <td>(62.13)</td>\n",
-       "      <td>(62.13)</td>\n",
-       "      <td>(62.13)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>BMI</th>\n",
-       "      <td>787.18$^{*** }$</td>\n",
-       "      <td>789.74$^{*** }$</td>\n",
-       "      <td>787.18$^{*** }$</td>\n",
-       "      <td>787.18$^{*** }$</td>\n",
-       "      <td>787.18$^{*** }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(65.42)</td>\n",
-       "      <td>(66.89)</td>\n",
-       "      <td>(65.42)</td>\n",
-       "      <td>(65.42)</td>\n",
-       "      <td>(65.42)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>ABP</th>\n",
-       "      <td>416.67$^{*** }$</td>\n",
-       "      <td>397.58$^{*** }$</td>\n",
-       "      <td>416.67$^{*** }$</td>\n",
-       "      <td>416.67$^{*** }$</td>\n",
-       "      <td>416.67$^{*** }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(69.49)</td>\n",
-       "      <td>(70.87)</td>\n",
-       "      <td>(69.49)</td>\n",
-       "      <td>(69.49)</td>\n",
-       "      <td>(69.49)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>S1</th>\n",
-       "      <td></td>\n",
-       "      <td>197.85$^{ }$</td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td></td>\n",
-       "      <td>(143.81)</td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>S2</th>\n",
-       "      <td></td>\n",
-       "      <td>-169.25$^{ }$</td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td></td>\n",
-       "      <td>(142.74)</td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "    </tr>\n",
-       "  <tr><td colspan=\"6\" style=\"border-bottom: 1px solid black\">\n",
-       "            </td></tr>  <tbody>\n",
-       "    <tr>\n",
-       "      <th>Observations</th>\n",
-       "      <td>442.0</td>\n",
-       "      <td>442.0</td>\n",
-       "      <td>442.0</td>\n",
-       "      <td>442.0</td>\n",
-       "      <td>442.0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>R$^2$</th>\n",
-       "      <td>0.4</td>\n",
-       "      <td>0.4</td>\n",
-       "      <td>0.4</td>\n",
-       "      <td>0.4</td>\n",
-       "      <td>0.4</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>Adj. R$^2$</th>\n",
-       "      <td>0.39</td>\n",
-       "      <td>0.39</td>\n",
-       "      <td>0.39</td>\n",
-       "      <td>0.39</td>\n",
-       "      <td>0.39</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>Residual Std. Error</th>\n",
-       "      <td>59.98</td>\n",
-       "      <td>59.98</td>\n",
-       "      <td>59.98</td>\n",
-       "      <td>59.98</td>\n",
-       "      <td>59.98</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>F Statistic</th>\n",
-       "      <td>72.91$^{***}$</td>\n",
-       "      <td>48.91$^{***}$</td>\n",
-       "      <td>72.91$^{***}$</td>\n",
-       "      <td>72.91$^{***}$</td>\n",
-       "      <td>72.91$^{***}$</td>\n",
-       "    </tr>\n",
-       "  <tr><td colspan=\"6\" style=\"border-bottom: 1px solid black\">\n",
-       "        </td></tr>\n",
-       "        <tr><td style=\"text-align: left\">Note:</td><td colspan=\"5\"\n",
-       "        style=\"text-align: right\"><sup>***</sup>p&lt;0.01; <sup>**</sup>p&lt;0.05; <sup>*</sup>p&lt;0.1 </td></tbody>\n",
-       "</table>"
-      ],
-      "text/plain": [
-       "<IPython.core.display.HTML object>"
-      ]
-     },
-     "metadata": {},
-     "execution_count": 25
-    }
-   ],
-   "metadata": {}
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 26,
-   "source": [
-    "ex_tex = et.estimation_table(\n",
-    "    [est, est2, est3, est4, est5],\n",
-    "    return_type=\"latex\",\n",
-    "    render_options={\n",
-    "        \"caption\": \"This is a caption\",\n",
-    "    },\n",
-    "    custom_index_names=[\"Variables\"],\n",
-    "    left_decimals=4,\n",
-    "    custom_model_names=custom_mod_names,\n",
-    "    custom_param_names=cust_par_names,\n",
-    "    alignment_warning=False,\n",
-    "    siunitx_warning=False,\n",
-    ")\n",
-    "Latex(ex_tex)"
-   ],
-   "outputs": [
-    {
-     "output_type": "execute_result",
-     "data": {
-      "text/latex": [
-       "\\begin{table}\n",
-       "\\centering\n",
-       "\\caption{This is a caption}\n",
-       "\\begin{tabular}{lS[table-format =4.2]S[table-format =4.2]S[table-format =4.2]S[table-format =4.2]S[table-format =4.2]}\n",
-       "\\toprule\n",
-       "   &            {M a} & \\multicolumn{3}{c}{{M b-d}} &            {M e} \\\\\n",
-       "\\cmidrule(lr){2-2}\n",
-       "\\cmidrule(lr){3-5}\n",
-       "\\cmidrule(lr){6-6}\n",
-       "\n",
-       "   &            {(1)} &            {(2)} &            {(3)} &            {(4)} &            {(5)} \\\\\n",
-       "Variables &                  &                  &                  &                  &                  \\\\\n",
-       "\\midrule\n",
-       "Intercept &  152.13$^{*** }$ &  152.13$^{*** }$ &  152.13$^{*** }$ &  152.13$^{*** }$ &  152.13$^{*** }$ \\\\\n",
-       "   &           (2.85) &           (2.85) &           (2.85) &           (2.85) &           (2.85) \\\\\n",
-       "Age &      37.24$^{ }$ &       24.7$^{ }$ &      37.24$^{ }$ &      37.24$^{ }$ &      37.24$^{ }$ \\\\\n",
-       "   &          (64.12) &          (65.41) &          (64.12) &          (64.12) &          (64.12) \\\\\n",
-       "Gender &   -106.58$^{* }$ &     -82.86$^{ }$ &   -106.58$^{* }$ &   -106.58$^{* }$ &   -106.58$^{* }$ \\\\\n",
-       "   &          (62.13) &          (64.85) &          (62.13) &          (62.13) &          (62.13) \\\\\n",
-       "BMI &  787.18$^{*** }$ &  789.74$^{*** }$ &  787.18$^{*** }$ &  787.18$^{*** }$ &  787.18$^{*** }$ \\\\\n",
-       "   &          (65.42) &          (66.89) &          (65.42) &          (65.42) &          (65.42) \\\\\n",
-       "ABP &  416.67$^{*** }$ &  397.58$^{*** }$ &  416.67$^{*** }$ &  416.67$^{*** }$ &  416.67$^{*** }$ \\\\\n",
-       "   &          (69.49) &          (70.87) &          (69.49) &          (69.49) &          (69.49) \\\\\n",
-       "S1 &                  &     197.85$^{ }$ &                  &                  &                  \\\\\n",
-       "   &                  &         (143.81) &                  &                  &                  \\\\\n",
-       "S2 &                  &    -169.25$^{ }$ &                  &                  &                  \\\\\n",
-       "   &                  &         (142.74) &                  &                  &                  \\\\\n",
-       "\\midrule\n",
-       "Observations &          442.0 &          442.0 &          442.0 &          442.0 &          442.0 \\\\\n",
-       "R$^2$ &            0.4 &            0.4 &            0.4 &            0.4 &            0.4 \\\\\n",
-       "Adj. R$^2$ &           0.39 &           0.39 &           0.39 &           0.39 &           0.39 \\\\\n",
-       "Residual Std. Error &          59.98 &          59.98 &          59.98 &          59.98 &          59.98 \\\\\n",
-       "F Statistic &  72.91$^{***}$ &  48.91$^{***}$ &  72.91$^{***}$ &  72.91$^{***}$ &  72.91$^{***}$ \\\\\n",
-       "\\midrule\n",
-       "\\textit{Note:} & \\multicolumn{5}{r}{$^{***}$p$<$0.01;$^{**}$p$<$0.05;$^{*}$p$<$0.1} \\\\\n",
-       "\\bottomrule\n",
-       "\\end{tabular}\n",
-       "\n",
-       "\\end{table}\n"
-      ],
-      "text/plain": [
-       "<IPython.core.display.Latex object>"
-      ]
-     },
-     "metadata": {},
-     "execution_count": 26
-    }
-   ],
-   "metadata": {}
-  },
-  {
-   "cell_type": "markdown",
-   "source": [
-    "## Advanced"
-   ],
-   "metadata": {}
-  },
-  {
-   "cell_type": "markdown",
-   "source": [
-    "### Confidence intervals"
-   ],
-   "metadata": {}
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 27,
-   "source": [
-    "ex_html = et.estimation_table(\n",
-    "    [est, est2, est3, est4, est5],\n",
-    "    return_type=\"html\",\n",
-    "    render_options={\n",
-    "        \"caption\": \"This is a caption\",\n",
-    "    },\n",
-    "    custom_index_names=[\"Variables\"],\n",
-    "    custom_model_names=custom_mod_names,\n",
-    "    custom_param_names=cust_par_names,\n",
-    "    confidence_intervals=True,\n",
-    ")\n",
-    "HTML(ex_html)"
-   ],
-   "outputs": [
-    {
-     "output_type": "execute_result",
-     "data": {
-      "text/html": [
-       "This is a caption<br><table border=\"1\" class=\"dataframe\">\n",
-       "  <thead>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <th>M a</th>\n",
-       "      <th colspan=\"3\" halign=\"left\">M b-d</th>\n",
-       "      <th>M e</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <th>(1)</th>\n",
-       "      <th>(2)</th>\n",
-       "      <th>(3)</th>\n",
-       "      <th>(4)</th>\n",
-       "      <th>(5)</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>Variables</th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "    </tr>\n",
-       "  </thead>\n",
-       "  <tbody>\n",
-       "    <tr>\n",
-       "      <th>Intercept</th>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(146.53 ; 157.74)</td>\n",
-       "      <td>(146.53 ; 157.74)</td>\n",
-       "      <td>(146.53 ; 157.74)</td>\n",
-       "      <td>(146.53 ; 157.74)</td>\n",
-       "      <td>(146.53 ; 157.74)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>Age</th>\n",
-       "      <td>37.24$^{ }$</td>\n",
-       "      <td>24.7$^{ }$</td>\n",
-       "      <td>37.24$^{ }$</td>\n",
-       "      <td>37.24$^{ }$</td>\n",
-       "      <td>37.24$^{ }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(-88.78 ; 163.26)</td>\n",
-       "      <td>(-103.86 ; 153.26)</td>\n",
-       "      <td>(-88.78 ; 163.26)</td>\n",
-       "      <td>(-88.78 ; 163.26)</td>\n",
-       "      <td>(-88.78 ; 163.26)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>Gender</th>\n",
-       "      <td>-106.58$^{* }$</td>\n",
-       "      <td>-82.86$^{ }$</td>\n",
-       "      <td>-106.58$^{* }$</td>\n",
-       "      <td>-106.58$^{* }$</td>\n",
-       "      <td>-106.58$^{* }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(-228.68 ; 15.52)</td>\n",
-       "      <td>(-210.32 ; 44.6)</td>\n",
-       "      <td>(-228.68 ; 15.52)</td>\n",
-       "      <td>(-228.68 ; 15.52)</td>\n",
-       "      <td>(-228.68 ; 15.52)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>BMI</th>\n",
-       "      <td>787.18$^{*** }$</td>\n",
-       "      <td>789.74$^{*** }$</td>\n",
-       "      <td>787.18$^{*** }$</td>\n",
-       "      <td>787.18$^{*** }$</td>\n",
-       "      <td>787.18$^{*** }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(658.59 ; 915.76)</td>\n",
-       "      <td>(658.28 ; 921.2)</td>\n",
-       "      <td>(658.59 ; 915.76)</td>\n",
-       "      <td>(658.59 ; 915.76)</td>\n",
-       "      <td>(658.59 ; 915.76)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>ABP</th>\n",
-       "      <td>416.67$^{*** }$</td>\n",
-       "      <td>397.58$^{*** }$</td>\n",
-       "      <td>416.67$^{*** }$</td>\n",
-       "      <td>416.67$^{*** }$</td>\n",
-       "      <td>416.67$^{*** }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(280.09 ; 553.26)</td>\n",
-       "      <td>(258.29 ; 536.87)</td>\n",
-       "      <td>(280.09 ; 553.26)</td>\n",
-       "      <td>(280.09 ; 553.26)</td>\n",
-       "      <td>(280.09 ; 553.26)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>S1</th>\n",
-       "      <td></td>\n",
-       "      <td>197.85$^{ }$</td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td></td>\n",
-       "      <td>(-84.8 ; 480.51)</td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>S2</th>\n",
-       "      <td></td>\n",
-       "      <td>-169.25$^{ }$</td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td></td>\n",
-       "      <td>(-449.8 ; 111.3)</td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "    </tr>\n",
-       "  <tr><td colspan=\"6\" style=\"border-bottom: 1px solid black\">\n",
-       "            </td></tr>  <tbody>\n",
-       "    <tr>\n",
-       "      <th>Observations</th>\n",
-       "      <td>442.0</td>\n",
-       "      <td>442.0</td>\n",
-       "      <td>442.0</td>\n",
-       "      <td>442.0</td>\n",
-       "      <td>442.0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>R$^2$</th>\n",
-       "      <td>0.4</td>\n",
-       "      <td>0.4</td>\n",
-       "      <td>0.4</td>\n",
-       "      <td>0.4</td>\n",
-       "      <td>0.4</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>Adj. R$^2$</th>\n",
-       "      <td>0.39</td>\n",
-       "      <td>0.39</td>\n",
-       "      <td>0.39</td>\n",
-       "      <td>0.39</td>\n",
-       "      <td>0.39</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>Residual Std. Error</th>\n",
-       "      <td>59.98</td>\n",
-       "      <td>59.98</td>\n",
-       "      <td>59.98</td>\n",
-       "      <td>59.98</td>\n",
-       "      <td>59.98</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>F Statistic</th>\n",
-       "      <td>72.91$^{***}$</td>\n",
-       "      <td>48.91$^{***}$</td>\n",
-       "      <td>72.91$^{***}$</td>\n",
-       "      <td>72.91$^{***}$</td>\n",
-       "      <td>72.91$^{***}$</td>\n",
-       "    </tr>\n",
-       "  <tr><td colspan=\"6\" style=\"border-bottom: 1px solid black\">\n",
-       "        </td></tr>\n",
-       "        <tr><td style=\"text-align: left\">Note:</td><td colspan=\"5\"\n",
-       "        style=\"text-align: right\"><sup>***</sup>p&lt;0.01; <sup>**</sup>p&lt;0.05; <sup>*</sup>p&lt;0.1 </td></tbody>\n",
-       "</table>"
-      ],
-      "text/plain": [
-       "<IPython.core.display.HTML object>"
-      ]
-     },
-     "metadata": {},
-     "execution_count": 27
-    }
-   ],
-   "metadata": {}
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 28,
-   "source": [
-    "ex_tex = et.estimation_table(\n",
-    "    [est, est2, est3, est4],\n",
-    "    return_type=\"latex\",\n",
-    "    render_options={\n",
-    "        \"caption\": \"This is a caption\",\n",
-    "    },\n",
-    "    custom_index_names=[\"Variables\"],\n",
-    "    left_decimals=4,\n",
-    "    custom_model_names=None,\n",
-    "    custom_param_names=cust_par_names,\n",
-    "    alignment_warning=False,\n",
-    "    siunitx_warning=False,\n",
-    "    confidence_intervals=True,\n",
-    ")\n",
-    "Latex(ex_tex)"
-   ],
-   "outputs": [
-    {
-     "output_type": "execute_result",
-     "data": {
-      "text/latex": [
-       "\\begin{table}\n",
-       "\\centering\n",
-       "\\caption{This is a caption}\n",
-       "\\begin{tabular}{lS[table-format =4.2]S[table-format =4.2]S[table-format =4.2]S[table-format =4.2]}\n",
-       "\\toprule\n",
-       "   &                  {(1)} &                   {(2)} &                  {(3)} &                  {(4)} \\\\\n",
-       "Variables &                        &                         &                        &                        \\\\\n",
-       "\\midrule\n",
-       "Intercept &        152.13$^{*** }$ &         152.13$^{*** }$ &        152.13$^{*** }$ &        152.13$^{*** }$ \\\\\n",
-       "   &  {(146.53\\,;\\,157.74)} &   {(146.53\\,;\\,157.74)} &  {(146.53\\,;\\,157.74)} &  {(146.53\\,;\\,157.74)} \\\\\n",
-       "Age &            37.24$^{ }$ &              24.7$^{ }$ &            37.24$^{ }$ &            37.24$^{ }$ \\\\\n",
-       "   &  {(-88.78\\,;\\,163.26)} &  {(-103.86\\,;\\,153.26)} &  {(-88.78\\,;\\,163.26)} &  {(-88.78\\,;\\,163.26)} \\\\\n",
-       "Gender &         -106.58$^{* }$ &            -82.86$^{ }$ &         -106.58$^{* }$ &         -106.58$^{* }$ \\\\\n",
-       "   &  {(-228.68\\,;\\,15.52)} &    {(-210.32\\,;\\,44.6)} &  {(-228.68\\,;\\,15.52)} &  {(-228.68\\,;\\,15.52)} \\\\\n",
-       "BMI &        787.18$^{*** }$ &         789.74$^{*** }$ &        787.18$^{*** }$ &        787.18$^{*** }$ \\\\\n",
-       "   &  {(658.59\\,;\\,915.76)} &    {(658.28\\,;\\,921.2)} &  {(658.59\\,;\\,915.76)} &  {(658.59\\,;\\,915.76)} \\\\\n",
-       "ABP &        416.67$^{*** }$ &         397.58$^{*** }$ &        416.67$^{*** }$ &        416.67$^{*** }$ \\\\\n",
-       "   &  {(280.09\\,;\\,553.26)} &   {(258.29\\,;\\,536.87)} &  {(280.09\\,;\\,553.26)} &  {(280.09\\,;\\,553.26)} \\\\\n",
-       "S1 &                        &            197.85$^{ }$ &                        &                        \\\\\n",
-       "   &                        &    {(-84.8\\,;\\,480.51)} &                        &                        \\\\\n",
-       "S2 &                        &           -169.25$^{ }$ &                        &                        \\\\\n",
-       "   &                        &    {(-449.8\\,;\\,111.3)} &                        &                        \\\\\n",
-       "\\midrule\n",
-       "Observations &          442.0 &          442.0 &          442.0 &          442.0 \\\\\n",
-       "R$^2$ &            0.4 &            0.4 &            0.4 &            0.4 \\\\\n",
-       "Adj. R$^2$ &           0.39 &           0.39 &           0.39 &           0.39 \\\\\n",
-       "Residual Std. Error &          59.98 &          59.98 &          59.98 &          59.98 \\\\\n",
-       "F Statistic &  72.91$^{***}$ &  48.91$^{***}$ &  72.91$^{***}$ &  72.91$^{***}$ \\\\\n",
-       "\\midrule\n",
-       "\\textit{Note:} & \\multicolumn{4}{r}{$^{***}$p$<$0.01;$^{**}$p$<$0.05;$^{*}$p$<$0.1} \\\\\n",
-       "\\bottomrule\n",
-       "\\end{tabular}\n",
-       "\n",
-       "\\end{table}\n"
-      ],
-      "text/plain": [
-       "<IPython.core.display.Latex object>"
-      ]
-     },
-     "metadata": {},
-     "execution_count": 28
-    }
-   ],
-   "metadata": {}
-  },
-  {
-   "cell_type": "markdown",
-   "source": [
-    "Passing `confidence_intervals=False` prints standard errors. To hide both standard errors and confidence intervals you need to pass `show_inference=False`:"
-   ],
-   "metadata": {}
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 29,
-   "source": [
-    "ex_html = et.estimation_table(\n",
-    "    [est, est2, est3, est4, est5],\n",
-    "    return_type=\"html\",\n",
-    "    render_options={\"caption\": \"This is a caption\"},\n",
-    "    custom_index_names=[\"Variables\"],\n",
-    "    custom_model_names=custom_mod_names,\n",
-    "    custom_param_names=cust_par_names,\n",
-    "    show_inference=False,\n",
-    ")\n",
-    "HTML(ex_html)"
-   ],
-   "outputs": [
-    {
-     "output_type": "execute_result",
-     "data": {
-      "text/html": [
-       "This is a caption<br><table border=\"1\" class=\"dataframe\">\n",
-       "  <thead>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <th>M a</th>\n",
-       "      <th colspan=\"3\" halign=\"left\">M b-d</th>\n",
-       "      <th>M e</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <th>(1)</th>\n",
-       "      <th>(2)</th>\n",
-       "      <th>(3)</th>\n",
-       "      <th>(4)</th>\n",
-       "      <th>(5)</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>Variables</th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "    </tr>\n",
-       "  </thead>\n",
-       "  <tbody>\n",
-       "    <tr>\n",
-       "      <th>Intercept</th>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>Age</th>\n",
-       "      <td>37.24$^{ }$</td>\n",
-       "      <td>24.7$^{ }$</td>\n",
-       "      <td>37.24$^{ }$</td>\n",
-       "      <td>37.24$^{ }$</td>\n",
-       "      <td>37.24$^{ }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>Gender</th>\n",
-       "      <td>-106.58$^{* }$</td>\n",
-       "      <td>-82.86$^{ }$</td>\n",
-       "      <td>-106.58$^{* }$</td>\n",
-       "      <td>-106.58$^{* }$</td>\n",
-       "      <td>-106.58$^{* }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>BMI</th>\n",
-       "      <td>787.18$^{*** }$</td>\n",
-       "      <td>789.74$^{*** }$</td>\n",
-       "      <td>787.18$^{*** }$</td>\n",
-       "      <td>787.18$^{*** }$</td>\n",
-       "      <td>787.18$^{*** }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>ABP</th>\n",
-       "      <td>416.67$^{*** }$</td>\n",
-       "      <td>397.58$^{*** }$</td>\n",
-       "      <td>416.67$^{*** }$</td>\n",
-       "      <td>416.67$^{*** }$</td>\n",
-       "      <td>416.67$^{*** }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>S1</th>\n",
-       "      <td></td>\n",
-       "      <td>197.85$^{ }$</td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>S2</th>\n",
-       "      <td></td>\n",
-       "      <td>-169.25$^{ }$</td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "    </tr>\n",
-       "  <tr><td colspan=\"6\" style=\"border-bottom: 1px solid black\">\n",
-       "            </td></tr>  <tbody>\n",
-       "    <tr>\n",
-       "      <th>Observations</th>\n",
-       "      <td>442.0</td>\n",
-       "      <td>442.0</td>\n",
-       "      <td>442.0</td>\n",
-       "      <td>442.0</td>\n",
-       "      <td>442.0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>R$^2$</th>\n",
-       "      <td>0.4</td>\n",
-       "      <td>0.4</td>\n",
-       "      <td>0.4</td>\n",
-       "      <td>0.4</td>\n",
-       "      <td>0.4</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>Adj. R$^2$</th>\n",
-       "      <td>0.39</td>\n",
-       "      <td>0.39</td>\n",
-       "      <td>0.39</td>\n",
-       "      <td>0.39</td>\n",
-       "      <td>0.39</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>Residual Std. Error</th>\n",
-       "      <td>59.98</td>\n",
-       "      <td>59.98</td>\n",
-       "      <td>59.98</td>\n",
-       "      <td>59.98</td>\n",
-       "      <td>59.98</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>F Statistic</th>\n",
-       "      <td>72.91$^{***}$</td>\n",
-       "      <td>48.91$^{***}$</td>\n",
-       "      <td>72.91$^{***}$</td>\n",
-       "      <td>72.91$^{***}$</td>\n",
-       "      <td>72.91$^{***}$</td>\n",
-       "    </tr>\n",
-       "  <tr><td colspan=\"6\" style=\"border-bottom: 1px solid black\">\n",
-       "        </td></tr>\n",
-       "        <tr><td style=\"text-align: left\">Note:</td><td colspan=\"5\"\n",
-       "        style=\"text-align: right\"><sup>***</sup>p&lt;0.01; <sup>**</sup>p&lt;0.05; <sup>*</sup>p&lt;0.1 </td></tbody>\n",
-       "</table>"
-      ],
-      "text/plain": [
-       "<IPython.core.display.HTML object>"
-      ]
-     },
-     "metadata": {},
-     "execution_count": 29
-    }
-   ],
-   "metadata": {}
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 30,
-   "source": [
-    "ex_tex = et.estimation_table(\n",
-    "    [est, est2, est3, est4],\n",
-    "    return_type=\"latex\",\n",
-    "    render_options={\n",
-    "        \"caption\": \"This is a caption\",\n",
-    "    },\n",
-    "    custom_index_names=[\"Variables\"],\n",
-    "    left_decimals=4,\n",
-    "    custom_model_names=None,\n",
-    "    custom_param_names=cust_par_names,\n",
-    "    alignment_warning=False,\n",
-    "    siunitx_warning=False,\n",
-    "    show_inference=False,\n",
-    ")\n",
-    "Latex(ex_tex)"
-   ],
-   "outputs": [
-    {
-     "output_type": "execute_result",
-     "data": {
-      "text/latex": [
-       "\\begin{table}\n",
-       "\\centering\n",
-       "\\caption{This is a caption}\n",
-       "\\begin{tabular}{lS[table-format =4.2]S[table-format =4.2]S[table-format =4.2]S[table-format =4.2]}\n",
-       "\\toprule\n",
-       "   &            {(1)} &            {(2)} &            {(3)} &            {(4)} \\\\\n",
-       "Variables &                  &                  &                  &                  \\\\\n",
-       "\\midrule\n",
-       "Intercept &  152.13$^{*** }$ &  152.13$^{*** }$ &  152.13$^{*** }$ &  152.13$^{*** }$ \\\\\n",
-       "Age &      37.24$^{ }$ &       24.7$^{ }$ &      37.24$^{ }$ &      37.24$^{ }$ \\\\\n",
-       "Gender &   -106.58$^{* }$ &     -82.86$^{ }$ &   -106.58$^{* }$ &   -106.58$^{* }$ \\\\\n",
-       "BMI &  787.18$^{*** }$ &  789.74$^{*** }$ &  787.18$^{*** }$ &  787.18$^{*** }$ \\\\\n",
-       "ABP &  416.67$^{*** }$ &  397.58$^{*** }$ &  416.67$^{*** }$ &  416.67$^{*** }$ \\\\\n",
-       "S1 &                  &     197.85$^{ }$ &                  &                  \\\\\n",
-       "S2 &                  &    -169.25$^{ }$ &                  &                  \\\\\n",
-       "\\midrule\n",
-       "Observations &          442.0 &          442.0 &          442.0 &          442.0 \\\\\n",
-       "R$^2$ &            0.4 &            0.4 &            0.4 &            0.4 \\\\\n",
-       "Adj. R$^2$ &           0.39 &           0.39 &           0.39 &           0.39 \\\\\n",
-       "Residual Std. Error &          59.98 &          59.98 &          59.98 &          59.98 \\\\\n",
-       "F Statistic &  72.91$^{***}$ &  48.91$^{***}$ &  72.91$^{***}$ &  72.91$^{***}$ \\\\\n",
-       "\\midrule\n",
-       "\\textit{Note:} & \\multicolumn{4}{r}{$^{***}$p$<$0.01;$^{**}$p$<$0.05;$^{*}$p$<$0.1} \\\\\n",
-       "\\bottomrule\n",
-       "\\end{tabular}\n",
-       "\n",
-       "\\end{table}\n"
-      ],
-      "text/plain": [
-       "<IPython.core.display.Latex object>"
-      ]
-     },
-     "metadata": {},
-     "execution_count": 30
-    }
-   ],
-   "metadata": {}
-  },
-  {
-   "cell_type": "markdown",
-   "source": [
-    "### Footer"
-   ],
-   "metadata": {}
-  },
-  {
-   "cell_type": "markdown",
-   "source": [
-    "To avoid printint statistics, such as R-squared and number of observations, pass `show_footer=False`."
-   ],
-   "metadata": {}
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 31,
-   "source": [
-    "ex_html = et.estimation_table(\n",
-    "    [est, est2, est3, est4, est5],\n",
-    "    return_type=\"html\",\n",
-    "    render_options={\"caption\": \"This is a caption\"},\n",
-    "    custom_param_names=cust_par_names,\n",
-    "    show_footer=False,\n",
-    ")\n",
-    "HTML(ex_html)"
-   ],
-   "outputs": [
-    {
-     "output_type": "execute_result",
-     "data": {
-      "text/html": [
-       "This is a caption<br><table border=\"1\" class=\"dataframe\">\n",
-       "  <thead>\n",
-       "    <tr style=\"text-align: center;\">\n",
-       "      <th></th>\n",
-       "      <th>(1)</th>\n",
-       "      <th>(2)</th>\n",
-       "      <th>(3)</th>\n",
-       "      <th>(4)</th>\n",
-       "      <th>(5)</th>\n",
-       "    </tr>\n",
-       "  </thead>\n",
-       "  <tbody>\n",
-       "    <tr>\n",
-       "      <th>Intercept</th>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(2.85)</td>\n",
-       "      <td>(2.85)</td>\n",
-       "      <td>(2.85)</td>\n",
-       "      <td>(2.85)</td>\n",
-       "      <td>(2.85)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>Age</th>\n",
-       "      <td>37.24$^{ }$</td>\n",
-       "      <td>24.7$^{ }$</td>\n",
-       "      <td>37.24$^{ }$</td>\n",
-       "      <td>37.24$^{ }$</td>\n",
-       "      <td>37.24$^{ }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(64.12)</td>\n",
-       "      <td>(65.41)</td>\n",
-       "      <td>(64.12)</td>\n",
-       "      <td>(64.12)</td>\n",
-       "      <td>(64.12)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>Gender</th>\n",
-       "      <td>-106.58$^{* }$</td>\n",
-       "      <td>-82.86$^{ }$</td>\n",
-       "      <td>-106.58$^{* }$</td>\n",
-       "      <td>-106.58$^{* }$</td>\n",
-       "      <td>-106.58$^{* }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(62.13)</td>\n",
-       "      <td>(64.85)</td>\n",
-       "      <td>(62.13)</td>\n",
-       "      <td>(62.13)</td>\n",
-       "      <td>(62.13)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>BMI</th>\n",
-       "      <td>787.18$^{*** }$</td>\n",
-       "      <td>789.74$^{*** }$</td>\n",
-       "      <td>787.18$^{*** }$</td>\n",
-       "      <td>787.18$^{*** }$</td>\n",
-       "      <td>787.18$^{*** }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(65.42)</td>\n",
-       "      <td>(66.89)</td>\n",
-       "      <td>(65.42)</td>\n",
-       "      <td>(65.42)</td>\n",
-       "      <td>(65.42)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>ABP</th>\n",
-       "      <td>416.67$^{*** }$</td>\n",
-       "      <td>397.58$^{*** }$</td>\n",
-       "      <td>416.67$^{*** }$</td>\n",
-       "      <td>416.67$^{*** }$</td>\n",
-       "      <td>416.67$^{*** }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(69.49)</td>\n",
-       "      <td>(70.87)</td>\n",
-       "      <td>(69.49)</td>\n",
-       "      <td>(69.49)</td>\n",
-       "      <td>(69.49)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>S1</th>\n",
-       "      <td></td>\n",
-       "      <td>197.85$^{ }$</td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td></td>\n",
-       "      <td>(143.81)</td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>S2</th>\n",
-       "      <td></td>\n",
-       "      <td>-169.25$^{ }$</td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td></td>\n",
-       "      <td>(142.74)</td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "    </tr>\n",
-       "  <tr><td colspan=\"6\" style=\"border-bottom: 1px solid black\">\n",
-       "        </td></tr>\n",
-       "        <tr><td style=\"text-align: left\">Note:</td><td colspan=\"5\"\n",
-       "        style=\"text-align: right\"><sup>***</sup>p&lt;0.01; <sup>**</sup>p&lt;0.05; <sup>*</sup>p&lt;0.1 </td></tbody>\n",
-       "</table>"
-      ],
-      "text/plain": [
-       "<IPython.core.display.HTML object>"
-      ]
-     },
-     "metadata": {},
-     "execution_count": 31
-    }
-   ],
-   "metadata": {}
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 32,
-   "source": [
-    "ex_tex = et.estimation_table(\n",
-    "    [est, est2, est3, est4],\n",
-    "    return_type=\"latex\",\n",
-    "    render_options={\n",
-    "        \"caption\": \"This is a caption\",\n",
-    "    },\n",
-    "    left_decimals=4,\n",
-    "    custom_model_names=None,\n",
-    "    custom_param_names=cust_par_names,\n",
-    "    alignment_warning=False,\n",
-    "    siunitx_warning=False,\n",
-    "    show_footer=False,\n",
-    ")\n",
-    "Latex(ex_tex)"
-   ],
-   "outputs": [
-    {
-     "output_type": "execute_result",
-     "data": {
-      "text/latex": [
-       "\\begin{table}\n",
-       "\\centering\n",
-       "\\caption{This is a caption}\n",
-       "\\begin{tabular}{lS[table-format =4.2]S[table-format =4.2]S[table-format =4.2]S[table-format =4.2]}\n",
-       "\\toprule\n",
-       "   &            {(1)} &            {(2)} &            {(3)} &            {(4)} \\\\\n",
-       "\\midrule\n",
-       "Intercept &  152.13$^{*** }$ &  152.13$^{*** }$ &  152.13$^{*** }$ &  152.13$^{*** }$ \\\\\n",
-       "   &           (2.85) &           (2.85) &           (2.85) &           (2.85) \\\\\n",
-       "Age &      37.24$^{ }$ &       24.7$^{ }$ &      37.24$^{ }$ &      37.24$^{ }$ \\\\\n",
-       "   &          (64.12) &          (65.41) &          (64.12) &          (64.12) \\\\\n",
-       "Gender &   -106.58$^{* }$ &     -82.86$^{ }$ &   -106.58$^{* }$ &   -106.58$^{* }$ \\\\\n",
-       "   &          (62.13) &          (64.85) &          (62.13) &          (62.13) \\\\\n",
-       "BMI &  787.18$^{*** }$ &  789.74$^{*** }$ &  787.18$^{*** }$ &  787.18$^{*** }$ \\\\\n",
-       "   &          (65.42) &          (66.89) &          (65.42) &          (65.42) \\\\\n",
-       "ABP &  416.67$^{*** }$ &  397.58$^{*** }$ &  416.67$^{*** }$ &  416.67$^{*** }$ \\\\\n",
-       "   &          (69.49) &          (70.87) &          (69.49) &          (69.49) \\\\\n",
-       "S1 &                  &     197.85$^{ }$ &                  &                  \\\\\n",
-       "   &                  &         (143.81) &                  &                  \\\\\n",
-       "S2 &                  &    -169.25$^{ }$ &                  &                  \\\\\n",
-       "   &                  &         (142.74) &                  &                  \\\\\n",
-       "\\midrule\n",
-       "\\textit{Note:} & \\multicolumn{4}{r}{$^{***}$p$<$0.01;$^{**}$p$<$0.05;$^{*}$p$<$0.1} \\\\\n",
-       "\\bottomrule\n",
-       "\\end{tabular}\n",
-       "\n",
-       "\\end{table}\n"
-      ],
-      "text/plain": [
-       "<IPython.core.display.Latex object>"
-      ]
-     },
-     "metadata": {},
-     "execution_count": 32
-    }
-   ],
-   "metadata": {}
-  },
-  {
-   "cell_type": "markdown",
-   "source": [
-    "### Custom notes"
-   ],
-   "metadata": {}
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 33,
-   "source": [
-    "ex_html = et.estimation_table(\n",
-    "    [est, est2, est3, est4, est5],\n",
-    "    return_type=\"html\",\n",
-    "    render_options={\"caption\": \"This is a caption\"},\n",
-    "    custom_param_names=cust_par_names,\n",
-    "    custom_notes=[\n",
-    "        \"This is the first note of some length\",\n",
-    "        \"This is the second note probably of larger length\",\n",
-    "    ],\n",
-    ")\n",
-    "HTML(ex_html)"
-   ],
-   "outputs": [
-    {
-     "output_type": "execute_result",
-     "data": {
-      "text/html": [
-       "This is a caption<br><table border=\"1\" class=\"dataframe\">\n",
-       "  <thead>\n",
-       "    <tr style=\"text-align: center;\">\n",
-       "      <th></th>\n",
-       "      <th>(1)</th>\n",
-       "      <th>(2)</th>\n",
-       "      <th>(3)</th>\n",
-       "      <th>(4)</th>\n",
-       "      <th>(5)</th>\n",
-       "    </tr>\n",
-       "  </thead>\n",
-       "  <tbody>\n",
-       "    <tr>\n",
-       "      <th>Intercept</th>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(2.85)</td>\n",
-       "      <td>(2.85)</td>\n",
-       "      <td>(2.85)</td>\n",
-       "      <td>(2.85)</td>\n",
-       "      <td>(2.85)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>Age</th>\n",
-       "      <td>37.24$^{ }$</td>\n",
-       "      <td>24.7$^{ }$</td>\n",
-       "      <td>37.24$^{ }$</td>\n",
-       "      <td>37.24$^{ }$</td>\n",
-       "      <td>37.24$^{ }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(64.12)</td>\n",
-       "      <td>(65.41)</td>\n",
-       "      <td>(64.12)</td>\n",
-       "      <td>(64.12)</td>\n",
-       "      <td>(64.12)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>Gender</th>\n",
-       "      <td>-106.58$^{* }$</td>\n",
-       "      <td>-82.86$^{ }$</td>\n",
-       "      <td>-106.58$^{* }$</td>\n",
-       "      <td>-106.58$^{* }$</td>\n",
-       "      <td>-106.58$^{* }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(62.13)</td>\n",
-       "      <td>(64.85)</td>\n",
-       "      <td>(62.13)</td>\n",
-       "      <td>(62.13)</td>\n",
-       "      <td>(62.13)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>BMI</th>\n",
-       "      <td>787.18$^{*** }$</td>\n",
-       "      <td>789.74$^{*** }$</td>\n",
-       "      <td>787.18$^{*** }$</td>\n",
-       "      <td>787.18$^{*** }$</td>\n",
-       "      <td>787.18$^{*** }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(65.42)</td>\n",
-       "      <td>(66.89)</td>\n",
-       "      <td>(65.42)</td>\n",
-       "      <td>(65.42)</td>\n",
-       "      <td>(65.42)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>ABP</th>\n",
-       "      <td>416.67$^{*** }$</td>\n",
-       "      <td>397.58$^{*** }$</td>\n",
-       "      <td>416.67$^{*** }$</td>\n",
-       "      <td>416.67$^{*** }$</td>\n",
-       "      <td>416.67$^{*** }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(69.49)</td>\n",
-       "      <td>(70.87)</td>\n",
-       "      <td>(69.49)</td>\n",
-       "      <td>(69.49)</td>\n",
-       "      <td>(69.49)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>S1</th>\n",
-       "      <td></td>\n",
-       "      <td>197.85$^{ }$</td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td></td>\n",
-       "      <td>(143.81)</td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>S2</th>\n",
-       "      <td></td>\n",
-       "      <td>-169.25$^{ }$</td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td></td>\n",
-       "      <td>(142.74)</td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "    </tr>\n",
-       "  <tr><td colspan=\"6\" style=\"border-bottom: 1px solid black\">\n",
-       "            </td></tr>  <tbody>\n",
-       "    <tr>\n",
-       "      <th>Observations</th>\n",
-       "      <td>442.0</td>\n",
-       "      <td>442.0</td>\n",
-       "      <td>442.0</td>\n",
-       "      <td>442.0</td>\n",
-       "      <td>442.0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>R$^2$</th>\n",
-       "      <td>0.4</td>\n",
-       "      <td>0.4</td>\n",
-       "      <td>0.4</td>\n",
-       "      <td>0.4</td>\n",
-       "      <td>0.4</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>Adj. R$^2$</th>\n",
-       "      <td>0.39</td>\n",
-       "      <td>0.39</td>\n",
-       "      <td>0.39</td>\n",
-       "      <td>0.39</td>\n",
-       "      <td>0.39</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>Residual Std. Error</th>\n",
-       "      <td>59.98</td>\n",
-       "      <td>59.98</td>\n",
-       "      <td>59.98</td>\n",
-       "      <td>59.98</td>\n",
-       "      <td>59.98</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>F Statistic</th>\n",
-       "      <td>72.91$^{***}$</td>\n",
-       "      <td>48.91$^{***}$</td>\n",
-       "      <td>72.91$^{***}$</td>\n",
-       "      <td>72.91$^{***}$</td>\n",
-       "      <td>72.91$^{***}$</td>\n",
-       "    </tr>\n",
-       "  <tr><td colspan=\"6\" style=\"border-bottom: 1px solid black\">\n",
-       "        </td></tr>\n",
-       "        <tr><td style=\"text-align: left\">Note:</td><td colspan=\"5\"\n",
-       "        style=\"text-align: right\"><sup>***</sup>p&lt;0.01; <sup>**</sup>p&lt;0.05; <sup>*</sup>p&lt;0.1 </td>\n",
-       "                    <tr><td></td><td colspan=\"5\"style=\"text-align: right\">This is the first note of some length</td></tr>\n",
-       "                    \n",
-       "                        <tr><td></td><td colspan=\"5\"style=\"text-align: right\">\n",
-       "                        This is the second note probably of larger length</td></tr>\n",
-       "                        </tbody>\n",
-       "</table>"
-      ],
-      "text/plain": [
-       "<IPython.core.display.HTML object>"
-      ]
-     },
-     "metadata": {},
-     "execution_count": 33
-    }
-   ],
-   "metadata": {}
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 34,
-   "source": [
-    "ex_tex = et.estimation_table(\n",
-    "    [est, est2, est3, est4],\n",
-    "    return_type=\"latex\",\n",
-    "    render_options={\n",
-    "        \"caption\": \"This is a caption\",\n",
-    "    },\n",
-    "    left_decimals=4,\n",
-    "    custom_model_names=None,\n",
-    "    custom_param_names=cust_par_names,\n",
-    "    alignment_warning=False,\n",
-    "    siunitx_warning=False,\n",
-    "    custom_notes=[\n",
-    "        \"This is the first note of some length\",\n",
-    "        \"This is the second note probably of larger length\",\n",
-    "    ],\n",
-    ")\n",
-    "Latex(ex_tex)"
-   ],
-   "outputs": [
-    {
-     "output_type": "execute_result",
-     "data": {
-      "text/latex": [
-       "\\begin{table}\n",
-       "\\centering\n",
-       "\\caption{This is a caption}\n",
-       "\\begin{tabular}{lS[table-format =4.2]S[table-format =4.2]S[table-format =4.2]S[table-format =4.2]}\n",
-       "\\toprule\n",
-       "   &            {(1)} &            {(2)} &            {(3)} &            {(4)} \\\\\n",
-       "\\midrule\n",
-       "Intercept &  152.13$^{*** }$ &  152.13$^{*** }$ &  152.13$^{*** }$ &  152.13$^{*** }$ \\\\\n",
-       "   &           (2.85) &           (2.85) &           (2.85) &           (2.85) \\\\\n",
-       "Age &      37.24$^{ }$ &       24.7$^{ }$ &      37.24$^{ }$ &      37.24$^{ }$ \\\\\n",
-       "   &          (64.12) &          (65.41) &          (64.12) &          (64.12) \\\\\n",
-       "Gender &   -106.58$^{* }$ &     -82.86$^{ }$ &   -106.58$^{* }$ &   -106.58$^{* }$ \\\\\n",
-       "   &          (62.13) &          (64.85) &          (62.13) &          (62.13) \\\\\n",
-       "BMI &  787.18$^{*** }$ &  789.74$^{*** }$ &  787.18$^{*** }$ &  787.18$^{*** }$ \\\\\n",
-       "   &          (65.42) &          (66.89) &          (65.42) &          (65.42) \\\\\n",
-       "ABP &  416.67$^{*** }$ &  397.58$^{*** }$ &  416.67$^{*** }$ &  416.67$^{*** }$ \\\\\n",
-       "   &          (69.49) &          (70.87) &          (69.49) &          (69.49) \\\\\n",
-       "S1 &                  &     197.85$^{ }$ &                  &                  \\\\\n",
-       "   &                  &         (143.81) &                  &                  \\\\\n",
-       "S2 &                  &    -169.25$^{ }$ &                  &                  \\\\\n",
-       "   &                  &         (142.74) &                  &                  \\\\\n",
-       "\\midrule\n",
-       "Observations &          442.0 &          442.0 &          442.0 &          442.0 \\\\\n",
-       "R$^2$ &            0.4 &            0.4 &            0.4 &            0.4 \\\\\n",
-       "Adj. R$^2$ &           0.39 &           0.39 &           0.39 &           0.39 \\\\\n",
-       "Residual Std. Error &          59.98 &          59.98 &          59.98 &          59.98 \\\\\n",
-       "F Statistic &  72.91$^{***}$ &  48.91$^{***}$ &  72.91$^{***}$ &  72.91$^{***}$ \\\\\n",
-       "\\midrule\n",
-       "\\textit{Note:} & \\multicolumn{4}{r}{$^{***}$p$<$0.01;$^{**}$p$<$0.05;$^{*}$p$<$0.1} \\\\\n",
-       "\n",
-       "                    &\\multicolumn{4}{r}\\textit{This is the first note of some length}\\\\\n",
-       "\n",
-       "                    &\\multicolumn{4}{r}\\textit{This is the second note probably of larger length}\\\\\n",
-       "\\bottomrule\n",
-       "\\end{tabular}\n",
-       "\n",
-       "\\end{table}\n"
-      ],
-      "text/plain": [
-       "<IPython.core.display.Latex object>"
-      ]
-     },
-     "metadata": {},
-     "execution_count": 34
-    }
-   ],
-   "metadata": {}
-  },
-  {
-   "cell_type": "markdown",
-   "source": [
-    "### Custom names for summary statistics"
-   ],
-   "metadata": {}
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 35,
-   "source": [
-    "ex_html = et.estimation_table(\n",
-    "    [est, est2, est3, est4, est5],\n",
-    "    return_type=\"html\",\n",
-    "    render_options={\"caption\": \"This is a caption\"},\n",
-    "    custom_param_names=cust_par_names,\n",
-    "    custom_notes=[\n",
-    "        \"This is the first note of some length\",\n",
-    "        \"This is the second note probably of larger length\",\n",
-    "    ],\n",
-    "    stats_dict={\"R$^2$\": \"rsquared\", \"N. Obs\": \"n_obs\"},\n",
-    ")\n",
-    "HTML(ex_html)"
-   ],
-   "outputs": [
-    {
-     "output_type": "execute_result",
-     "data": {
-      "text/html": [
-       "This is a caption<br><table border=\"1\" class=\"dataframe\">\n",
-       "  <thead>\n",
-       "    <tr style=\"text-align: center;\">\n",
-       "      <th></th>\n",
-       "      <th>(1)</th>\n",
-       "      <th>(2)</th>\n",
-       "      <th>(3)</th>\n",
-       "      <th>(4)</th>\n",
-       "      <th>(5)</th>\n",
-       "    </tr>\n",
-       "  </thead>\n",
-       "  <tbody>\n",
-       "    <tr>\n",
-       "      <th>Intercept</th>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(2.85)</td>\n",
-       "      <td>(2.85)</td>\n",
-       "      <td>(2.85)</td>\n",
-       "      <td>(2.85)</td>\n",
-       "      <td>(2.85)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>Age</th>\n",
-       "      <td>37.24$^{ }$</td>\n",
-       "      <td>24.7$^{ }$</td>\n",
-       "      <td>37.24$^{ }$</td>\n",
-       "      <td>37.24$^{ }$</td>\n",
-       "      <td>37.24$^{ }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(64.12)</td>\n",
-       "      <td>(65.41)</td>\n",
-       "      <td>(64.12)</td>\n",
-       "      <td>(64.12)</td>\n",
-       "      <td>(64.12)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>Gender</th>\n",
-       "      <td>-106.58$^{* }$</td>\n",
-       "      <td>-82.86$^{ }$</td>\n",
-       "      <td>-106.58$^{* }$</td>\n",
-       "      <td>-106.58$^{* }$</td>\n",
-       "      <td>-106.58$^{* }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(62.13)</td>\n",
-       "      <td>(64.85)</td>\n",
-       "      <td>(62.13)</td>\n",
-       "      <td>(62.13)</td>\n",
-       "      <td>(62.13)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>BMI</th>\n",
-       "      <td>787.18$^{*** }$</td>\n",
-       "      <td>789.74$^{*** }$</td>\n",
-       "      <td>787.18$^{*** }$</td>\n",
-       "      <td>787.18$^{*** }$</td>\n",
-       "      <td>787.18$^{*** }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(65.42)</td>\n",
-       "      <td>(66.89)</td>\n",
-       "      <td>(65.42)</td>\n",
-       "      <td>(65.42)</td>\n",
-       "      <td>(65.42)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>ABP</th>\n",
-       "      <td>416.67$^{*** }$</td>\n",
-       "      <td>397.58$^{*** }$</td>\n",
-       "      <td>416.67$^{*** }$</td>\n",
-       "      <td>416.67$^{*** }$</td>\n",
-       "      <td>416.67$^{*** }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(69.49)</td>\n",
-       "      <td>(70.87)</td>\n",
-       "      <td>(69.49)</td>\n",
-       "      <td>(69.49)</td>\n",
-       "      <td>(69.49)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>S1</th>\n",
-       "      <td></td>\n",
-       "      <td>197.85$^{ }$</td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td></td>\n",
-       "      <td>(143.81)</td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>S2</th>\n",
-       "      <td></td>\n",
-       "      <td>-169.25$^{ }$</td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td></td>\n",
-       "      <td>(142.74)</td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "      <td></td>\n",
-       "    </tr>\n",
-       "  <tr><td colspan=\"6\" style=\"border-bottom: 1px solid black\">\n",
-       "            </td></tr>  <tbody>\n",
-       "    <tr>\n",
-       "      <th>R$^2$</th>\n",
-       "      <td>0.4</td>\n",
-       "      <td>0.4</td>\n",
-       "      <td>0.4</td>\n",
-       "      <td>0.4</td>\n",
-       "      <td>0.4</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>N. Obs</th>\n",
-       "      <td>442.0</td>\n",
-       "      <td>442.0</td>\n",
-       "      <td>442.0</td>\n",
-       "      <td>442.0</td>\n",
-       "      <td>442.0</td>\n",
-       "    </tr>\n",
-       "  <tr><td colspan=\"6\" style=\"border-bottom: 1px solid black\">\n",
-       "        </td></tr>\n",
-       "        <tr><td style=\"text-align: left\">Note:</td><td colspan=\"5\"\n",
-       "        style=\"text-align: right\"><sup>***</sup>p&lt;0.01; <sup>**</sup>p&lt;0.05; <sup>*</sup>p&lt;0.1 </td>\n",
-       "                    <tr><td></td><td colspan=\"5\"style=\"text-align: right\">This is the first note of some length</td></tr>\n",
-       "                    \n",
-       "                        <tr><td></td><td colspan=\"5\"style=\"text-align: right\">\n",
-       "                        This is the second note probably of larger length</td></tr>\n",
-       "                        </tbody>\n",
-       "</table>"
-      ],
-      "text/plain": [
-       "<IPython.core.display.HTML object>"
-      ]
-     },
-     "metadata": {},
-     "execution_count": 35
-    }
-   ],
-   "metadata": {}
-  },
-  {
-   "cell_type": "markdown",
-   "source": [
-    "## MultiIndex"
-   ],
-   "metadata": {}
-  },
-  {
-   "cell_type": "markdown",
-   "source": [
-    "### Set up"
-   ],
-   "metadata": {}
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 36,
-   "source": [
-    "# Convert `params` DataFrame to MultiIndex\n",
-    "df = et._extract_params_from_sm(est)\n",
-    "df.index = pd.MultiIndex.from_arrays(\n",
-    "    np.array([[\"Intercept\", \"Slope\", \"Slope\", \"Slope\", \"Slope\"], df.index.values])\n",
-    ")\n",
-    "df"
-   ],
-   "outputs": [
-    {
-     "output_type": "execute_result",
-     "data": {
-      "text/html": [
-       "<div>\n",
-       "<style scoped>\n",
-       "    .dataframe tbody tr th:only-of-type {\n",
-       "        vertical-align: middle;\n",
-       "    }\n",
-       "\n",
-       "    .dataframe tbody tr th {\n",
-       "        vertical-align: top;\n",
-       "    }\n",
-       "\n",
-       "    .dataframe thead th {\n",
-       "        text-align: right;\n",
-       "    }\n",
-       "</style>\n",
-       "<table border=\"1\" class=\"dataframe\">\n",
-       "  <thead>\n",
-       "    <tr style=\"text-align: right;\">\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th>value</th>\n",
-       "      <th>pvalue</th>\n",
-       "      <th>standard_error</th>\n",
-       "      <th>ci_lower</th>\n",
-       "      <th>ci_upper</th>\n",
-       "    </tr>\n",
-       "  </thead>\n",
-       "  <tbody>\n",
-       "    <tr>\n",
-       "      <th>Intercept</th>\n",
-       "      <th>const</th>\n",
-       "      <td>152.133484</td>\n",
-       "      <td>2.048808e-193</td>\n",
-       "      <td>2.852749</td>\n",
-       "      <td>146.526671</td>\n",
-       "      <td>157.740298</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th rowspan=\"4\" valign=\"top\">Slope</th>\n",
-       "      <th>Age</th>\n",
-       "      <td>37.241211</td>\n",
-       "      <td>5.616557e-01</td>\n",
-       "      <td>64.117433</td>\n",
-       "      <td>-88.775663</td>\n",
-       "      <td>163.258084</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>Sex</th>\n",
-       "      <td>-106.577520</td>\n",
-       "      <td>8.695658e-02</td>\n",
-       "      <td>62.125062</td>\n",
-       "      <td>-228.678572</td>\n",
-       "      <td>15.523532</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>BMI</th>\n",
-       "      <td>787.179313</td>\n",
-       "      <td>5.345260e-29</td>\n",
-       "      <td>65.424126</td>\n",
-       "      <td>658.594255</td>\n",
-       "      <td>915.764371</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>ABP</th>\n",
-       "      <td>416.673772</td>\n",
-       "      <td>4.245663e-09</td>\n",
-       "      <td>69.494666</td>\n",
-       "      <td>280.088446</td>\n",
-       "      <td>553.259097</td>\n",
-       "    </tr>\n",
-       "  </tbody>\n",
-       "</table>\n",
-       "</div>"
-      ],
-      "text/plain": [
-       "                      value         pvalue  standard_error    ci_lower  \\\n",
-       "Intercept const  152.133484  2.048808e-193        2.852749  146.526671   \n",
-       "Slope     Age     37.241211   5.616557e-01       64.117433  -88.775663   \n",
-       "          Sex   -106.577520   8.695658e-02       62.125062 -228.678572   \n",
-       "          BMI    787.179313   5.345260e-29       65.424126  658.594255   \n",
-       "          ABP    416.673772   4.245663e-09       69.494666  280.088446   \n",
-       "\n",
-       "                   ci_upper  \n",
-       "Intercept const  157.740298  \n",
-       "Slope     Age    163.258084  \n",
-       "          Sex     15.523532  \n",
-       "          BMI    915.764371  \n",
-       "          ABP    553.259097  "
-      ]
-     },
-     "metadata": {},
-     "execution_count": 36
-    }
-   ],
-   "metadata": {}
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 37,
-   "source": [
-    "# Extract info and generate tuple of estimation results for `est1`\n",
-    "info = et._extract_info_from_sm(est)\n",
-    "est_mi = namedtuplee(params=df, info=info)"
-   ],
-   "outputs": [],
-   "metadata": {}
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 38,
-   "source": [
-    "# Repeat for `est2`\n",
-    "df = et._extract_params_from_sm(est2)\n",
-    "df.index = pd.MultiIndex.from_arrays(\n",
-    "    np.array(\n",
-    "        [\n",
-    "            [\"Intercept\", \"Slope\", \"Slope\", \"Slope\", \"Slope\", \"Else\", \"Else\"],\n",
-    "            df.index.values,\n",
-    "        ]\n",
-    "    )\n",
-    ")\n",
-    "info = et._extract_info_from_sm(est2)\n",
-    "est_mi2 = namedtuplee(params=df, info=info)"
-   ],
-   "outputs": [],
-   "metadata": {}
-  },
-  {
-   "cell_type": "markdown",
-   "source": [
-    "### Basics"
-   ],
-   "metadata": {}
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 39,
-   "source": [
-    "ex_html = et.estimation_table(\n",
-    "    [est_mi, est_mi2],\n",
-    "    return_type=\"html\",\n",
-    "    render_options={\n",
-    "        \"caption\": \"This is a caption\",\n",
-    "    },\n",
-    "    custom_param_names=cust_par_names,\n",
-    "    custom_notes=[\n",
-    "        \"This is the first note of some length\",\n",
-    "        \"This is the second note probably of larger length\",\n",
-    "    ],\n",
-    ")\n",
-    "HTML(ex_html)"
-   ],
-   "outputs": [
-    {
-     "output_type": "execute_result",
-     "data": {
-      "text/html": [
-       "This is a caption<br><table border=\"1\" class=\"dataframe\">\n",
-       "  <thead>\n",
-       "    <tr style=\"text-align: center;\">\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th>(1)</th>\n",
-       "      <th>(2)</th>\n",
-       "    </tr>\n",
-       "  </thead>\n",
-       "  <tbody>\n",
-       "    <tr>\n",
-       "      <th rowspan=\"2\" valign=\"top\">Intercept</th>\n",
-       "      <th>Intercept</th>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(2.85)</td>\n",
-       "      <td>(2.85)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th rowspan=\"8\" valign=\"top\">Slope</th>\n",
-       "      <th>Age</th>\n",
-       "      <td>37.24$^{ }$</td>\n",
-       "      <td>24.7$^{ }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(64.12)</td>\n",
-       "      <td>(65.41)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>Gender</th>\n",
-       "      <td>-106.58$^{* }$</td>\n",
-       "      <td>-82.86$^{ }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(62.13)</td>\n",
-       "      <td>(64.85)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>BMI</th>\n",
-       "      <td>787.18$^{*** }$</td>\n",
-       "      <td>789.74$^{*** }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(65.42)</td>\n",
-       "      <td>(66.89)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>ABP</th>\n",
-       "      <td>416.67$^{*** }$</td>\n",
-       "      <td>397.58$^{*** }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(69.49)</td>\n",
-       "      <td>(70.87)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th rowspan=\"4\" valign=\"top\">Else</th>\n",
-       "      <th>S1</th>\n",
-       "      <td></td>\n",
-       "      <td>197.85$^{ }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td></td>\n",
-       "      <td>(143.81)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>S2</th>\n",
-       "      <td></td>\n",
-       "      <td>-169.25$^{ }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td></td>\n",
-       "      <td>(142.74)</td>\n",
-       "    </tr>\n",
-       "  <tr><td colspan=\"4\" style=\"border-bottom: 1px solid black\">\n",
-       "            </td></tr>  <tbody>\n",
-       "    <tr>\n",
-       "      <th>Observations</th>\n",
-       "      <th></th>\n",
-       "      <td>442.0</td>\n",
-       "      <td>442.0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>R$^2$</th>\n",
-       "      <th></th>\n",
-       "      <td>0.4</td>\n",
-       "      <td>0.4</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>Adj. R$^2$</th>\n",
-       "      <th></th>\n",
-       "      <td>0.39</td>\n",
-       "      <td>0.39</td>\n",
+       "      <th>Adj. R$^2$</th>\n",
+       "      <td>0.03</td>\n",
+       "      <td>0.40</td>\n",
+       "      <td></td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>Residual Std. Error</th>\n",
-       "      <th></th>\n",
-       "      <td>59.98</td>\n",
-       "      <td>59.98</td>\n",
+       "      <td>75.90</td>\n",
+       "      <td>60.00</td>\n",
+       "      <td></td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>F Statistic</th>\n",
-       "      <th></th>\n",
-       "      <td>72.91$^{***}$</td>\n",
-       "      <td>48.91$^{***}$</td>\n",
+       "      <td>8.06$^{***}$</td>\n",
+       "      <td>72.90$^{***}$</td>\n",
+       "      <td></td>\n",
        "    </tr>\n",
-       "  <tr><td colspan=\"4\" style=\"border-bottom: 1px solid black\">\n",
-       "        </td></tr>\n",
-       "        <tr><td style=\"text-align: left\">Note:</td><td colspan=\"3\"\n",
-       "        style=\"text-align: right\"><sup>***</sup>p&lt;0.01; <sup>**</sup>p&lt;0.05; <sup>*</sup>p&lt;0.1 </td>\n",
-       "                    <tr><td></td><td colspan=\"3\"style=\"text-align: right\">This is the first note of some length</td></tr>\n",
-       "                    \n",
-       "                        <tr><td></td><td colspan=\"3\"style=\"text-align: right\">\n",
-       "                        This is the second note probably of larger length</td></tr>\n",
-       "                        </tbody>\n",
-       "</table>"
+       "    <tr>\n",
+       "      <th>Observations</th>\n",
+       "      <td>442</td>\n",
+       "      <td>442</td>\n",
+       "      <td>445</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "</div>"
       ],
       "text/plain": [
-       "<IPython.core.display.HTML object>"
+       "                           target                    \n",
+       "                              (1)            (2)  (3)\n",
+       "R$^2$                        0.04           0.40     \n",
+       "Adj. R$^2$                   0.03           0.40     \n",
+       "Residual Std. Error         75.90          60.00     \n",
+       "F Statistic          8.06$^{***}$  72.90$^{***}$     \n",
+       "Observations                  442            442  445"
       ]
      },
+     "execution_count": 11,
      "metadata": {},
-     "execution_count": 39
+     "output_type": "execute_result"
     }
    ],
-   "metadata": {}
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 40,
    "source": [
-    "ex_tex = et.estimation_table(\n",
-    "    [est_mi, est_mi2],\n",
-    "    return_type=\"latex\",\n",
-    "    render_options={\n",
-    "        \"caption\": \"This is a caption\",\n",
-    "    },\n",
-    "    left_decimals=3,\n",
-    "    custom_model_names=None,\n",
-    "    custom_param_names=cust_par_names,\n",
-    "    alignment_warning=False,\n",
-    "    siunitx_warning=False,\n",
-    "    custom_notes=[\n",
-    "        \"This is the first note of some length\",\n",
-    "        \"This is the second note probably of larger length\",\n",
-    "    ],\n",
-    ")\n",
-    "Latex(ex_tex)"
-   ],
-   "outputs": [
-    {
-     "output_type": "execute_result",
-     "data": {
-      "text/latex": [
-       "\\begin{table}\n",
-       "\\centering\n",
-       "\\caption{This is a caption}\n",
-       "\\begin{tabular}{llS[table-format =3.2]S[table-format =3.2]}\n",
-       "\\toprule\n",
-       "     &    &            {(1)} &            {(2)} \\\\\n",
-       "\\midrule\n",
-       "Intercept & Intercept &  152.13$^{*** }$ &  152.13$^{*** }$ \\\\\n",
-       "     &    &           (2.85) &           (2.85) \\\\\n",
-       "Slope & Age &      37.24$^{ }$ &       24.7$^{ }$ \\\\\n",
-       "     &    &          (64.12) &          (65.41) \\\\\n",
-       "     & Gender &   -106.58$^{* }$ &     -82.86$^{ }$ \\\\\n",
-       "     &    &          (62.13) &          (64.85) \\\\\n",
-       "     & BMI &  787.18$^{*** }$ &  789.74$^{*** }$ \\\\\n",
-       "     &    &          (65.42) &          (66.89) \\\\\n",
-       "     & ABP &  416.67$^{*** }$ &  397.58$^{*** }$ \\\\\n",
-       "     &    &          (69.49) &          (70.87) \\\\\n",
-       "Else & S1 &                  &     197.85$^{ }$ \\\\\n",
-       "     &    &                  &         (143.81) \\\\\n",
-       "     & S2 &                  &    -169.25$^{ }$ \\\\\n",
-       "     &    &                  &         (142.74) \\\\\n",
-       "\\midrule\n",
-       "Observations & {} &          442.0 &          442.0 \\\\\n",
-       "R$^2$ & {} &            0.4 &            0.4 \\\\\n",
-       "Adj. R$^2$ & {} &           0.39 &           0.39 \\\\\n",
-       "Residual Std. Error & {} &          59.98 &          59.98 \\\\\n",
-       "F Statistic & {} &  72.91$^{***}$ &  48.91$^{***}$ \\\\\n",
-       "\\midrule\n",
-       "\\textit{Note:} & \\multicolumn{3}{r}{$^{***}$p$<$0.01;$^{**}$p$<$0.05;$^{*}$p$<$0.1} \\\\\n",
-       "\n",
-       "                    &&\\multicolumn{2}{r}\\textit{This is the first note of some length}\\\\\n",
-       "\n",
-       "                    &&\\multicolumn{2}{r}\\textit{This is the second note probably of larger length}\\\\\n",
-       "\\bottomrule\n",
-       "\\end{tabular}\n",
-       "\n",
-       "\\end{table}\n"
-      ],
-      "text/plain": [
-       "<IPython.core.display.Latex object>"
-      ]
-     },
-     "metadata": {},
-     "execution_count": 40
-    }
-   ],
-   "metadata": {}
+    "render_inputs = estimation_table(models, return_type=\"render_inputs\")\n",
+    "footer = render_inputs[\"footer\"]\n",
+    "footer"
+   ]
   },
   {
    "cell_type": "markdown",
+   "metadata": {},
    "source": [
-    "### Parameter names"
-   ],
-   "metadata": {}
+    "Now we can remove the rows we don't need and render it to html. "
+   ]
   },
   {
    "cell_type": "code",
-   "execution_count": 41,
-   "source": [
-    "ex_html = et.estimation_table(\n",
-    "    [est_mi, est_mi2],\n",
-    "    return_type=\"html\",\n",
-    "    render_options={\n",
-    "        \"caption\": \"This is a caption\",\n",
-    "    },\n",
-    "    custom_notes=[\n",
-    "        \"This is the first note of some length\",\n",
-    "        \"This is the second note probably of larger length\",\n",
-    "    ],\n",
-    "    custom_param_names={\"Age\": \"Maturity\", \"Else\": \"Additionally\"},\n",
-    ")\n",
-    "HTML(ex_html)"
-   ],
+   "execution_count": 12,
+   "metadata": {},
    "outputs": [
     {
-     "output_type": "execute_result",
      "data": {
       "text/html": [
-       "This is a caption<br><table border=\"1\" class=\"dataframe\">\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
        "  <thead>\n",
-       "    <tr style=\"text-align: center;\">\n",
+       "    <tr>\n",
        "      <th></th>\n",
+       "      <th colspan=\"3\" halign=\"left\">target</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
        "      <th></th>\n",
        "      <th>(1)</th>\n",
        "      <th>(2)</th>\n",
+       "      <th>(3)</th>\n",
        "    </tr>\n",
        "  </thead>\n",
        "  <tbody>\n",
        "    <tr>\n",
-       "      <th rowspan=\"2\" valign=\"top\">Intercept</th>\n",
-       "      <th>const</th>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "      <td>152.13$^{*** }$</td>\n",
+       "      <th>Intercept</th>\n",
+       "      <td>152.00$^{*** }$</td>\n",
+       "      <td>152.00$^{*** }$</td>\n",
+       "      <td>142.00$^{*** }$</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th></th>\n",
+       "      <td>(3.61)</td>\n",
        "      <td>(2.85)</td>\n",
-       "      <td>(2.85)</td>\n",
+       "      <td>(3.14)</td>\n",
        "    </tr>\n",
        "    <tr>\n",
-       "      <th rowspan=\"8\" valign=\"top\">Slope</th>\n",
-       "      <th>Maturity</th>\n",
-       "      <td>37.24$^{ }$</td>\n",
-       "      <td>24.7$^{ }$</td>\n",
+       "      <th>Age</th>\n",
+       "      <td>301.00$^{*** }$</td>\n",
+       "      <td>37.20$^{ }$</td>\n",
+       "      <td>51.50$^{*** }$</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th></th>\n",
-       "      <td>(64.12)</td>\n",
-       "      <td>(65.41)</td>\n",
+       "      <td>(77.10)</td>\n",
+       "      <td>(64.10)</td>\n",
+       "      <td>(2.72)</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>Sex</th>\n",
-       "      <td>-106.58$^{* }$</td>\n",
-       "      <td>-82.86$^{ }$</td>\n",
+       "      <td>17.40$^{ }$</td>\n",
+       "      <td>-107.00$^{* }$</td>\n",
+       "      <td>-33.80$^{*** }$</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th></th>\n",
-       "      <td>(62.13)</td>\n",
-       "      <td>(64.85)</td>\n",
+       "      <td>(77.10)</td>\n",
+       "      <td>(62.10)</td>\n",
+       "      <td>(1.62)</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>BMI</th>\n",
-       "      <td>787.18$^{*** }$</td>\n",
-       "      <td>789.74$^{*** }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(65.42)</td>\n",
-       "      <td>(66.89)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>ABP</th>\n",
-       "      <td>416.67$^{*** }$</td>\n",
-       "      <td>397.58$^{*** }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(69.49)</td>\n",
-       "      <td>(70.87)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th rowspan=\"4\" valign=\"top\">Additionally</th>\n",
-       "      <th>S1</th>\n",
        "      <td></td>\n",
-       "      <td>197.85$^{ }$</td>\n",
+       "      <td>787.00$^{*** }$</td>\n",
+       "      <td></td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th></th>\n",
        "      <td></td>\n",
-       "      <td>(143.81)</td>\n",
+       "      <td>(65.40)</td>\n",
+       "      <td></td>\n",
        "    </tr>\n",
        "    <tr>\n",
-       "      <th>S2</th>\n",
+       "      <th>ABP</th>\n",
+       "      <td></td>\n",
+       "      <td>417.00$^{*** }$</td>\n",
        "      <td></td>\n",
-       "      <td>-169.25$^{ }$</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th></th>\n",
        "      <td></td>\n",
-       "      <td>(142.74)</td>\n",
+       "      <td>(69.50)</td>\n",
+       "      <td></td>\n",
        "    </tr>\n",
        "  <tr><td colspan=\"4\" style=\"border-bottom: 1px solid black\">\n",
        "            </td></tr>  <tbody>\n",
        "    <tr>\n",
-       "      <th>Observations</th>\n",
-       "      <th></th>\n",
-       "      <td>442.0</td>\n",
-       "      <td>442.0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
        "      <th>R$^2$</th>\n",
-       "      <th></th>\n",
-       "      <td>0.4</td>\n",
-       "      <td>0.4</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>Adj. R$^2$</th>\n",
-       "      <th></th>\n",
-       "      <td>0.39</td>\n",
-       "      <td>0.39</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>Residual Std. Error</th>\n",
-       "      <th></th>\n",
-       "      <td>59.98</td>\n",
-       "      <td>59.98</td>\n",
+       "      <td>0.04</td>\n",
+       "      <td>0.40</td>\n",
+       "      <td></td>\n",
        "    </tr>\n",
        "    <tr>\n",
-       "      <th>F Statistic</th>\n",
-       "      <th></th>\n",
-       "      <td>72.91$^{***}$</td>\n",
-       "      <td>48.91$^{***}$</td>\n",
+       "      <th>Observations</th>\n",
+       "      <td>442</td>\n",
+       "      <td>442</td>\n",
+       "      <td>445</td>\n",
        "    </tr>\n",
        "  <tr><td colspan=\"4\" style=\"border-bottom: 1px solid black\">\n",
        "        </td></tr>\n",
        "        <tr><td style=\"text-align: left\">Note:</td><td colspan=\"3\"\n",
-       "        style=\"text-align: right\"><sup>***</sup>p&lt;0.01; <sup>**</sup>p&lt;0.05; <sup>*</sup>p&lt;0.1 </td>\n",
-       "                    <tr><td></td><td colspan=\"3\"style=\"text-align: right\">This is the first note of some length</td></tr>\n",
-       "                    \n",
-       "                        <tr><td></td><td colspan=\"3\"style=\"text-align: right\">\n",
-       "                        This is the second note probably of larger length</td></tr>\n",
-       "                        </tbody>\n",
+       "        style=\"text-align: right\"><sup>***</sup>p&lt;0.01; <sup>**</sup>p&lt;0.05; <sup>*</sup>p&lt;0.1 </td></tbody>\n",
        "</table>"
       ],
       "text/plain": [
        "<IPython.core.display.HTML object>"
       ]
      },
+     "execution_count": 12,
      "metadata": {},
-     "execution_count": 41
+     "output_type": "execute_result"
     }
    ],
-   "metadata": {}
+   "source": [
+    "render_inputs[\"footer\"] = footer.loc[[\"R$^2$\", \"Observations\"]]\n",
+    "HTML(render_html(**render_inputs))"
+   ]
   },
   {
-   "cell_type": "code",
-   "execution_count": 42,
+   "cell_type": "markdown",
+   "metadata": {},
    "source": [
-    "ex_tex = et.estimation_table(\n",
-    "    [est_mi, est_mi2],\n",
-    "    return_type=\"latex\",\n",
-    "    render_options={\n",
-    "        \"caption\": \"This is a caption\",\n",
-    "    },\n",
-    "    left_decimals=3,\n",
-    "    custom_model_names=None,\n",
-    "    alignment_warning=False,\n",
-    "    siunitx_warning=False,\n",
-    "    custom_notes=[\n",
-    "        \"This is the first note of some length\",\n",
-    "        \"This is the second note probably of larger length\",\n",
-    "    ],\n",
-    "    custom_param_names={\"Age\": \"Maturity\", \"Else\": \"Additionally\"},\n",
-    ")\n",
-    "Latex(ex_tex)"
-   ],
-   "outputs": [
-    {
-     "output_type": "execute_result",
-     "data": {
-      "text/latex": [
-       "\\begin{table}\n",
-       "\\centering\n",
-       "\\caption{This is a caption}\n",
-       "\\begin{tabular}{llS[table-format =3.2]S[table-format =3.2]}\n",
-       "\\toprule\n",
-       "             &    &            {(1)} &            {(2)} \\\\\n",
-       "\\midrule\n",
-       "Intercept & const &  152.13$^{*** }$ &  152.13$^{*** }$ \\\\\n",
-       "             &    &           (2.85) &           (2.85) \\\\\n",
-       "Slope & Maturity &      37.24$^{ }$ &       24.7$^{ }$ \\\\\n",
-       "             &    &          (64.12) &          (65.41) \\\\\n",
-       "             & Sex &   -106.58$^{* }$ &     -82.86$^{ }$ \\\\\n",
-       "             &    &          (62.13) &          (64.85) \\\\\n",
-       "             & BMI &  787.18$^{*** }$ &  789.74$^{*** }$ \\\\\n",
-       "             &    &          (65.42) &          (66.89) \\\\\n",
-       "             & ABP &  416.67$^{*** }$ &  397.58$^{*** }$ \\\\\n",
-       "             &    &          (69.49) &          (70.87) \\\\\n",
-       "Additionally & S1 &                  &     197.85$^{ }$ \\\\\n",
-       "             &    &                  &         (143.81) \\\\\n",
-       "             & S2 &                  &    -169.25$^{ }$ \\\\\n",
-       "             &    &                  &         (142.74) \\\\\n",
-       "\\midrule\n",
-       "Observations & {} &          442.0 &          442.0 \\\\\n",
-       "R$^2$ & {} &            0.4 &            0.4 \\\\\n",
-       "Adj. R$^2$ & {} &           0.39 &           0.39 \\\\\n",
-       "Residual Std. Error & {} &          59.98 &          59.98 \\\\\n",
-       "F Statistic & {} &  72.91$^{***}$ &  48.91$^{***}$ \\\\\n",
-       "\\midrule\n",
-       "\\textit{Note:} & \\multicolumn{3}{r}{$^{***}$p$<$0.01;$^{**}$p$<$0.05;$^{*}$p$<$0.1} \\\\\n",
-       "\n",
-       "                    &&\\multicolumn{2}{r}\\textit{This is the first note of some length}\\\\\n",
-       "\n",
-       "                    &&\\multicolumn{2}{r}\\textit{This is the second note probably of larger length}\\\\\n",
-       "\\bottomrule\n",
-       "\\end{tabular}\n",
-       "\n",
-       "\\end{table}\n"
-      ],
-      "text/plain": [
-       "<IPython.core.display.Latex object>"
-      ]
-     },
-     "metadata": {},
-     "execution_count": 42
-    }
-   ],
-   "metadata": {}
+    "## LaTeX peculiarities\n",
+    "\n",
+    "- describe the warning and how to silence it\n",
+    "- describe what needs to go into the preamble\n",
+    "- show one example"
+   ]
   },
   {
    "cell_type": "markdown",
+   "metadata": {},
    "source": [
-    "### Index and model names"
-   ],
-   "metadata": {}
+    "## Advanced options \n",
+    "\n",
+    "show one example with where many optional arguments are used at once\n",
+    "\n",
+    "- options dictionary with all standard entries\n",
+    "- custom param names\n",
+    "- custom col names\n",
+    "- custom col groups\n",
+    "- custom number format\n",
+    "- title\n",
+    "\n",
+    "everything that is not in this list will be left to the docstring."
+   ]
   },
   {
    "cell_type": "code",
-   "execution_count": 43,
+   "execution_count": 13,
+   "metadata": {},
+   "outputs": [],
    "source": [
     "stats_dict = {\n",
     "    \"Observations\": \"n_obs\",\n",
@@ -4555,286 +695,14 @@
     "    \"F Statistic\": \"fvalue\",\n",
     "    \"show_dof\": True,\n",
     "}"
-   ],
-   "outputs": [],
-   "metadata": {}
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 44,
-   "source": [
-    "ex_html = et.estimation_table(\n",
-    "    [est_mi, est_mi2, est_mi],\n",
-    "    return_type=\"html\",\n",
-    "    render_options={\n",
-    "        \"caption\": \"This is a caption\",\n",
-    "    },\n",
-    "    custom_notes=[\n",
-    "        \"This is the first note of some length\",\n",
-    "        \"This is the second note probably of larger length\",\n",
-    "    ],\n",
-    "    custom_param_names={\"Age\": \"Maturity\", \"Else\": \"Additionally\"},\n",
-    "    custom_index_names=[\"Category\", \"Variable\"],\n",
-    "    custom_model_names={\"M1-2\": [0, 1], \"M3\": [2]},\n",
-    "    stats_dict=stats_dict,\n",
-    ")\n",
-    "HTML(ex_html)"
-   ],
-   "outputs": [
-    {
-     "output_type": "execute_result",
-     "data": {
-      "text/html": [
-       "This is a caption<br><table border=\"1\" class=\"dataframe\">\n",
-       "  <thead>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th colspan=\"2\" halign=\"left\">M1-2</th>\n",
-       "      <th>M3</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th>(1)</th>\n",
-       "      <th>(2)</th>\n",
-       "      <th>(3)</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>Category</th>\n",
-       "      <th>Variable</th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "    </tr>\n",
-       "  </thead>\n",
-       "  <tbody>\n",
-       "    <tr>\n",
-       "      <th rowspan=\"2\" valign=\"top\">Intercept</th>\n",
-       "      <th>const</th>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "      <td>152.13$^{*** }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(2.85)</td>\n",
-       "      <td>(2.85)</td>\n",
-       "      <td>(2.85)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th rowspan=\"8\" valign=\"top\">Slope</th>\n",
-       "      <th>Maturity</th>\n",
-       "      <td>37.24$^{ }$</td>\n",
-       "      <td>24.7$^{ }$</td>\n",
-       "      <td>37.24$^{ }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(64.12)</td>\n",
-       "      <td>(65.41)</td>\n",
-       "      <td>(64.12)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>Sex</th>\n",
-       "      <td>-106.58$^{* }$</td>\n",
-       "      <td>-82.86$^{ }$</td>\n",
-       "      <td>-106.58$^{* }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(62.13)</td>\n",
-       "      <td>(64.85)</td>\n",
-       "      <td>(62.13)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>BMI</th>\n",
-       "      <td>787.18$^{*** }$</td>\n",
-       "      <td>789.74$^{*** }$</td>\n",
-       "      <td>787.18$^{*** }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(65.42)</td>\n",
-       "      <td>(66.89)</td>\n",
-       "      <td>(65.42)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>ABP</th>\n",
-       "      <td>416.67$^{*** }$</td>\n",
-       "      <td>397.58$^{*** }$</td>\n",
-       "      <td>416.67$^{*** }$</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td>(69.49)</td>\n",
-       "      <td>(70.87)</td>\n",
-       "      <td>(69.49)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th rowspan=\"4\" valign=\"top\">Additionally</th>\n",
-       "      <th>S1</th>\n",
-       "      <td></td>\n",
-       "      <td>197.85$^{ }$</td>\n",
-       "      <td></td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td></td>\n",
-       "      <td>(143.81)</td>\n",
-       "      <td></td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>S2</th>\n",
-       "      <td></td>\n",
-       "      <td>-169.25$^{ }$</td>\n",
-       "      <td></td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th></th>\n",
-       "      <td></td>\n",
-       "      <td>(142.74)</td>\n",
-       "      <td></td>\n",
-       "    </tr>\n",
-       "  <tr><td colspan=\"5\" style=\"border-bottom: 1px solid black\">\n",
-       "            </td></tr>  <tbody>\n",
-       "    <tr>\n",
-       "      <th>Observations</th>\n",
-       "      <th></th>\n",
-       "      <td>442.0</td>\n",
-       "      <td>442.0</td>\n",
-       "      <td>442.0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>R$^2$</th>\n",
-       "      <th></th>\n",
-       "      <td>0.4</td>\n",
-       "      <td>0.4</td>\n",
-       "      <td>0.4</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>Adj. R$^2$</th>\n",
-       "      <th></th>\n",
-       "      <td>0.39</td>\n",
-       "      <td>0.39</td>\n",
-       "      <td>0.39</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>Residual Std. Error</th>\n",
-       "      <th></th>\n",
-       "      <td>59.98(df=437.0)</td>\n",
-       "      <td>59.98(df=435.0)</td>\n",
-       "      <td>59.98(df=437.0)</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>F Statistic</th>\n",
-       "      <th></th>\n",
-       "      <td>72.91$^{***}$(df=4.0;437.0)</td>\n",
-       "      <td>48.91$^{***}$(df=6.0;435.0)</td>\n",
-       "      <td>72.91$^{***}$(df=4.0;437.0)</td>\n",
-       "    </tr>\n",
-       "  <tr><td colspan=\"5\" style=\"border-bottom: 1px solid black\">\n",
-       "        </td></tr>\n",
-       "        <tr><td style=\"text-align: left\">Note:</td><td colspan=\"4\"\n",
-       "        style=\"text-align: right\"><sup>***</sup>p&lt;0.01; <sup>**</sup>p&lt;0.05; <sup>*</sup>p&lt;0.1 </td>\n",
-       "                    <tr><td></td><td colspan=\"4\"style=\"text-align: right\">This is the first note of some length</td></tr>\n",
-       "                    \n",
-       "                        <tr><td></td><td colspan=\"4\"style=\"text-align: right\">\n",
-       "                        This is the second note probably of larger length</td></tr>\n",
-       "                        </tbody>\n",
-       "</table>"
-      ],
-      "text/plain": [
-       "<IPython.core.display.HTML object>"
-      ]
-     },
-     "metadata": {},
-     "execution_count": 44
-    }
-   ],
-   "metadata": {}
+   ]
   },
   {
    "cell_type": "code",
-   "execution_count": 45,
-   "source": [
-    "ex_tex = et.estimation_table(\n",
-    "    [est_mi, est_mi2],\n",
-    "    return_type=\"latex\",\n",
-    "    render_options={\n",
-    "        \"caption\": \"This is a caption\",\n",
-    "    },\n",
-    "    left_decimals=4,\n",
-    "    alignment_warning=False,\n",
-    "    siunitx_warning=False,\n",
-    "    custom_notes=[\n",
-    "        \"This is the first note of some length\",\n",
-    "        \"This is the second note probably of larger length\",\n",
-    "    ],\n",
-    "    custom_param_names={\"Age\": \"Maturity\", \"Else\": \"Additionally\"},\n",
-    "    custom_index_names=[\"Category\", \"Variable\"],\n",
-    "    custom_model_names={\"M1\": [0], \"M2\": [1]},\n",
-    "    stats_dict=stats_dict,\n",
-    ")\n",
-    "Latex(ex_tex)"
-   ],
-   "outputs": [
-    {
-     "output_type": "execute_result",
-     "data": {
-      "text/latex": [
-       "\\begin{table}\n",
-       "\\centering\n",
-       "\\caption{This is a caption}\n",
-       "\\begin{tabular}{llS[table-format =4.2]S[table-format =4.2]}\n",
-       "\\toprule\n",
-       "             &    &             {M1} &             {M2} \\\\\n",
-       "\\cmidrule(lr){3-3}\n",
-       "\\cmidrule(lr){4-4}\n",
-       "\n",
-       "             &    &            {(1)} &            {(2)} \\\\\n",
-       "Category & Variable &                  &                  \\\\\n",
-       "\\midrule\n",
-       "Intercept & const &  152.13$^{*** }$ &  152.13$^{*** }$ \\\\\n",
-       "             &    &           (2.85) &           (2.85) \\\\\n",
-       "Slope & Maturity &      37.24$^{ }$ &       24.7$^{ }$ \\\\\n",
-       "             &    &          (64.12) &          (65.41) \\\\\n",
-       "             & Sex &   -106.58$^{* }$ &     -82.86$^{ }$ \\\\\n",
-       "             &    &          (62.13) &          (64.85) \\\\\n",
-       "             & BMI &  787.18$^{*** }$ &  789.74$^{*** }$ \\\\\n",
-       "             &    &          (65.42) &          (66.89) \\\\\n",
-       "             & ABP &  416.67$^{*** }$ &  397.58$^{*** }$ \\\\\n",
-       "             &    &          (69.49) &          (70.87) \\\\\n",
-       "Additionally & S1 &                  &     197.85$^{ }$ \\\\\n",
-       "             &    &                  &         (143.81) \\\\\n",
-       "             & S2 &                  &    -169.25$^{ }$ \\\\\n",
-       "             &    &                  &         (142.74) \\\\\n",
-       "\\midrule\n",
-       "Observations & {} &                          442.0 &                          442.0 \\\\\n",
-       "R$^2$ & {} &                            0.4 &                            0.4 \\\\\n",
-       "Adj. R$^2$ & {} &                           0.39 &                           0.39 \\\\\n",
-       "Residual Std. Error & {} &              {59.98(df=437.0)} &              {59.98(df=435.0)} \\\\\n",
-       "F Statistic & {} &  {72.91$^{***}$(df=4.0;437.0)} &  {48.91$^{***}$(df=6.0;435.0)} \\\\\n",
-       "\\midrule\n",
-       "\\textit{Note:} & \\multicolumn{3}{r}{$^{***}$p$<$0.01;$^{**}$p$<$0.05;$^{*}$p$<$0.1} \\\\\n",
-       "\n",
-       "                    &&\\multicolumn{2}{r}\\textit{This is the first note of some length}\\\\\n",
-       "\n",
-       "                    &&\\multicolumn{2}{r}\\textit{This is the second note probably of larger length}\\\\\n",
-       "\\bottomrule\n",
-       "\\end{tabular}\n",
-       "\n",
-       "\\end{table}\n"
-      ],
-      "text/plain": [
-       "<IPython.core.display.Latex object>"
-      ]
-     },
-     "metadata": {},
-     "execution_count": 45
-    }
-   ],
-   "metadata": {}
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": []
   }
  ],
  "metadata": {
@@ -4842,9 +710,13 @@
    "lastCommId": null,
    "lastKernelId": null
   },
+  "interpreter": {
+   "hash": "5cdb9867252288f10687117449de6ad870b49795ca695c868016dc0022895cce"
+  },
   "kernelspec": {
-   "name": "python3",
-   "display_name": "Python 3.8.12 64-bit ('estimagic': conda)"
+   "display_name": "Python 3 (ipykernel)",
+   "language": "python",
+   "name": "python3"
   },
   "language_info": {
    "codemirror_mode": {
@@ -4856,10 +728,7 @@
    "name": "python",
    "nbconvert_exporter": "python",
    "pygments_lexer": "ipython3",
-   "version": "3.8.12"
-  },
-  "interpreter": {
-   "hash": "5cdb9867252288f10687117449de6ad870b49795ca695c868016dc0022895cce"
+   "version": "3.8.13"
   }
  },
  "nbformat": 4,
diff --git a/docs/source/how_to_guides/optimization/how_to_handle_errors_during_optimization.ipynb b/docs/source/how_to_guides/optimization/how_to_handle_errors_during_optimization.ipynb
new file mode 100644
index 000000000..cfd3b23b1
--- /dev/null
+++ b/docs/source/how_to_guides/optimization/how_to_handle_errors_during_optimization.ipynb
@@ -0,0 +1,286 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "id": "a096f8df",
+   "metadata": {},
+   "source": [
+    "# How to handle errors during optimization\n",
+    "\n",
+    "## Try to avoid errors\n",
+    "\n",
+    "Often, optimizers try quite extreme parameter vectors, which then can raise errors in your criterion function or derivative. Often, there are simple tricks to make your code more robust. Avoiding errors is always better than dealing with errors after they occur.  \n",
+    "\n",
+    "- Avoid to take ``np.exp`` without further safeguards. With 64 bit floating point numbers, the exponential function is only well defined roughly between -700 and 700. Below it is 0, above it is inf. Sometimes you can use ``scipy.special.logsumexp`` to avoid unsafe evaluations of the exponential. Read [this](https://gregorygundersen.com/blog/2020/02/09/log-sum-exp/) for background information on the logsumexp trick.\n",
+    "- Set bounds for your parameters, that prevent extreme parameter constellations.\n",
+    "- Use the ``bounds_distance`` option with a not too small value for ``covariance`` and ``sdcorr`` constraints.\n",
+    "- Use `estimagic.utilities.robust_cholesky` instead of normal\n",
+    "  cholesky decompositions or try to avoid cholesky decompositions.\n",
+    "- Use a less aggressive optimizer. Trust region optimizers like `fides` usually choose less extreme steps in the beginnig than line search optimizers like `scipy_bfgs` and `scip_lbfgsb`. \n",
+    "\n",
+    "## Do not use clipping\n",
+    "\n",
+    "A commonly chosen solution to numerical problems is clipping of extreme values. Naive clipping leads to flat areas in your criterion function and can cause spurious convergence. Only use clipping if you know that your optimizer can deal with flat parts. "
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "4c551530",
+   "metadata": {},
+   "source": [
+    "## Let estimagic do its magic\n",
+    "\n",
+    "Instead of avoiding errors in your criterion function, you can raise them and let estimagic deal with them. If you are using numerical derivatives, errors will automatically be raised if any entry in the derivative is not finite. \n",
+    "\n",
+    "### An example\n",
+    "\n",
+    "Let's look at a simple example from the More-Wild benchmark set that has a numerical instability. "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "id": "fec56a0b",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "import warnings\n",
+    "\n",
+    "import numpy as np\n",
+    "import pandas as pd\n",
+    "from scipy.optimize import minimize as scipy_minimize\n",
+    "\n",
+    "from estimagic import minimize\n",
+    "\n",
+    "warnings.simplefilter(\"ignore\")\n",
+    "\n",
+    "\n",
+    "def jennrich_sampson(x):\n",
+    "    dim_out = 10\n",
+    "    fvec = (\n",
+    "        2 * (1.0 + np.arange(1, dim_out + 1))\n",
+    "        - np.exp(np.arange(1, dim_out + 1) * x[0])\n",
+    "        - np.exp(np.arange(1, dim_out + 1) * x[1])\n",
+    "    )\n",
+    "    return fvec @ fvec\n",
+    "\n",
+    "\n",
+    "correct_params = np.array([0.2578252135686162, 0.2578252135686162])\n",
+    "correct_criterion = 124.3621823556148\n",
+    "\n",
+    "start_x = np.array([0.3, 0.4])"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "13c144d7",
+   "metadata": {},
+   "source": [
+    "### What would scipy do?"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "id": "21383146",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "scipy_res = scipy_minimize(jennrich_sampson, x0=start_x, method=\"L-BFGS-B\")"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "id": "36d8e926",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "True"
+      ]
+     },
+     "execution_count": 3,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "scipy_res.success"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "id": "40511eb9",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "(array([0.2578, 0.2578]), array([0.3384, 0.008 ]))"
+      ]
+     },
+     "execution_count": 4,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "correct_params.round(4), scipy_res.x.round(4)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "ca245e3b",
+   "metadata": {},
+   "source": [
+    "So, scipy thinks it solved the problem successfully but the result is far off. (Note that scipy would have given us a warning, but we disabled warnings in order to not clutter the output).\n",
+    "\n",
+    "### Estimagic's error handling magic"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 5,
+   "id": "617108b1",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "(array([0.25782521, 0.25782521]), array([0.25782521, 0.25782522]))"
+      ]
+     },
+     "execution_count": 5,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "res = minimize(\n",
+    "    criterion=jennrich_sampson,\n",
+    "    params=start_x,\n",
+    "    algorithm=\"scipy_lbfgsb\",\n",
+    "    error_handling=\"continue\",\n",
+    ")\n",
+    "\n",
+    "correct_params, res.params"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "7fba61dd",
+   "metadata": {},
+   "source": [
+    "### How does the magic work\n",
+    "\n",
+    "When an error occurs and `error_handling` is set to `\"continue\"`, estimagic replaces your criterion with a dummy function (and adjusts the derivative accordingly). \n",
+    "\n",
+    "The dummy function has too important properties:\n",
+    "\n",
+    "1. Its value is always higher than criterion at start params. \n",
+    "2. Its slope guides the optimizer back towards the start parameters. I.e., if you are minimizing, the direction of strongest decrease is towards the start parameters, if you are maximizing, the direction of strongest increase is towards the start parameters. \n",
+    "\n",
+    "Therefore, when hitting an undefined area, an optimizer can take a few steps back until it is in better territorry and then continue its work. \n",
+    "\n",
+    "Importantly, the optimizer will not simply go back to a previously evaluated point (which would just lead to cyclical behavior). It will just go back in the direction it originally came from.\n",
+    "\n",
+    "In the concrete example, the dummy function would look similar to the following:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 6,
+   "id": "dbf49b7b",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "def dummy(params):\n",
+    "    start_params = np.array([0.3, 0.4])\n",
+    "    # this is close to the actual value used by estimagic\n",
+    "    constant = 8000\n",
+    "    # the actual slope used by estimagic would be even smaller\n",
+    "    slope = 10_000\n",
+    "    diff = params - start_params\n",
+    "    return constant + slope * np.linalg.norm(diff)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "5958751d",
+   "metadata": {},
+   "source": [
+    "Now, let's plot the two functions. For better illustration we assume that the jennrich_sampson function is only defined until it reaches a value of 100_000 and the dummy function takes over from there.  "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 7,
+   "id": "061ba6c5",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "from plotly import graph_objects as go\n",
+    "\n",
+    "grid = np.linspace(0, 1)\n",
+    "params = [np.full(2, val) for val in grid]\n",
+    "values = np.array([jennrich_sampson(p) for p in params])\n",
+    "values = np.where(values <= 1e5, values, np.nan)\n",
+    "dummy_values = np.array([dummy(p) for p in params])\n",
+    "dummy_values = np.where(np.isfinite(values), np.nan, dummy_values)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 8,
+   "id": "2556c2fb",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "image/png": "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"
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "fig = go.Figure()\n",
+    "fig.add_trace(go.Scatter(x=grid, y=values))\n",
+    "fig.add_trace(go.Scatter(x=grid, y=dummy_values))\n",
+    "fig.show(renderer=\"png\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "21c56b35",
+   "metadata": {},
+   "source": [
+    "We can see that the dummy function is lower than the highest achieved value of `jennrich_sampson` but higher than the start values. It is also rather flat. Fortunately, that is all we need. "
+   ]
+  }
+ ],
+ "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.8.13"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/docs/source/how_to_guides/optimization/how_to_handle_errors_during_optimization.rst b/docs/source/how_to_guides/optimization/how_to_handle_errors_during_optimization.rst
deleted file mode 100644
index adba662f9..000000000
--- a/docs/source/how_to_guides/optimization/how_to_handle_errors_during_optimization.rst
+++ /dev/null
@@ -1,83 +0,0 @@
-.. _optimization_error_handling:
-
-========================================
-How to handle errors during optimization
-========================================
-
-
-Try to avoid errors
-===================
-
-Often, optimizers try quite extreme parameter vectors, which then can raise errors in
-your criterion function or derivative. Even though estimagic makes it simple to restart
-your optimization from the last parameter value, this is annoying. Below is a very short
-list of things you can do to avoid this behavior:
-
-- Set bounds for your parameters, that prevent extreme parameter constellations.
-- Use the ``bounds_distance`` option with a not too small value for ``covariance`` and
-  ``sdcorr`` constraints.
-- Use :func:`~estimagic.utilities.robust_cholesky` instead of normal
-  cholesky decompositions or try to avoid cholesky decompositions by restructuring
-  your algorithm.
-- Avoid to take ``np.exp`` without further safeguards. With 64 bit floating point
-  numbers, the exponential function is only well defined roughly between -700 and 700.
-  Below it is -inf, above it is inf. Sometimes you can use ``scipy.special.logsumexp``
-  to avoid unsafe evaluations of the exponential function. Otherwise you can avoid
-  problems by setting bounds. In the worst case, use clipping. Note, however, that
-  clipping leads to flat regions in your criterion function which can lead to erroneous
-  convergence.
-
-
-The two levels of error handling
-================================
-
-Despite all efforts, some errors cannot be avoided. Therefore, you have a lot of control
-over error handling during the optimizations. The three levels on which you can
-configure it are:
-
-The ``error_handling`` and ``error_penalty`` arguments of ``maximize`` and ``minimize``
----------------------------------------------------------------------------------------
-
-These two arguments determine if the optimization algorithms sees an
-error that might occur during the criterion or gradient evaluation.
-
-``error_handling`` takes the values ``"raise"`` and ``"continue"``. If ``"raise"``,
-the error is not caught and the optimizer will stop or handle it. If ``"continue"``,
-we replace the criterion function by a penalty term that can be fix or parameter
-dependent and the optimizer will never know that an error occurred. Note that you will
-still be warned about all errors.
-
-The default error handling is ``"raise"``.
-
-``error_penalty`` is a dict with the entries "constant" (float) and "slope" (float)
-which determine the value of the penalty. The penalty function is then calculated as
-``constant + slope * norm(params - start_params)`` where ``norm`` is the euclidean
-distance.
-
-Making the penalty parameter dependent via the slope is meant to avoid flat spots in the
-penalized region. For minimization problems, a positive slope guides the optimizer back
-to the start parameters until it reaches a valid region again. The same holds for a
-negative slope in maximization problems.
-
-Of course you can deactivate this and set the slope to 0.
-
-The default constant is f0 + abs(f0) + 100 for minimizations and f0 - abs(f0) - 100 for
-maximizations, where f0 is the criterion value at start parameters.
-The default slope is 0.1 for minimization problems and -0.1 for maximization problems.
-
-
-The ``error_handling`` entry in the ``batch_evaluator_options``
----------------------------------------------------------------
-
-This argument determines when you get notified about a failed optimization.
-
-It is mainly relevant when using estimagic's ability to run several optimizations in
-parallel.
-
-It can take the values ``"raise"`` and ``"continue"``. If ``"raise"``, you will get an
-error as soon as any optimization fails. Otherwise, estimagic runs all optimizations
-even if some of them fail. The result of the failing optimizations will contain the
-traceback of the error.
-
-The default value is ``"continue"`` if more than one optimization is run and ``"raise"``
-if you run only one optimization.
diff --git a/docs/source/how_to_guides/optimization/index.rst b/docs/source/how_to_guides/optimization/index.rst
index 386e66c98..51dc018b4 100644
--- a/docs/source/how_to_guides/optimization/index.rst
+++ b/docs/source/how_to_guides/optimization/index.rst
@@ -11,7 +11,7 @@ Optimization
    how_to_specify_constraints
    how_to_use_logging
    how_to_use_the_dashboard
-   how_to_handle_errors_during_optimization
+   how_to_handle_errors_during_optimization.ipynb
    how_to_scale_optimization_problems
    how_to_do_multistart_optimizations.ipynb
    how_to_benchmark_optimization_algorithms.ipynb
diff --git a/docs/source/reference_guides/index.rst b/docs/source/reference_guides/index.rst
index b8fab0bc3..d43523ed7 100644
--- a/docs/source/reference_guides/index.rst
+++ b/docs/source/reference_guides/index.rst
@@ -34,6 +34,17 @@ Optimization
 
 
 
+.. dropdown:: count_free_params
+
+    .. autofunction:: count_free_params
+
+
+.. dropdown:: check_constraints
+
+    .. autofunction:: check_constraints
+
+
+
 .. _first_derivative:
 
 Derivatives
diff --git a/src/estimagic/__init__.py b/src/estimagic/__init__.py
index e90420537..317047a55 100644
--- a/src/estimagic/__init__.py
+++ b/src/estimagic/__init__.py
@@ -11,6 +11,8 @@
 from estimagic.logging.read_log import OptimizeLogReader
 from estimagic.optimization.optimize import maximize
 from estimagic.optimization.optimize import minimize
+from estimagic.parameters.constraint_tools import check_constraints
+from estimagic.parameters.constraint_tools import count_free_params
 from estimagic.visualization.convergence_plot import convergence_plot
 from estimagic.visualization.derivative_plot import derivative_plot
 from estimagic.visualization.estimation_table import estimation_table
@@ -53,6 +55,8 @@
     "render_latex",
     "criterion_plot",
     "params_plot",
+    "count_free_params",
+    "check_constraints",
     "OptimizeLogReader",
     "__version__",
 ]
diff --git a/src/estimagic/differentiation/derivatives.py b/src/estimagic/differentiation/derivatives.py
index 3d3d5263a..f17e90f96 100644
--- a/src/estimagic/differentiation/derivatives.py
+++ b/src/estimagic/differentiation/derivatives.py
@@ -2,6 +2,7 @@
 import itertools
 import re
 from itertools import product
+from typing import NamedTuple
 
 import numpy as np
 import pandas as pd
@@ -14,12 +15,16 @@
 from estimagic.parameters.block_trees import matrix_to_block_tree
 from estimagic.parameters.parameter_bounds import get_bounds
 from estimagic.parameters.tree_registry import get_registry
-from estimagic.utilities import namedtuple_from_kwargs
 from pybaum import tree_flatten
 from pybaum import tree_just_flatten as tree_leaves
 from pybaum import tree_unflatten
 
 
+class Evals(NamedTuple):
+    pos: np.ndarray
+    neg: np.ndarray
+
+
 def first_derivative(
     func,
     params,
@@ -126,6 +131,9 @@ def first_derivative(
                 1.
 
     """
+    _is_fast_params = isinstance(params, np.ndarray) and params.ndim == 1
+    registry = get_registry(extended=True)
+
     lower_bounds, upper_bounds = get_bounds(params, lower_bounds, upper_bounds)
 
     # handle keyword arguments
@@ -133,9 +141,11 @@ def first_derivative(
     partialed_func = functools.partial(func, **func_kwargs)
 
     # convert params to numpy
-    registry = get_registry(extended=True)
-    x, params_treedef = tree_flatten(params, registry=registry)
-    x = np.array(x, dtype=np.float64)
+    if not _is_fast_params:
+        x, params_treedef = tree_flatten(params, registry=registry)
+        x = np.array(x, dtype=np.float64)
+    else:
+        x = params.astype(float)
 
     if np.isnan(x).any():
         raise ValueError("The parameter vector must not contain NaNs.")
@@ -166,11 +176,12 @@ def first_derivative(
                 evaluation_points.append(point)
 
     # convert the numpy arrays to whatever is needed by func
-    evaluation_points = [
-        # entries are either a numpy.ndarray or np.nan
-        _unflatten_if_not_nan(p, params_treedef, registry)
-        for p in evaluation_points
-    ]
+    if not _is_fast_params:
+        evaluation_points = [
+            # entries are either a numpy.ndarray or np.nan
+            _unflatten_if_not_nan(p, params_treedef, registry)
+            for p in evaluation_points
+        ]
 
     # we always evaluate f0, so we can fall back to one-sided derivatives if
     # two-sided derivatives fail. The extra cost is negligible in most cases.
@@ -198,17 +209,32 @@ def first_derivative(
         raw_evals = raw_evals[:-1]
     func_value = f0
 
-    f0_tree = f0[key] if key is not None and isinstance(f0, dict) else f0
-    f0 = tree_leaves(f0_tree, registry=registry)
-    f0 = np.array(f0, dtype=np.float64)
+    use_key = key is not None and isinstance(f0, dict)
+    f0_tree = f0[key] if use_key else f0
+    scalar_out = np.isscalar(f0_tree)
+    vector_out = isinstance(f0_tree, np.ndarray) and f0_tree.ndim == 1
+
+    if scalar_out:
+        f0 = np.array([f0_tree], dtype=float)
+    elif vector_out:
+        f0 = f0_tree.astype(float)
+    else:
+        f0 = tree_leaves(f0_tree, registry=registry)
+        f0 = np.array(f0, dtype=np.float64)
 
     # convert the raw evaluations to numpy arrays
-    raw_evals = _convert_evals_to_numpy(raw_evals, key, registry)
+    raw_evals = _convert_evals_to_numpy(
+        raw_evals=raw_evals,
+        key=key,
+        registry=registry,
+        is_scalar_out=scalar_out,
+        is_vector_out=vector_out,
+    )
 
     # apply finite difference formulae
     evals = np.array(raw_evals).reshape(2, n_steps, len(x), -1)
     evals = np.transpose(evals, axes=(0, 1, 3, 2))
-    evals = namedtuple_from_kwargs(pos=evals[0], neg=evals[1])
+    evals = Evals(pos=evals[0], neg=evals[1])
 
     jac_candidates = {}
     for m in ["forward", "backward", "central"]:
@@ -236,7 +262,12 @@ def first_derivative(
         raise Exception(exc_info)
 
     # results processing
-    derivative = matrix_to_block_tree(jac, f0_tree, params)
+    if _is_fast_params and vector_out:
+        derivative = jac
+    elif _is_fast_params and scalar_out:
+        derivative = jac.flatten()
+    else:
+        derivative = matrix_to_block_tree(jac, f0_tree, params)
 
     result = {"derivative": derivative}
     if return_func_value:
@@ -553,7 +584,7 @@ def _reshape_one_step_evals(raw_evals_one_step, n_steps, dim_x):
     """
     evals = np.array(raw_evals_one_step).reshape(2, n_steps, dim_x, -1)
     evals = evals.swapaxes(2, 3)
-    evals = namedtuple_from_kwargs(pos=evals[0], neg=evals[1])
+    evals = Evals(pos=evals[0], neg=evals[1])
     return evals
 
 
@@ -578,7 +609,7 @@ def _reshape_two_step_evals(raw_evals_two_step, n_steps, dim_x):
     evals = np.array(raw_evals_two_step).reshape(2, n_steps, dim_x, dim_x, -1)
     evals = evals.transpose(0, 1, 4, 2, 3)
     evals[..., tril_idx[0], tril_idx[1]] = evals[..., tril_idx[1], tril_idx[0]]
-    evals = namedtuple_from_kwargs(pos=evals[0], neg=evals[1])
+    evals = Evals(pos=evals[0], neg=evals[1])
     return evals
 
 
@@ -609,7 +640,7 @@ def _reshape_cross_step_evals(raw_evals_cross_step, n_steps, dim_x, f0):
     evals = evals.transpose(0, 1, 4, 2, 3)
     evals[0][..., tril_idx[0], tril_idx[1]] = evals[1][..., tril_idx[1], tril_idx[0]]
     evals[0][..., diag_idx[0], diag_idx[1]] = np.atleast_2d(f0).T[np.newaxis, ...]
-    evals = namedtuple_from_kwargs(pos=evals[0], neg=evals[0].swapaxes(2, 3))
+    evals = Evals(pos=evals[0], neg=evals[0].swapaxes(2, 3))
     return evals
 
 
@@ -690,7 +721,9 @@ def _convert_richardson_candidates_to_frame(jac, err):
     return df
 
 
-def _convert_evals_to_numpy(raw_evals, key, registry):
+def _convert_evals_to_numpy(
+    raw_evals, key, registry, is_scalar_out=False, is_vector_out=False
+):
     """harmonize the output of the function evaluations.
 
     The raw_evals might contain dictionaries of which we only need one entry, scalar
@@ -704,13 +737,22 @@ def _convert_evals_to_numpy(raw_evals, key, registry):
         for val in raw_evals
     ]
 
-    # get rid of pandas objects
-    evals = [
-        np.array(tree_leaves(val, registry=registry), dtype=np.float64)
-        if not _is_scalar_nan(val)
-        else val
-        for val in evals
-    ]
+    # convert pytrees to arrays
+    if is_scalar_out:
+        evals = [
+            np.array([val], dtype=float) if not _is_scalar_nan(val) else val
+            for val in evals
+        ]
+
+    elif is_vector_out:
+        evals = [val.astype(float) if not _is_scalar_nan(val) else val for val in evals]
+    else:
+        evals = [
+            np.array(tree_leaves(val, registry=registry), dtype=np.float64)
+            if not _is_scalar_nan(val)
+            else val
+            for val in evals
+        ]
 
     # find out the correct output shape
     try:
diff --git a/src/estimagic/differentiation/finite_differences.py b/src/estimagic/differentiation/finite_differences.py
index 2fdce3638..6c093f50d 100644
--- a/src/estimagic/differentiation/finite_differences.py
+++ b/src/estimagic/differentiation/finite_differences.py
@@ -8,8 +8,14 @@
 warnings or errors for that case.
 
 """
+from typing import NamedTuple
+
 import numpy as np
-from estimagic.utilities import namedtuple_from_kwargs
+
+
+class Evals(NamedTuple):
+    pos: np.ndarray
+    neg: np.ndarray
 
 
 def jacobian(evals, steps, f0, method):
@@ -100,7 +106,7 @@ def hessian(evals, steps, f0, method):
     f0 = f0.reshape(1, dim_f, 1, 1)
 
     # rename variables to increase readability in formulas
-    evals_one = namedtuple_from_kwargs(
+    evals_one = Evals(
         pos=np.expand_dims(evals["one_step"].pos, axis=3),
         neg=np.expand_dims(evals["one_step"].neg, axis=3),
     )
diff --git a/src/estimagic/differentiation/generate_steps.py b/src/estimagic/differentiation/generate_steps.py
index d7e38388a..d31ef5116 100644
--- a/src/estimagic/differentiation/generate_steps.py
+++ b/src/estimagic/differentiation/generate_steps.py
@@ -106,9 +106,10 @@ def generate_steps(
             x, pos, neg, method, lower_step_bounds, upper_step_bounds
         )
 
-    pos, neg = _rescale_to_accomodate_bounds(
-        base_steps, pos, neg, lower_step_bounds, upper_step_bounds, min_steps
-    )
+    if np.isfinite(lower_bounds).any() or np.isfinite(upper_bounds).any():
+        pos, neg = _rescale_to_accomodate_bounds(
+            base_steps, pos, neg, lower_step_bounds, upper_step_bounds, min_steps
+        )
 
     with warnings.catch_warnings():
         warnings.simplefilter("ignore", category=RuntimeWarning)
diff --git a/src/estimagic/optimization/optimize.py b/src/estimagic/optimization/optimize.py
index 1764fd7c7..0cc412231 100644
--- a/src/estimagic/optimization/optimize.py
+++ b/src/estimagic/optimization/optimize.py
@@ -4,6 +4,7 @@
 
 from estimagic.batch_evaluators import process_batch_evaluator
 from estimagic.exceptions import InvalidFunctionError
+from estimagic.exceptions import InvalidKwargsError
 from estimagic.logging.database_utilities import append_row
 from estimagic.logging.database_utilities import load_database
 from estimagic.logging.database_utilities import make_optimization_iteration_table
@@ -850,9 +851,8 @@ def _fill_numdiff_options_with_defaults(numdiff_options, lower_bounds, upper_bou
     ignored = [option for option in numdiff_options if option not in relevant]
 
     if ignored:
-        warnings.warn(
-            "The following numdiff options were ignored because they will be set "
-            f"internally during the optimization:\n\n{ignored}"
+        raise InvalidKwargsError(
+            f"The following numdiff_options are not allowed:\n\n{ignored}"
         )
 
     numdiff_options = {
diff --git a/src/estimagic/parameters/constraint_tools.py b/src/estimagic/parameters/constraint_tools.py
new file mode 100644
index 000000000..0bc989ff0
--- /dev/null
+++ b/src/estimagic/parameters/constraint_tools.py
@@ -0,0 +1,53 @@
+from estimagic.parameters.conversion import get_converter
+
+
+def count_free_params(params, constraints=None):
+    """Count the (free) parameters of an optimization problem.
+
+    Args:
+        params (pytree): The parameters.
+        constraints (list): The constraints for the optimization problem. If constraints
+            are provided, only the free parameters are counted.
+
+    Returns:
+        int: Number of (free) parameters
+
+    """
+    _, flat_params = get_converter(
+        func=None,
+        params=params,
+        constraints=constraints,
+        lower_bounds=None,
+        upper_bounds=None,
+        func_eval=3,
+        primary_key="value",
+        scaling=False,
+        scaling_options={},
+    )
+
+    return int(flat_params.free_mask.sum())
+
+
+def check_constraints(params, constraints):
+    """Raise an error if constraints are invalid or not satisfied in params.
+
+    Args:
+        params (pytree): The parameters.
+        constraints (list): The constraints for the optimization problem.
+
+    Raises:
+        InvalidParamsError: If constraints are valid but not satisfied.
+        InvalidConstraintError: If constraints are invalid.
+
+    """
+    get_converter(
+        func=None,
+        params=params,
+        constraints=constraints,
+        lower_bounds=None,
+        upper_bounds=None,
+        func_eval=3,
+        primary_key="value",
+        scaling=False,
+        scaling_options={},
+    )
diff --git a/src/estimagic/parameters/parameter_bounds.py b/src/estimagic/parameters/parameter_bounds.py
index 59878b2bb..388d89b6c 100644
--- a/src/estimagic/parameters/parameter_bounds.py
+++ b/src/estimagic/parameters/parameter_bounds.py
@@ -32,6 +32,19 @@ def get_bounds(
         np.ndarray: Consolidated and flattened upper_bounds.
 
     """
+    fast_path = _is_fast_path(
+        params=params,
+        lower_bounds=lower_bounds,
+        upper_bounds=upper_bounds,
+        add_soft_bounds=add_soft_bounds,
+    )
+    if fast_path:
+        return _get_fast_path_bounds(
+            params=params,
+            lower_bounds=lower_bounds,
+            upper_bounds=upper_bounds,
+        )
+
     registry = get_registry(extended=True) if registry is None else registry
     n_params = len(tree_leaves(params, registry=registry))
 
@@ -80,3 +93,41 @@ def _update_bounds_and_flatten(bounds_tree, bounds, direction):
     bounds_flat = tree_leaves(bounds_tree, registry=registry)
     bounds_flat = np.array(bounds_flat, dtype=np.float64)
     return bounds_flat
+
+
+def _is_fast_path(params, lower_bounds, upper_bounds, add_soft_bounds):
+    out = True
+    if add_soft_bounds:
+        out = False
+
+    if not _is_1d_array(params):
+        out = False
+
+    for bound in lower_bounds, upper_bounds:
+        if not (_is_1d_array(bound) or bound is None):
+            out = False
+    return out
+
+
+def _is_1d_array(candidate):
+    return isinstance(candidate, np.ndarray) and candidate.ndim == 1
+
+
+def _get_fast_path_bounds(params, lower_bounds, upper_bounds):
+    if lower_bounds is None:
+        # faster than np.full
+        lower_bounds = np.array([-np.inf] * len(params))
+    else:
+        lower_bounds = lower_bounds.astype(float)
+
+    if upper_bounds is None:
+        # faster than np.full
+        upper_bounds = np.array([np.inf] * len(params))
+    else:
+        upper_bounds = upper_bounds.astype(float)
+
+    if (lower_bounds > upper_bounds).any():
+        msg = "Invalid bounds. Some lower bounds are larger than upper bounds."
+        raise ValueError(msg)
+
+    return lower_bounds, upper_bounds
diff --git a/src/estimagic/utilities.py b/src/estimagic/utilities.py
index 1a8faee70..06aaa2929 100644
--- a/src/estimagic/utilities.py
+++ b/src/estimagic/utilities.py
@@ -1,5 +1,4 @@
 import warnings
-from collections import namedtuple
 from hashlib import sha1
 
 import numpy as np
@@ -257,39 +256,6 @@ def _make_cholesky_unique(chol):
     return chol * sign_switcher
 
 
-def namedtuple_from_dict(field_dict):
-    """Filled namedtuple generated from a dictionary.
-
-    Example:
-        >>> namedtuple_from_dict({'a': 1, 'b': 2})
-        NamedTuple(a=1, b=2)
-
-    """
-    return namedtuple("NamedTuple", field_dict)(**field_dict)
-
-
-def namedtuple_from_kwargs(**kwargs):
-    """Filled namedtuple generated from keyword arguments.
-
-    Example:
-        >>> namedtuple_from_kwargs(a=1, b=2)
-        NamedTuple(a=1, b=2)
-
-    """
-    return namedtuple("NamedTuple", kwargs)(**kwargs)
-
-
-def namedtuple_from_iterables(field_names, field_entries):
-    """Filled namedtuple generated from field_names and field_entries.
-
-    Example:
-        >>> namedtuple_from_iterables(field_names=['a', 'b'], field_entries=[1, 2])
-        NamedTuple(a=1, b=2)
-
-    """
-    return namedtuple("NamedTuple", field_names)(*field_entries)
-
-
 def hash_array(arr):
     """Create a hashsum for fast comparison of numpy arrays."""
     # make sure array can be represented exactly in floating point numbers
diff --git a/src/estimagic/visualization/plotting_utilities.py b/src/estimagic/visualization/plotting_utilities.py
index db2af8f47..cab2250b4 100644
--- a/src/estimagic/visualization/plotting_utilities.py
+++ b/src/estimagic/visualization/plotting_utilities.py
@@ -95,7 +95,7 @@ def combine_plots(
                 row=row + 1,
             )
 
-    fig.update_layout(**layout_kwargs, width=400 * plots_per_row, height=200 * nrows)
+    fig.update_layout(**layout_kwargs, width=400 * plots_per_row, height=300 * nrows)
     if share_yrange_all:
         lb = []
         ub = []
@@ -293,9 +293,12 @@ def get_make_subplot_kwargs(sharex, sharey, kwrgs, plots_per_row, plots):
         "print_grid": False,
         "shared_yaxes": sharey,
         "shared_xaxes": sharex,
-        "vertical_spacing": (1 / (nrows - 1)) / 3,
         "horizontal_spacing": 1 / (plots_per_row * 4),
     }
+
+    if nrows > 1:
+        default_kwargs["vertical_spacing"] = (1 / (nrows - 1)) / 3
+
     if not sharey:
         default_kwargs["horizontal_spacing"] = 2 * default_kwargs["horizontal_spacing"]
     if kwrgs:


Test patch:
diff --git a/tests/differentiation/test_derivatives.py b/tests/differentiation/test_derivatives.py
index 8a9dd1ba4..e04f1a2f8 100644
--- a/tests/differentiation/test_derivatives.py
+++ b/tests/differentiation/test_derivatives.py
@@ -15,14 +15,15 @@
 from estimagic.differentiation.derivatives import _reshape_one_step_evals
 from estimagic.differentiation.derivatives import _reshape_two_step_evals
 from estimagic.differentiation.derivatives import _select_minimizer_along_axis
+from estimagic.differentiation.derivatives import Evals
 from estimagic.differentiation.derivatives import first_derivative
 from estimagic.differentiation.derivatives import second_derivative
+from estimagic.differentiation.generate_steps import Steps
 from estimagic.examples.numdiff_functions import logit_loglike
 from estimagic.examples.numdiff_functions import logit_loglike_gradient
 from estimagic.examples.numdiff_functions import logit_loglike_hessian
 from estimagic.examples.numdiff_functions import logit_loglikeobs
 from estimagic.examples.numdiff_functions import logit_loglikeobs_jacobian
-from estimagic.utilities import namedtuple_from_kwargs
 from numpy.testing import assert_array_almost_equal as aaae
 from pandas.testing import assert_frame_equal
 from scipy.optimize._numdiff import approx_derivative
@@ -253,8 +254,8 @@ def test_first_derivative_jacobian_richardson(example_function_jacobian_fixtures
 def test_convert_evaluation_data_to_frame():
     arr = np.arange(4).reshape(2, 2)
     arr2 = arr.reshape(2, 1, 2)
-    steps = namedtuple_from_kwargs(pos=arr, neg=-arr)
-    evals = namedtuple_from_kwargs(pos=arr2, neg=-arr2)
+    steps = Steps(pos=arr, neg=-arr)
+    evals = Evals(pos=arr2, neg=-arr2)
     expected = [
         [1, 0, 0, 0, 0, 0],
         [1, 0, 1, 0, 1, 1],
diff --git a/tests/differentiation/test_finite_differences.py b/tests/differentiation/test_finite_differences.py
index 4ce24a8b7..70ef8d169 100644
--- a/tests/differentiation/test_finite_differences.py
+++ b/tests/differentiation/test_finite_differences.py
@@ -1,7 +1,8 @@
 import numpy as np
 import pytest
+from estimagic.differentiation.derivatives import Evals
 from estimagic.differentiation.finite_differences import jacobian
-from estimagic.utilities import namedtuple_from_kwargs
+from estimagic.differentiation.generate_steps import Steps
 from numpy.testing import assert_array_almost_equal as aaae
 
 
@@ -9,7 +10,7 @@
 def jacobian_inputs():
     """Very contrived test case for finite difference formulae with linear function."""
     steps_pos = np.array([[0.1, 0.1, 0.1, 0.1], [0.2, 0.2, 0.2, 0.2]])
-    steps = namedtuple_from_kwargs(pos=steps_pos, neg=-steps_pos)
+    steps = Steps(pos=steps_pos, neg=-steps_pos)
 
     jac1 = (np.arange(1, 13)).reshape(3, 4)
     jac2 = jac1 * 1.1
@@ -18,7 +19,7 @@ def jacobian_inputs():
     evals_pos2 = jac2 @ (np.zeros((4, 4)) + np.eye(4) * 0.2)
     evals_neg1 = jac1 @ (np.zeros((4, 4)) - np.eye(4) * 0.1)
     evals_neg2 = jac2 @ (np.zeros((4, 4)) - np.eye(4) * 0.2)
-    evals = namedtuple_from_kwargs(
+    evals = Evals(
         pos=np.array([evals_pos1, evals_pos2]), neg=np.array([evals_neg1, evals_neg2])
     )
 
diff --git a/tests/optimization/test_multistart.py b/tests/optimization/test_multistart.py
index 27765a4db..f14ac51ca 100644
--- a/tests/optimization/test_multistart.py
+++ b/tests/optimization/test_multistart.py
@@ -190,3 +190,20 @@ def test_with_invalid_bounds():
             algorithm="scipy_neldermead",
             multistart=True,
         )
+
+
+def test_with_scaling():
+    def _crit(params):
+        x = params - np.arange(len(params))
+        return x @ x
+
+    res = minimize(
+        criterion=_crit,
+        params=np.full(5, 10),
+        soft_lower_bounds=np.full(5, -1),
+        soft_upper_bounds=np.full(5, 11),
+        algorithm="scipy_lbfgsb",
+        multistart=True,
+    )
+
+    aaae(res.params, np.arange(5))
diff --git a/tests/optimization/test_optimize.py b/tests/optimization/test_optimize.py
index ca03cc623..8bcb5a721 100644
--- a/tests/optimization/test_optimize.py
+++ b/tests/optimization/test_optimize.py
@@ -3,6 +3,7 @@
 import pandas as pd
 import pytest
 from estimagic.examples.criterion_functions import sos_scalar_criterion
+from estimagic.exceptions import InvalidKwargsError
 from estimagic.optimization.optimize import maximize
 from estimagic.optimization.optimize import minimize
 
@@ -32,3 +33,14 @@ def raising_crit_and_deriv(params):
             algorithm="scipy_lbfgsb",
             criterion_and_derivative=raising_crit_and_deriv,
         )
+
+
+def test_with_invalid_numdiff_options():
+
+    with pytest.raises(InvalidKwargsError):
+        minimize(
+            criterion=lambda x: x @ x,
+            params=np.arange(5),
+            algorithm="scipy_lbfgsb",
+            numdiff_options={"bla": 15},
+        )
diff --git a/tests/parameters/test_constraint_tools.py b/tests/parameters/test_constraint_tools.py
new file mode 100644
index 000000000..9676c1241
--- /dev/null
+++ b/tests/parameters/test_constraint_tools.py
@@ -0,0 +1,23 @@
+import pytest
+from estimagic.exceptions import InvalidParamsError
+from estimagic.parameters.constraint_tools import check_constraints
+from estimagic.parameters.constraint_tools import count_free_params
+
+
+def test_count_free_params_no_constraints():
+    params = {"a": 1, "b": 2, "c": [3, 3]}
+    assert count_free_params(params) == 4
+
+
+def test_count_free_params_with_constraints():
+    params = {"a": 1, "b": 2, "c": [3, 3]}
+    constraints = [{"selector": lambda x: x["c"], "type": "equality"}]
+    assert count_free_params(params, constraints) == 3
+
+
+def test_check_constraints():
+    params = {"a": 1, "b": 2, "c": [3, 4]}
+    constraints = [{"selector": lambda x: x["c"], "type": "equality"}]
+
+    with pytest.raises(InvalidParamsError):
+        check_constraints(params, constraints)