Last active
December 12, 2024 08:53
-
-
Save jcheong0428/f25b47405d9d328691c102787bc92175 to your computer and use it in GitHub Desktop.
LMER in Python.ipynb
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "nbformat": 4, | |
| "nbformat_minor": 0, | |
| "metadata": { | |
| "colab": { | |
| "name": "LMER in Python.ipynb", | |
| "provenance": [], | |
| "collapsed_sections": [], | |
| "authorship_tag": "ABX9TyPdaKVOdk5mObxu/OYmMtUY", | |
| "include_colab_link": true | |
| }, | |
| "kernelspec": { | |
| "name": "python3", | |
| "display_name": "Python 3" | |
| } | |
| }, | |
| "cells": [ | |
| { | |
| "cell_type": "markdown", | |
| "metadata": { | |
| "id": "view-in-github", | |
| "colab_type": "text" | |
| }, | |
| "source": [ | |
| "<a href=\"https://colab.research.google.com/gist/jcheong0428/f25b47405d9d328691c102787bc92175/lmer-in-python.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": { | |
| "id": "lQLrVu9n3v1t" | |
| }, | |
| "source": [ | |
| "# Three ways to run Linear Mixed Effects Models (LMER) in Python Jupyter Notebooks\n", | |
| "\n", | |
| "Written by [Jin Hyun Cheong](http://jinhyuncheong.com)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": { | |
| "id": "zGEBwMltPF3e" | |
| }, | |
| "source": [ | |
| "# 1. LMER in Statsmodels" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "metadata": { | |
| "colab": { | |
| "base_uri": "https://localhost:8080/" | |
| }, | |
| "id": "yXbcUxbU33sg", | |
| "outputId": "ab36692f-5050-4723-edda-e4563b26f0b0" | |
| }, | |
| "source": [ | |
| "# Install Statsmodels\n", | |
| "# Adapted from https://www.statsmodels.org/stable/examples/notebooks/generated/mixed_lm_example.html\n", | |
| "!pip install -q statsmodels\n", | |
| "\n", | |
| "# Load packages\n", | |
| "import numpy as np\n", | |
| "import pandas as pd\n", | |
| "import statsmodels.api as sm\n", | |
| "import statsmodels.formula.api as smf\n", | |
| "\n", | |
| "# Load dataset\n", | |
| "data = sm.datasets.get_rdataset('dietox', 'geepack').data\n", | |
| "\n", | |
| "# Run LMER\n", | |
| "md = smf.mixedlm(\"Weight ~ Time\", data, groups=data[\"Pig\"], re_formula=\"~Time\")\n", | |
| "mdf = md.fit(method=[\"lbfgs\"])\n", | |
| "print(mdf.summary())" | |
| ], | |
| "execution_count": 3, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "text": [ | |
| " Mixed Linear Model Regression Results\n", | |
| "===========================================================\n", | |
| "Model: MixedLM Dependent Variable: Weight \n", | |
| "No. Observations: 861 Method: REML \n", | |
| "No. Groups: 72 Scale: 6.0372 \n", | |
| "Min. group size: 11 Likelihood: -2217.0475\n", | |
| "Max. group size: 12 Converged: Yes \n", | |
| "Mean group size: 12.0 \n", | |
| "-----------------------------------------------------------\n", | |
| " Coef. Std.Err. z P>|z| [0.025 0.975]\n", | |
| "-----------------------------------------------------------\n", | |
| "Intercept 15.739 0.550 28.603 0.000 14.660 16.817\n", | |
| "Time 6.939 0.080 86.925 0.000 6.783 7.095\n", | |
| "Group Var 19.503 1.561 \n", | |
| "Group x Time Cov 0.294 0.153 \n", | |
| "Time Var 0.416 0.033 \n", | |
| "===========================================================\n", | |
| "\n" | |
| ], | |
| "name": "stdout" | |
| } | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": { | |
| "id": "KlnEpHrLPHGi" | |
| }, | |
| "source": [ | |
| "# 2. LMER in Rpy2" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "metadata": { | |
| "id": "2xa_SFsTscRg" | |
| }, | |
| "source": [ | |
| "# Install R and Rpy2\n", | |
| "!apt-get install r-base\n", | |
| "!pip install -q rpy2\n", | |
| "\n", | |
| "# Install LMER packages (THIS TAKES ABOUT 3~5 minutes)\n", | |
| "packnames = ('lme4', 'lmerTest', 'emmeans', \"geepack\")\n", | |
| "from rpy2.robjects.packages import importr\n", | |
| "from rpy2.robjects.vectors import StrVector\n", | |
| "utils = importr(\"utils\")\n", | |
| "utils.chooseCRANmirror(ind=1)\n", | |
| "utils.install_packages(StrVector(packnames))" | |
| ], | |
| "execution_count": null, | |
| "outputs": [] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "metadata": { | |
| "id": "ggUBeIgzsczN" | |
| }, | |
| "source": [ | |
| "%load_ext rpy2.ipython\n", | |
| "# Enable cell magic for Rpy2 interface" | |
| ], | |
| "execution_count": 5, | |
| "outputs": [] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "metadata": { | |
| "colab": { | |
| "base_uri": "https://localhost:8080/" | |
| }, | |
| "id": "dRjIx36k6IR_", | |
| "outputId": "44be316a-e960-4022-fbd1-3913730e1cbc" | |
| }, | |
| "source": [ | |
| "%%R \n", | |
| "# load LMER libraries\n", | |
| "library(lme4)\n", | |
| "library(lmerTest)\n", | |
| "# load dataset in R\n", | |
| "data(dietox, package='geepack')\n", | |
| "# LMER model in R\n", | |
| "m<-lmer('Weight ~ Time + (1+Time|Pig)', data=dietox)\n", | |
| "print(summary(m))" | |
| ], | |
| "execution_count": 6, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "text": [ | |
| "R[write to console]: Loading required package: Matrix\n", | |
| "\n", | |
| "R[write to console]: \n", | |
| "Attaching package: ‘lmerTest’\n", | |
| "\n", | |
| "\n", | |
| "R[write to console]: The following object is masked from ‘package:lme4’:\n", | |
| "\n", | |
| " lmer\n", | |
| "\n", | |
| "\n", | |
| "R[write to console]: The following object is masked from ‘package:stats’:\n", | |
| "\n", | |
| " step\n", | |
| "\n", | |
| "\n" | |
| ], | |
| "name": "stderr" | |
| }, | |
| { | |
| "output_type": "stream", | |
| "text": [ | |
| "Linear mixed model fit by REML. t-tests use Satterthwaite's method [\n", | |
| "lmerModLmerTest]\n", | |
| "Formula: \"Weight ~ Time + (1+Time|Pig)\"\n", | |
| " Data: dietox\n", | |
| "\n", | |
| "REML criterion at convergence: 4434.1\n", | |
| "\n", | |
| "Scaled residuals: \n", | |
| " Min 1Q Median 3Q Max \n", | |
| "-6.4286 -0.5529 -0.0416 0.4841 3.5624 \n", | |
| "\n", | |
| "Random effects:\n", | |
| " Groups Name Variance Std.Dev. Corr\n", | |
| " Pig (Intercept) 19.4929 4.415 \n", | |
| " Time 0.4161 0.645 0.10\n", | |
| " Residual 6.0375 2.457 \n", | |
| "Number of obs: 861, groups: Pig, 72\n", | |
| "\n", | |
| "Fixed effects:\n", | |
| " Estimate Std. Error df t value Pr(>|t|) \n", | |
| "(Intercept) 15.73865 0.55012 71.03978 28.61 <2e-16 ***\n", | |
| "Time 6.93901 0.07983 71.06517 86.93 <2e-16 ***\n", | |
| "---\n", | |
| "Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1\n", | |
| "\n", | |
| "Correlation of Fixed Effects:\n", | |
| " (Intr)\n", | |
| "Time 0.005 \n" | |
| ], | |
| "name": "stdout" | |
| } | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": { | |
| "id": "NRsNAdIsRNoA" | |
| }, | |
| "source": [ | |
| "## Doing more with Rpy2\n", | |
| "Exchange variables between Python and R using the `-i` and `-o` arguments. " | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "metadata": { | |
| "colab": { | |
| "base_uri": "https://localhost:8080/" | |
| }, | |
| "id": "Ie5VQRBaDtLS", | |
| "outputId": "dfdc3b6b-f541-446f-bfa3-41672939e768" | |
| }, | |
| "source": [ | |
| "%%R -i data -o betas\n", | |
| "# Load data from Python into R\n", | |
| "m<-lmer('Weight ~ Time + (1|Pig)', data=data)\n", | |
| "print(summary(m))\n", | |
| "betas <- fixef(m)" | |
| ], | |
| "execution_count": 7, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "text": [ | |
| "Linear mixed model fit by REML. t-tests use Satterthwaite's method [\n", | |
| "lmerModLmerTest]\n", | |
| "Formula: \"Weight ~ Time + (1|Pig)\"\n", | |
| " Data: data\n", | |
| "\n", | |
| "REML criterion at convergence: 4809.6\n", | |
| "\n", | |
| "Scaled residuals: \n", | |
| " Min 1Q Median 3Q Max \n", | |
| "-4.7118 -0.5696 -0.0943 0.4877 4.7732 \n", | |
| "\n", | |
| "Random effects:\n", | |
| " Groups Name Variance Std.Dev.\n", | |
| " Pig (Intercept) 40.39 6.356 \n", | |
| " Residual 11.37 3.371 \n", | |
| "Number of obs: 861, groups: Pig, 72\n", | |
| "\n", | |
| "Fixed effects:\n", | |
| " Estimate Std. Error df t value Pr(>|t|) \n", | |
| "(Intercept) 15.72352 0.78805 83.00293 19.95 <2e-16 ***\n", | |
| "Time 6.94251 0.03339 788.03850 207.94 <2e-16 ***\n", | |
| "---\n", | |
| "Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1\n", | |
| "\n", | |
| "Correlation of Fixed Effects:\n", | |
| " (Intr)\n", | |
| "Time -0.275\n" | |
| ], | |
| "name": "stdout" | |
| } | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "metadata": { | |
| "colab": { | |
| "base_uri": "https://localhost:8080/" | |
| }, | |
| "id": "hdh24jKyDxTa", | |
| "outputId": "5d3fbde7-db64-4c6d-d8d9-90d5ebb683f9" | |
| }, | |
| "source": [ | |
| "betas" | |
| ], | |
| "execution_count": 8, | |
| "outputs": [ | |
| { | |
| "output_type": "execute_result", | |
| "data": { | |
| "text/plain": [ | |
| "array([15.72352307, 6.94250501])" | |
| ] | |
| }, | |
| "metadata": { | |
| "tags": [] | |
| }, | |
| "execution_count": 8 | |
| } | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": { | |
| "id": "6XqbUP3_D02B" | |
| }, | |
| "source": [ | |
| "Specify variables as a factor, set contrats, or relevel categorical variables. " | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "metadata": { | |
| "colab": { | |
| "base_uri": "https://localhost:8080/" | |
| }, | |
| "id": "oopwgS0lHcoX", | |
| "outputId": "21babba1-d01a-4077-a31d-cbf1cbc096be" | |
| }, | |
| "source": [ | |
| "%%R -i data\n", | |
| "# Specify Evit as a factor and set a polynomial contrast.\n", | |
| "data$Evit <- as.factor(data$Evit)\n", | |
| "contrasts(data$Evit) <- contr.poly \n", | |
| "m<-lmer('Weight ~ Time * Evit + (1|Pig)', data=data)\n", | |
| "print(summary(m))" | |
| ], | |
| "execution_count": 9, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "text": [ | |
| "Linear mixed model fit by REML. t-tests use Satterthwaite's method [\n", | |
| "lmerModLmerTest]\n", | |
| "Formula: \"Weight ~ Time * Evit + (1|Pig)\"\n", | |
| " Data: data\n", | |
| "\n", | |
| "REML criterion at convergence: 4796.1\n", | |
| "\n", | |
| "Scaled residuals: \n", | |
| " Min 1Q Median 3Q Max \n", | |
| "-4.9037 -0.5661 -0.0972 0.4843 5.0245 \n", | |
| "\n", | |
| "Random effects:\n", | |
| " Groups Name Variance Std.Dev.\n", | |
| " Pig (Intercept) 39.73 6.304 \n", | |
| " Residual 11.21 3.347 \n", | |
| "Number of obs: 861, groups: Pig, 72\n", | |
| "\n", | |
| "Fixed effects:\n", | |
| " Estimate Std. Error df t value Pr(>|t|) \n", | |
| "(Intercept) 15.72208 0.78212 80.68619 20.102 < 2e-16 ***\n", | |
| "Time 6.94538 0.03316 786.03373 209.422 < 2e-16 ***\n", | |
| "Evit.L -0.02168 1.35495 80.65930 -0.016 0.98727 \n", | |
| "Evit.Q -1.04967 1.35440 80.71312 -0.775 0.44060 \n", | |
| "Time:Evit.L -0.12420 0.05732 786.01871 -2.167 0.03054 * \n", | |
| "Time:Evit.Q -0.16742 0.05757 786.04862 -2.908 0.00374 ** \n", | |
| "---\n", | |
| "Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1\n", | |
| "\n", | |
| "Correlation of Fixed Effects:\n", | |
| " (Intr) Time Evit.L Evit.Q Tm:E.L\n", | |
| "Time -0.275 \n", | |
| "Evit.L -0.034 0.009 \n", | |
| "Evit.Q 0.001 0.001 -0.024 \n", | |
| "Time:Evit.L 0.009 -0.030 -0.275 0.006 \n", | |
| "Time:Evit.Q 0.001 -0.006 0.006 -0.275 -0.021\n" | |
| ], | |
| "name": "stdout" | |
| } | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "metadata": { | |
| "colab": { | |
| "base_uri": "https://localhost:8080/" | |
| }, | |
| "id": "U30J8QKS6DiP", | |
| "outputId": "669d07c8-2b82-4487-af25-e966131476a6" | |
| }, | |
| "source": [ | |
| "%%R -i data\n", | |
| "data$Evit <- as.factor(data$Evit)\n", | |
| "m<-lmer('Weight ~ Time * relevel(Evit, ref=\"Evit100\") + (1|Pig)', data=data)\n", | |
| "print(summary(m))" | |
| ], | |
| "execution_count": 10, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "text": [ | |
| "Linear mixed model fit by REML. t-tests use Satterthwaite's method [\n", | |
| "lmerModLmerTest]\n", | |
| "Formula: \"Weight ~ Time * relevel(Evit, ref=\\\"Evit100\\\") + (1|Pig)\"\n", | |
| " Data: data\n", | |
| "\n", | |
| "REML criterion at convergence: 4793.9\n", | |
| "\n", | |
| "Scaled residuals: \n", | |
| " Min 1Q Median 3Q Max \n", | |
| "-4.9037 -0.5661 -0.0972 0.4843 5.0245 \n", | |
| "\n", | |
| "Random effects:\n", | |
| " Groups Name Variance Std.Dev.\n", | |
| " Pig (Intercept) 39.73 6.304 \n", | |
| " Residual 11.21 3.347 \n", | |
| "Number of obs: 861, groups: Pig, 72\n", | |
| "\n", | |
| "Fixed effects:\n", | |
| " Estimate Std. Error df\n", | |
| "(Intercept) 16.57914 1.35412 80.74008\n", | |
| "Time 7.08207 0.05770 786.06338\n", | |
| "relevel(Evit, ref = \"Evit100\")Evit000 -1.27025 1.93539 80.68667\n", | |
| "relevel(Evit, ref = \"Evit100\")Evit200 -1.30091 1.89561 80.71319\n", | |
| "Time:relevel(Evit, ref = \"Evit100\")Evit000 -0.11722 0.08207 786.03367\n", | |
| "Time:relevel(Evit, ref = \"Evit100\")Evit200 -0.29287 0.08057 786.04900\n", | |
| " t value Pr(>|t|) \n", | |
| "(Intercept) 12.243 < 2e-16 ***\n", | |
| "Time 122.749 < 2e-16 ***\n", | |
| "relevel(Evit, ref = \"Evit100\")Evit000 -0.656 0.513482 \n", | |
| "relevel(Evit, ref = \"Evit100\")Evit200 -0.686 0.494505 \n", | |
| "Time:relevel(Evit, ref = \"Evit100\")Evit000 -1.428 0.153611 \n", | |
| "Time:relevel(Evit, ref = \"Evit100\")Evit200 -3.635 0.000296 ***\n", | |
| "---\n", | |
| "Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1\n", | |
| "\n", | |
| "Correlation of Fixed Effects:\n", | |
| " (Intr) Time r(E,r=\"E100\")E0 r(E,r=\"E100\")E2 T:(E,r=\"E100\")E0\n", | |
| "Time -0.275 \n", | |
| "r(E,r=\"E100\")E0 -0.700 0.193 \n", | |
| "r(E,r=\"E100\")E2 -0.714 0.197 0.500 \n", | |
| "T:(E,r=\"E100\")E0 0.193 -0.703 -0.275 -0.138 \n", | |
| "T:(E,r=\"E100\")E2 0.197 -0.716 -0.138 -0.275 0.503 \n" | |
| ], | |
| "name": "stdout" | |
| } | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": { | |
| "id": "9OeKmckgM6C2" | |
| }, | |
| "source": [ | |
| "# 3. LMER in Pymer4" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "metadata": { | |
| "colab": { | |
| "base_uri": "https://localhost:8080/" | |
| }, | |
| "id": "1YChCCH_-Bi6", | |
| "outputId": "ebbc6b53-621f-4f4c-b884-7abf2e2fe1b2" | |
| }, | |
| "source": [ | |
| "\"\"\"pymer4 is down due to recent updates in rpy2. \n", | |
| "It's necessary to install via source until this issue is resolved. \n", | |
| "\"\"\"\n", | |
| "!git clone https://github.com/ejolly/pymer4.git\n", | |
| "!cd pymer4 && git pull origin dev && git checkout dev && pip install -q ." | |
| ], | |
| "execution_count": 11, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "text": [ | |
| "Cloning into 'pymer4'...\n", | |
| "remote: Enumerating objects: 127, done.\u001b[K\n", | |
| "remote: Counting objects: 100% (127/127), done.\u001b[K\n", | |
| "remote: Compressing objects: 100% (87/87), done.\u001b[K\n", | |
| "remote: Total 1712 (delta 45), reused 104 (delta 36), pack-reused 1585\u001b[K\n", | |
| "Receiving objects: 100% (1712/1712), 5.80 MiB | 13.55 MiB/s, done.\n", | |
| "Resolving deltas: 100% (962/962), done.\n", | |
| "From https://github.com/ejolly/pymer4\n", | |
| " * branch dev -> FETCH_HEAD\n", | |
| "Updating 7e98fa2..23d0282\n", | |
| "Fast-forward\n", | |
| " .travis.yml | 2 \u001b[32m+\u001b[m\u001b[31m-\u001b[m\n", | |
| " conda/meta.yaml | 2 \u001b[32m+\u001b[m\u001b[31m-\u001b[m\n", | |
| " docs/new.rst | 8 \u001b[32m++++++++\u001b[m\n", | |
| " pymer4/io.py | 4 \u001b[32m++\u001b[m\u001b[31m--\u001b[m\n", | |
| " pymer4/models/Lm.py | 11 \u001b[32m+++++++\u001b[m\u001b[31m----\u001b[m\n", | |
| " pymer4/models/Lm2.py | 2 \u001b[32m+\u001b[m\u001b[31m-\u001b[m\n", | |
| " pymer4/models/Lmer.py | 21 \u001b[32m++++++++++++++++\u001b[m\u001b[31m-----\u001b[m\n", | |
| " pymer4/simulate.py | 10 \u001b[32m+++++\u001b[m\u001b[31m-----\u001b[m\n", | |
| " pymer4/stats.py | 31 \u001b[32m++++++++++++++++\u001b[m\u001b[31m---------------\u001b[m\n", | |
| " pymer4/tests/test_models.py | 3 \u001b[32m++\u001b[m\u001b[31m-\u001b[m\n", | |
| " pymer4/utils.py | 11 \u001b[32m+++++\u001b[m\u001b[31m------\u001b[m\n", | |
| " pymer4/version.py | 2 \u001b[32m+\u001b[m\u001b[31m-\u001b[m\n", | |
| " requirements.txt | 2 \u001b[32m+\u001b[m\u001b[31m-\u001b[m\n", | |
| " 13 files changed, 66 insertions(+), 43 deletions(-)\n", | |
| "Branch 'dev' set up to track remote branch 'dev' from 'origin'.\n", | |
| "Switched to a new branch 'dev'\n", | |
| " Building wheel for pymer4 (setup.py) ... \u001b[?25l\u001b[?25hdone\n" | |
| ], | |
| "name": "stdout" | |
| } | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "metadata": { | |
| "colab": { | |
| "base_uri": "https://localhost:8080/", | |
| "height": 1000 | |
| }, | |
| "id": "fhRZW1UX6DbT", | |
| "outputId": "38f3b0f1-700f-4932-e06e-2153666c279c" | |
| }, | |
| "source": [ | |
| "# Install pymer4\n", | |
| "!pip install -q pymer4\n", | |
| "# load pymer4\n", | |
| "from pymer4.models import Lmer\n", | |
| "model = Lmer('Weight ~ Time + Evit + (1 + Time|Pig)', data=data)\n", | |
| "display(model.fit())\n", | |
| "# ANOVA results from fitted model\n", | |
| "display(model.anova())\n", | |
| "# Plot estimated model coefficients \n", | |
| "model.plot_summary()" | |
| ], | |
| "execution_count": 12, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "text": [ | |
| "Formula: Weight~Time+Evit+(1+Time|Pig)\n", | |
| "\n", | |
| "Family: gaussian\t Inference: parametric\n", | |
| "\n", | |
| "Number of observations: 861\t Groups: {'Pig': 72.0}\n", | |
| "\n", | |
| "Log-likelihood: -2214.080 \t AIC: 4428.160\n", | |
| "\n", | |
| "Random effects:\n", | |
| "\n", | |
| " Name Var Std\n", | |
| "Pig (Intercept) 19.701 4.439\n", | |
| "Pig Time 0.416 0.645\n", | |
| "Residual 6.037 2.457\n", | |
| "\n", | |
| " IV1 IV2 Corr\n", | |
| "Pig (Intercept) Time 0.081\n", | |
| "\n", | |
| "Fixed effects:\n", | |
| "\n" | |
| ], | |
| "name": "stdout" | |
| }, | |
| { | |
| "output_type": "display_data", | |
| "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>Estimate</th>\n", | |
| " <th>2.5_ci</th>\n", | |
| " <th>97.5_ci</th>\n", | |
| " <th>SE</th>\n", | |
| " <th>DF</th>\n", | |
| " <th>T-stat</th>\n", | |
| " <th>P-val</th>\n", | |
| " <th>Sig</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>(Intercept)</th>\n", | |
| " <td>15.311</td>\n", | |
| " <td>13.395</td>\n", | |
| " <td>17.227</td>\n", | |
| " <td>0.978</td>\n", | |
| " <td>68.986</td>\n", | |
| " <td>15.661</td>\n", | |
| " <td>0.000</td>\n", | |
| " <td>***</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>Time</th>\n", | |
| " <td>6.939</td>\n", | |
| " <td>6.782</td>\n", | |
| " <td>7.095</td>\n", | |
| " <td>0.080</td>\n", | |
| " <td>71.060</td>\n", | |
| " <td>86.917</td>\n", | |
| " <td>0.000</td>\n", | |
| " <td>***</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>EvitEvit100</th>\n", | |
| " <td>1.340</td>\n", | |
| " <td>-1.342</td>\n", | |
| " <td>4.022</td>\n", | |
| " <td>1.368</td>\n", | |
| " <td>69.037</td>\n", | |
| " <td>0.979</td>\n", | |
| " <td>0.331</td>\n", | |
| " <td></td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>EvitEvit200</th>\n", | |
| " <td>-0.055</td>\n", | |
| " <td>-2.710</td>\n", | |
| " <td>2.601</td>\n", | |
| " <td>1.355</td>\n", | |
| " <td>69.008</td>\n", | |
| " <td>-0.040</td>\n", | |
| " <td>0.968</td>\n", | |
| " <td></td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " Estimate 2.5_ci 97.5_ci SE DF T-stat P-val Sig\n", | |
| "(Intercept) 15.311 13.395 17.227 0.978 68.986 15.661 0.000 ***\n", | |
| "Time 6.939 6.782 7.095 0.080 71.060 86.917 0.000 ***\n", | |
| "EvitEvit100 1.340 -1.342 4.022 1.368 69.037 0.979 0.331 \n", | |
| "EvitEvit200 -0.055 -2.710 2.601 1.355 69.008 -0.040 0.968 " | |
| ] | |
| }, | |
| "metadata": { | |
| "tags": [] | |
| } | |
| }, | |
| { | |
| "output_type": "stream", | |
| "text": [ | |
| "SS Type III Analysis of Variance Table with Satterthwaite approximated degrees of freedom:\n", | |
| "(NOTE: Using original model contrasts, orthogonality not guaranteed)\n" | |
| ], | |
| "name": "stdout" | |
| }, | |
| { | |
| "output_type": "display_data", | |
| "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>SS</th>\n", | |
| " <th>MS</th>\n", | |
| " <th>NumDF</th>\n", | |
| " <th>DenomDF</th>\n", | |
| " <th>F-stat</th>\n", | |
| " <th>P-val</th>\n", | |
| " <th>Sig</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>0</th>\n", | |
| " <td>45609.788242</td>\n", | |
| " <td>45609.788242</td>\n", | |
| " <td>1</td>\n", | |
| " <td>71.059997</td>\n", | |
| " <td>7554.585993</td>\n", | |
| " <td>6.722544e-74</td>\n", | |
| " <td>***</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>1</th>\n", | |
| " <td>8.232615</td>\n", | |
| " <td>4.116307</td>\n", | |
| " <td>2</td>\n", | |
| " <td>69.037094</td>\n", | |
| " <td>0.681805</td>\n", | |
| " <td>5.090753e-01</td>\n", | |
| " <td></td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " SS MS NumDF DenomDF F-stat P-val Sig\n", | |
| "0 45609.788242 45609.788242 1 71.059997 7554.585993 6.722544e-74 ***\n", | |
| "1 8.232615 4.116307 2 69.037094 0.681805 5.090753e-01 " | |
| ] | |
| }, | |
| "metadata": { | |
| "tags": [] | |
| } | |
| }, | |
| { | |
| "output_type": "execute_result", | |
| "data": { | |
| "text/plain": [ | |
| "<matplotlib.axes._subplots.AxesSubplot at 0x7faebd04de10>" | |
| ] | |
| }, | |
| "metadata": { | |
| "tags": [] | |
| }, | |
| "execution_count": 12 | |
| }, | |
| { | |
| "output_type": "display_data", | |
| "data": { | |
| "image/png": "iVBORw0KGgoAAAANSUhEUgAAAusAAAFzCAYAAACHJEeOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzdeXBc533u+efXC3aA2EEA3GmSEkkt1ELLiqXIlh3bsWXl+sbyjTOmVZm6ui7HySRlJ5FvuWqcSSX2OJ7kjq8yc62bm6JVIzuXiaXIYmx6UWzJJiVZG8VF3MAVJLEQ+9JAr+/8ge5j7AQBNs9p8fupQgF9uvuct89BA895+31/x5xzAgAAABA8Ib8bAAAAAGB2hHUAAAAgoAjrAAAAQEAR1gEAAICAIqwDAAAAAUVYBwAAAAIq4ncDAo66lgAAAMg3m+sOetYBAACAgCKsAwAAAAFFWAcAAAACirAOAAAABBRhHQAAAAgowjoAAAAQUIR1AAAAIKAI6wAAAEBAEdYBAACAgCKsAwAAAAFFWAcAAAACirAOAAAABBRhHQAAAAgowroPdu7cqZ07d/rdDAAAAAQcYR0AAAAIKMI6AAAAEFCEdQAAACCgCOsAAABAQEX8bsD1aMuWLX43AQAAAAXAnHN+tyHI2DkAAADIN5vrDobB+CCZTCqZTPrdDAAAAAQcYd0HTz75pJ588km/mwEAAICAI6wDAAAAAUVYBwAAAAKKsA4AAAAEFGEdAAAACCjqrPvg1ltv9bsJAAAAKADUWZ8fOwcAAAD5Rp31IInFYorFYn43AwAAAAFHWPfBrl27tGvXLr+bAQAAgIAjrAMAAAABRVgHAAAAAoqwDgAAAAQUYR0AAAAIKOqs++COO+7wuwkAAAAoANRZnx87BwAAAPlGnfUgGRwc1ODgoN/NAAAAQMAR1n3w9NNP6+mnn/a7GQAAAAg4wjoAAAAQUIR1AAAAIKAI6wAAAEBAEdYBAACAgKLOug/e9a53+d0EAAAAFADqrM+PnQMAAIB8o856kPT09Kinp8fvZgAAACDgCOs+2L17t3bv3u13MwAAABBwhHUAAAAgoAjrAAAAQEAR1gEAAICAIqwDAAAAAUWddR/ce++9fjcBAAAABYA66/Nj5wAAACDfqLMeJJ2dners7PS7GQAAAAg4wroP9uzZoz179vjdDAAAAAQcYR0AAAAIKMI6AAAAEFCEdQAAACCgCOsAAABAQFG6cX552Tnt7e2SpJUrV+Zj9QAAACgsc5ZuJKzPj50DAACAfKPOepC0t7d7vesAAADAXAjrPnjuuef03HPP+d0MAAAABBxhHQAAAAgowjoAIJDS6bTS6bTfzXhbS6VS7GMg4CJ+NwAA3q6cc+rp6VF/f79KSkrU3NysaDSat+1lMhmdOXNG3d3dCoVCamlp0YoVK7z7U6mU+vr6FA6HVVtbK7OJ+Uzd3d06e/as4vG4amtrtX79ehUXF+etnZeTyWR0/PhxdXV1SZLq6+u1adMmRSKz/8saGxvTyMiIKioqVFpampc2jY+P68SJE96xXL16tZqamvKyrYXKZDIKhRbX55ZIJHT06FH19fXJzNTU1KSNGzcuen0A8oewDgB5cuzYMXV2dnq3L1y4oNtvv11FRUV52d6JEyfU0dHh3W5ra5OZqbW1Vf39/Tp06JDXi1pWVqZbbrlFsVhMb731lvec7u5uxWIx3XHHHUqn0+rt7dXo6Kj6+/s1PDysoqIirV69Wi0tLZImTkg6OzvV29uraDSq1tZWVVRULOl1nDp1asp+u3TpksxMmzdvnvHYkydPTpmwv2LFCr3jHe9Y0vYzmYyGhoYUDodVWVkp55wOHDigWCwmSYrFYjpy5IiKi4tVXV29pG0txujoqI4fP67BwUEVFxdrzZo1am5uvqJ1HDt2TH19fZJ+dQyLioq0bt26fDT5qnHO6dKlS+rt7VVxcbFaWlpUUlLid7OAvCKs++CDH/yg300AkGejo6M6deqUxsbGFIlEVFFRoXg8rgsXLmjt2rVXfXvpdFqdnZ3KZDIaGRlRIpFQUVGRzp8/r5aWFh07dmzKcIdYLKYzZ84ok8nMWNfIyIi6u7t18uRJjY+P6+LFi0qlUmpsbJRzTsePH1dxcbHq6up04sQJXbx40XtuV1eXtm3bpsrKykW/lu7u7hnLLl26NKMneXBwcEZlrfPnz6uhoUHLli3zljnn5JxbUK/x8PCwDh06pHg8LkmqqqrSypUrvaA+WWdnpyorK9XW1jbl04w1a9Z4n1pcbZlMRgcOHPDaF4/HdezYMZWUlKimpmZB68idhE3X3d0d+LDe1tamCxcueLcvXryo2267TWVlZT62CsgvwroPli9f7ncTEADpdFrnz5/XwMCASktLtXLlyrx9hI9r78iRI1NC59DQkFpaWmYNfVeDc06ZTEadnZ1KJBLe8kQioZtvvlnj4+MznjMwMDBnL/i5c+cUj8cVj8eVTCYlSb29vWptbZWZqaurS5WVlVN68qWJMNne3j5rL/hCzRaqQ6HQjAA8MDAgaeK1HzlyRLt27dJLL72kRCKh0tJSffjDH9anPvUp1dTUKJVKqaamRk1NTRodHVU0GtXy5ctnfMpx7NgxLwhLE8dtrlK7uROX3HCddDqts2fPKhQKafXq1Yt+/fMZGBiY0r6crq6uBYd1M1MoFJpxohYOh69KG/MlHo9POTGUJoZ2nT9/Xhs3brymbclkMhoYGFA0Gl3SiSmwEIR1H5w6dUqSAt+Dgfw6ePCgFzb6+/vV3d2tO+64g490r5FLly6pq6tLZqbly5errq5u3sen02lduHBBg4ODKi0t1YoVK+Y8VmNjYxocHJSZKXfhuXQ6raGhIW3atOmqvxZJikQiikajU4K6NBHAhoaGFIlElEqlptxXVlam5cuX69KlS1OWl5aWegF9ckBOpVLKZDJeqEskEprtwnqzhckr0dLS4v2dzGlubp4R1ktLS5VKpfSVr3xF+/btUzwe99oTi8X03e9+V88++6zuvvtuffGLX9Tp06d16NAhtbS0yMzU3t6ubdu2qaysTM45dXR06MKFCyouLp5ybHPhf2xsbMr2GxoadPjw4Rnt7+zszFtYn+vTgfl68oeHhzU8PKyysjIlk0llMhk1NDR4Jxk5uaFNQTU+Pj7r79v045JvAwMDOnz4sPceWbZsmW666aY551RcrxKJhEKhEPvlKljUHjSzUkl7JP2epGecc1sv8/j/7Jz7q8Vsa6nMbI2ku51z387evknS551zD/vRHkl64YUXJBHWr2eDg4NeUM9JpVLq6OjIyxAJTHXhwgWdOHHCu33p0iXdcMMNXq9wMplUfX291q9f700IPXDggAYHB73n5E6uZht/HovFFA6HVVNT440LlqSioqIrHlt8JZYvX66LFy8qFovJzFRRUaHq6mrF43GtWbNGbW1t3mNzvb9VVVXasGGDzp49q0Qioerqam3cuFFtbW2Kx+MqKipSNBpVMplUOBz2wuLy5ctVXl6u4uLiGeF8oT28c1m5cqXMTB0dHcpkMmpqapo1/NbV1enrX/+69u7dO+sJQiaT0fj4uPbu3au/+qu/0o4dOyRNhIji4mIlk0m1t7drw4YNevPNNzUwMKDBwUFlMhlVVlZ6J3AlJSXauHHjjAmmS32di7Fs2TKVlZXN+IRmrt+r48eP6+LFi0omk+rq6lJxcbHq6+sVDodVX1+v0dFRhcNhtbS0zBvWk8mkzp07p8HBQZWVlWnVqlVLGnqSTCY1NDSksrKyBX+iWFFRMetJ57WcN+Cc09GjR72gLk38PT979qzWr19/zdoRZOPj4zpy5IjXYcHk5aVb7OnO70l6StJC6z39Z0lXFNbNLOycuxr1pNZI+qSkb0uSc+6gma0ws1XOuXNXYf3AFZve+5mz1B5JLMzZs2dnLDt8+PCUYQCdnZ2Kx+O65ZZbvBA3WSKRUEdHx6whsrKyUmamqqoqlZWVaXx8XJFIRFu2bMnrUIO6ujo1NjYqk8nIzLze1urqalVVVamiokKXLl1SOBxWc3OzF5JaW1vV0tIyZVz32rVrNTg4qHQ6raamJvX19am8vFxlZWVavXq1amtrJUk33HCDDh8+rMHBQSWTSTU2Nk6pQDOZc06JRELpdFqlpaVz9gbnwnJDQ8O8nzS9+uqr+vnPf37Z9008Hte+ffv07ne/W+vWrfO2G4/HvfHmg4ODqqioUFVVlQYGBjQ8PKzKykoVFxd7wfSWW26Rc25KuxsbG2f0UOdzqKOZ6eabb1ZbW5sGBgZUUlKiNWvWqKqqasrjcp8UnDlzRkVFRerv71cqlVIqlfKOYywW0zvf+c4p+yIWi6myslIrV670ekQzmYzeeOMN7wRhaGhIPT09uvPOOxdVNejixYtqa2vzhuE0Nzdr48aNlx3nHw6HtWnTJh05csR7bnV19Zy/b9JEJ0h3d7d3Al5eXn7F7Z1sfHx81iFl/f39S1rv20kuqEu/mryc+z3F4iw2rP+uJgKwx8welvRRSWWS1kt62jn3p2b2VUmlZrZf0mHn3O+a2f8i6Q8lFUl6WdJnnXNpMxuR9E1J75P0+2a2TtIXJDlJB5xznzKzBkn/TdKq7Kb/yDm318y+nN3uOyTVS/qac+6/S/qqpBuz2/+Wc+5vJT0r6T9I+toiXz+wJNXV1bOOGc0FIORPLjBO19vbq8bGxinL+vv7NT4+PmcYnO2ftjTRg75+/Xq1tbV5k0uXLVuW92EGNTU1am1tnTIBb+XKlV6Qq66unrMXcnK4lyZOOG666SYdOnRIiURCn/jEJ/La9nyLx+P6i7/4C7+bMcNswzoup6SkRFu3zv2B9vj4uA4ePKiLFy+qv79fRUVFU3qC4/G4F9Zzy19//XXv97yvr0+9vb3atm2bTp48qdOnT6uzs1Pl5eWqra1VKBRSKpVa1HCfeDyuEydOTHndHR0dqq2tVUNDw2Wf39DQoOrqag0MDKi4uHjGScr0/fD666977/fTp09r48aNS3ofRqPRWf92+1nqNEgSicSMjg1p4tNLwvriXXFYN7MiSeucc2eyQ0wmu1XSNklxScfM7L865x41s885527NPv9GSZ+Q9GvOuaSZ/T+aCP9PSCqX9LJz7vNmtkXSlzQxhKXHzHIp5v+W9LfOuV+Y2SpJP5R0Y/a+myXdlV3PG2b2r5IelfQF59xHJrXz1exywjp8EY1GdcMNN3gVOsxMLS0tC/pnhaUxM9XW1k4ZniJpzh4355yqq6tlZkqn00qlUopEIgqFQvOeXK1YsUJ1dXVe72duHfninNPZs2e9cFZVVaV169ZNGaowMDCg9vZ2JRIJ1dbWatWqVXP29MfjcR0+fFipVCpvpSbxK7nwejV+R44fP+5NopUmAlQymfRu574XFRUpEonowoULM05IR0ZG9Oabb2poaEjJZFLOOY2MjEiaqHufW++V6u/vn/UEpb+/3/v7l0wmFYlE5twX0Wh0QX8rc0O7Jjt16pSampoW/QlXJBLRihUrdO7crz6YD4VCWrVq1TzPun7kJoJPP8ZBn7wcdIvpWa+XNDDHfc855wYlyczekrRa0vRp9PdLul3SK9k3YqmkXMmEtKTvZn9+r6R/cs71SJJzLvef9X2SNk96E1eZWa6cwTPOuTFJY2b2U0nb52hrt6RZT63N7BFJj0jSN7/5TT3yyCNzvFRgpiu5OEtjY6Pq6uo0PDys0tLSwPXMxONxnT17VsPDwyovL9fq1asLolpNLBZTT0+P9w99tslNGzZs0KFDhzQ6OippYizs2rVrdfr06SmPq6qq8l5zbW2t9u/fr3Q6rVAopA0bNnihZS6lpaXXbJ9NL2nX09OjmpoaL6wPDQ3pzTff9P6JDg8Pa2RkRDfddNOs6+vo6JjSG4v8yGQyOnnypDo7O+WcU2NjozZs2HDZcDM+Pi4zm/F3wznnnYiWlpaqpKRE4+PjXogqKiryTkzXrl0rM5vzk6Ourq4Zv8Ojo6Oqq6uTmV329382cw1rKikp0dDQkI4dO+adaKxZs0atra1XvI2c3MnFZKlUSuPj40saDrNu3TpVVFSop6dHkUhELS0tS762wNtFJBLR8uXLZ1SJWspxDJLcJyrXevz9YsL6mKS5BhFOfsen51i/aWI4yhdnuW98AePUQ5Lucs5N+fw5G96nn67P9fliiSZexwzOucclPX6Z5y/JRz7ykcs/CAVn+sVZVq1addlJxOFw2JeLqsxmeHhYJ0+e9CZ9DQ8Pez1bw8PD6u3t1fbt2/N6Bc6l6ujo0LFjx7zbZ86c0bZt27zAkslkvAltd9xxh0ZGRryJmDnnz59XMplUXV2dVw5ubGzMK1sYj8cVjUYVj8c1OjoaiH/SmUxmxj9HaWIibe6f5Pnz52f0dvX29ioWi806UXAxvaa4cmfOnJlykpW7GNQNN9ww47HOOZ05c0YHDhzQ+Pi4KisrtWLFCt14443e+zIXyBOJhDe5b3R0VGamLVu2KJ1OeycFuSEktbW1s5anLC8v96r/NDQ0qLe315vXsNgJtsuWLfOGseQUFxeroaFBr7/+uneCmEwmdeLECZWVlS16Im9FRYWGh4enLItEIlel4lZjY+OMYXNBMDw8rHPnzmlsbEzV1dVavXr1Nf+bvWHDBhUXF3vzY1pbW32/2u9SpdNpHT9+3CvH29jYqI0bN16zTwyuOKw75/rNLGxmV/LbnjSzqHMuKek5Sc+Y2d8657qzw1sqnXPTZ3z9m6SnzexvnHO9Zlab7V3/kaQ/kPTXkmRmtzrn9mef86CZfUUTw2Du08RQl2ZJ04ugbpR06Araf1UtpjcCwTbbxVnOnTun+vr6ecdUBkUqldKbb77pVVno6upST0+PWlpavD/0yWRSnZ2dWrlypZ9NnVM6ndbJkyenLIvH4zp16tSUi8BUVlZqy5YtKikpmVEfefXq1d7H2ZM/gu/p6ZE00ZsyuZexp6fnisL68PCwhoaGVF5eflVP0nI11qebfBGk6RU0Lre8rq5O58+fV19fn0ZHR/XEE0+osrJSH/rQh6b05uYu0jO51z43VCi3DxOJhGKx2JSThcbGRq1Zs2bGSUGuFGKu5zMUCqm1tVX333+/pIn32htvvCFJ+vKXv6wXXnhhQeO+zUy/+Zu/qd27d0uamOT4wgsvePMOcv90Z5vUun379nkrn6TTab300kszPolYtWqV3njjDS8sV1dX6z3veY+Kioq8CcynTp1SOBz2yhKWlJSoq6tLmzZtmjEM5NSpU3rttde8iZ5jY2NyzqmoqGhKuF+1apVX+Sd3MnrDDTfMOfG1pqZGq1ev1rlz57wwvn79eiWTSZ05c0aSvEmpdXV12rx586LL8fX39yuZTGpkZEShUEhr1qzR+vXrNTw8POsnOd3d3YsO66tXr1ZfX9+UTw7Wr1//th2SEYvF9MYbb3h/C0ZGRjQ4OKjbbrstr0Pwpssd17fTGPW2trYpE8m7uroUDoevWX3/xU4w/ZGkd0tqu9wDsx6XdMDMXs9OMP2SpB+ZWUhSUtLvS5oS1p1zh83sLyU9b2ZpSW9IelgTE1P/zswOZNv/gqTPZJ92QNJPNTFU5y+ccxfN7JKktJm9KWlndoLpeyT96yJf+5Llev7yVW8Z1970Mow5/f39BRHWe3p6poS2XO/b6OjolFA5V7ALgvHx8Vnbd+bMmSlBa3h4WEePHtWtt94663pm+6c2V8/UlfRYnThxYkoPal1dnbZu3XpV/omGw2HV1dXNuCrl5J6/+vr6GeP0i4uL57ygS26oQ24ogXNOkUhEXV1dU8bnhkIh3XLLLerp6dHo6KiKi4vV1dXlhb6ioiI557yhXrFYTKWlpbr99tvV1NSk/fv3T9ludXW1UqmUSkpKFIlEVFVVNSWsTf6H+dBDD+nll1+ec6LvZEVFRfrMZz7j3V6+fLluvPFGdXV1KZPJqLi4WGNjY7P2ul7uGPX19c0Ims457d27d8oJU29vr1566SWVlZV5JykXL170Pq2RJvbnbKE6k8nowoULM0o25iqzTLZixQrvOEgT1VYudx2BtWvXqrW1VbFYTOXl5YpGo17lm4sXL8o5p6amJq1du3bRQwBGR0d18OBBOee8k9yBgQFFIpE5A/RShhuUlJRo+/bt6u7uViqVUl1d3dv6SqcXL16ccdKe6yCYfEVfXLnZrqrc1dUV+LD+d5L+2Dn3KUlbJck5t1PSztwDJk/odM79maQ/m3T7f0r6n9NX6pyrmHb7W5K+NW1ZjyYmqM7mgHNux7THJzUx/l2SZGbFku6Q9EfzvL68evHFFyUR1t9O5vpYtRDGeEszK1KUlZXNCHaSLvsP30+5cDc9sM/WWzcwMOD1/i5EQ0ODzpw5MyUUFhUVLfhj8OHh4SlBXZoIbpcuXbpqH6Vv2rRJR48eVV9fnzf8YXLN/ubmZo2MjKijo8MLzzfeeOOcQTQ3Nn/lypVKpVJeFYyOjo4Zk+nMTJs2bfI+2SgqKlI8HvdKV3Z1dSkajaq1tVVFRUW6+eabvbBWVVWloaEhb111dXVeyJcmTkQm16+eHN5uvPFG3X333XPWWc8pLi7WPffcow984ANT1nPzzTert7dXo6OjqqqqUjwe19GjR6c8d9myZZd9H8+2D9PptEZGRmY8d3o97txJcVVVlVdlZLYhSOl02jsmkwNZOp2e9aSxoaHhiiesFxUVTZlMbGZavXr1VbvAU+4kbrJEIqG+vj7V19fPqB9vZku+LkGuTOn1YK7OFOaeLN1s7/FrOW59UWHdOfe6mf30KtZCv5ZWSXrUORfcLkIUnIaGBrW3t0+Z0FRRUVEwQ57q6+t18uRJ7499JBJRY2OjFzTC4bDWrl0b6E8JwuGw1q1bp+PHj3vLcoF6epCbfHGfha5727Zt3oTbiooKrVq1asE965PD6GTDw8NXLaznQnAymZSZzTgRMTNt3LhRa9euVTKZnLfO+WThcHhBwwZWrlypaDSqzs5OFRUVaWBgwOvFXLFihVauXKlly5Z5pf9ytm7dqtOnT6u3t1fFxcXasmWLli1b5l1VtaGhYUqAbG5u1oULF7xe3y9+8Yv62te+pn379mlsbGxKkM2F/ve97336zne+M+N45SZJTn6fptNpr2JOfX293vGOd1z2tdfW1s64OFQ4HPaujDp9m5OFw2GVlJTIzBQOh1VeXq7y8nLvwk050WhU1dXVMy6oVlZWFtihadPNNVwpdyxvueUWnTp1akr9+CDMCSkU9fX13pyHnCDNiypkLS0tUyoA5ZZdK7aYGq/XkbzsnJ07d0qSHn744XysHj7JXYE0dzGV5ubmgrrM8tDQkNra2rwx1evWrVNNTY03NKBQxnmOjo561WAaGxvV29urI0eOTHnMQib/Xk0DAwMzhntIE73hQe71e+utt2Z8/Lt27doF9bTG43F1d3fLOaeGhoar+ilTf3+/zpw5402iW7t2rQ4ePKivf/3r+v73v6+xsTGVlpbqwx/+sL7whS/ozjvvvGrbnkssFtPJkye9k5Q1a9boxIkTU3rqc2N5J59QdHV1aXx8XCtXrvROYiKRiO6+++4ZJ5RjY2M6ePCgurq6NDIyosrKSt12223XNDQsxcjIiF599dUpyyKRiO66666C+lsZZKdPn1Z7e7s3tGvTpk1cv+MqcM7p3Llz6ujokJlp+fLlWrVq1dWeCzDnygjr8yOsA28Dly5d8sZzNjY2qqWl5ZpOuJKkQ4cOTRlbXFlZqW3btgX6EtypVEonT55Ud3e3QqGQWlpatGbNmmu+7wpVOp3W4cOHdfbsWa/cZ+7EIvdpSzwe964qmrN+/fp5e8tHR0e9HvlC093drVOnTnnVbDZs2BDoT+wKUSqV8i58xXu1oBDWF4mwDuCqcM6pp6fH++SisbEx0EEd+eOcU39/vxKJhGpqarxP5dLptBoaGq6LntBMJsPvPzAVYX2R8rJzcpfiZXY2AAAARFhfNHYOAAAA8m3OsM5nUD44dOiQDh3y7ZpMAAAAKBBMv/ZBbjb81q1bfW4JAAAAgoyedQAAACCgCOsAAABAQBHWAQAAgIAirAMAAAABRenG+eVl58RiMUlSWVlZPlYPAACAwkKd9UVi5wAAACDfqLMeJPv379f+/fv9bgYAAAACjrDuA8I6AAAAFoKwDgAAAAQUYR0AAAAIKMI6AAAAEFCEdQAAACCgKN04v7zsnGQyKUmKRqP5WD0AAAAKC3XWF4mdAwAAgHyjznqQvPLKK3rllVf8bgYAAAACjrDug8OHD+vw4cN+NwMAAAABR1gHAAAAAoqwDgAAAAQUYR0AAAAIKMI6AAAAEFCUbpwfOwcAAAD5RulGAAAAoNAQ1n2wb98+7du3z+9mAAAAIOAI6z44fvy4jh8/7nczAAAAEHCEdQAAACCgCOsAAABAQBHWAQAAgICK+N2A61E0GvW7CQAAACgA1FmfHzsHAAAA+UaddQAAAKDQENZ98Pzzz+v555/3uxkAAAAIOMK6D06fPq3Tp0/73QwAAAAEHGEdAAAACCjCOgAAABBQhHUAAAAgoKiz7oOysjK/mwAAAIACQJ31+bFzAAAAkG9z1lmnZx1YpOHhYfX29qqoqEiNjY2KRJb+dkqlUrpw4YJGRkZUWVmplpaWBa13cHBQvb29Ki4uVlNT01Vpy2TOOV28eFF9fX0qLi5Wa2urysvLr+o2AADATPSszy8vO+cnP/mJJOl973tfPlaPa+DcuXM6deqUd7ukpETbtm1TcXHxoteZyWT02muvaXR01FtWUVGh2267TaHQzOklyWRSZ8+eVVtbmwYHB7Vs2TIVFxcrmUyqqalJFRUVam1tVSgU0sWLFxWLxRSPx+WcU3l5uVauXOkNyRobG1NHR4dCoZBWrlypcDg8ZVtvvfWWuru7vdvhcFi33XYbgR0AgKuDnvUgOX/+vN9NwBIkk0mdOXNmyrLx8XG1t7frHe94x5zPO3/+vM6dO6dkMqm6ujpt2LBhSri/dOnSlKAuSSMjI+rp6VFjY6MkKR6PKxwOKxKJ6ODBg+rv71dnZ6fXhuLiYo2Pj3s986+//rrGx8cViUQUi8WUTqdVW1ur+vp6Xbp0SXfccchARzQAAB8VSURBVId6e3u1d+9exWIxSRNzKt7//verpqZG0kSQnxzUJSmdTuvChQvauHGjt6ynp0fd3d0KhUJqbm7WsmXLrnDPAgCA6QjrwBWKxWLKZDJyzml4eFjj4+OKRqPz9jJ3dXWpra3Nu93T06NEIqHbbrvNWzY+Pj7rc8fHxzU+Pq633npLQ0NDMjNVVlZqcHBQyWTSe1wqlVIsFlNpaalisZheeeUV/eAHP9Bbb72lZDKpaDSqTZs26b777tN73vMeVVVV6Re/+IVOnTrlBf3i4mLFYjH9/Oc/17333qvOzk5dvHhRXV1dWrZs2ZTJ0ZPb297erpMnT055vVu3blVdXd2V7VwAADAFYR24QuXl5d7QksmBNRKJKJFIqKioaMZzcr3fkw0NDSkWi3kBuLq6etbtVVdXe0Fdmhg/3tXVpXg8rqqqKpmZnHPKZDLKZDKKx+N67LHHdPDgQSWTSeWGuiWTSR0+fFjHjh3Tz3/+c/3e7/2eysvLNTY2pkwmo9HRUZmZ4vG4hoeH9eyzzyoSiaiurk7j4+MaGhpSQ0ODqqurFQqFVFtb67Xn3LlzU9rsnNPZs2cJ6wAALBFhHbhCkUhEjY2NU8asRyIRlZWVqaOjQ6tXr17UepctW6ZVq1Z5wTedTiscDuvVV19VR0eHysrKvLHrY2Nj6u/vVyKRUGVlpYaGhrxJpY8//rgOHDgwpdc9xznnhfa///u/10MPPaR0Oq1QKKRwOKxYLCYzUygUkpmpvLxcnZ2dGhsb0+DgoPr6+lReXq7bb79dLS0tXjtn29ZcnxQAAICFC3RYN7M6Sc9lby6XlJZ0SdI7JD3hnPusX21biqqqKr+bgCWqqalRS0uLxsbGFA6HVV5eLjObM6A2Nzerv79/yrLpw0okad26dWppadHw8LAOHz6sjo4OjY+Pq7e3V5JUWVmpsbExmZkSiYQGBgbknFNdXZ22bNmic+fOzRnUJ0ulUjp69KjOnj2rFStWeL3yOaFQSAMDA0okEl7Ad84pFAoplUrpxIkTam5uVl1dnZYtW6bKykoNDw9P2Uau5x0AACxeoMO6c65X0q2SZGZfljTinPu6r426Cj72sY/53QQsUXV1tYqLi2cMeclNypyusbFRyWRS7e3tSiQS3gTT2ZSUlHgTVtPptFKplJxzSqfTGh4elpkpFovJOSczk5lpeHhYp0+f1mOPPXbZoJ6TSqX04osv6uMf//is9zvnND4+LuecJleNSiaT6u7u1v79+1VbW6uGhgZt3LhRhw4dUjwelzRRxWbdunULagcAAJhboMP6XMzsPklfcM59JBvi10paJ2mVpD+WdJekD0m6IOkB51zSzG6X9DeSKiT1SHrYOdfhQ/PxNlBcXKwNGzaora3N65Fuamqac9y5JLW2tqq1tXVB6x8aGlI6nZY0McwkEonIzJRKpWb0gktSIpHQhQsXtH//fi20HKtzTsePH5+yzOxXlaNCodCUoJ4bGpObrJprw6VLl9TU1KS77rpLg4ODCoVCfHoEAMBVMrN4c2FaL+m9kj4q6f+T9FPn3E2SxiR92Myikv6rpN92zt0u6R8k/eVsKzKzR8zsVTN79fHHH89LY/fs2aM9e/bkZd24dlpaWvSud71LN910k5qamtTT06N9+/bp9ddf98ogXqmuri699tpramtr84aghMNhbxx5SUnJrDXXcwE+kUhc0fZSqdSU25PDuZmpqqrKu8hSLrxLE2P0JwfywcFBmZmqq6sJ6gAAXEUF2bM+ix9ke88PSgpLyiXhg5LWSNokaaukH2d7DsOSZu1Vd849LimX0vNyUaTZKoOgMEWjUSWTSXV1dXnLhoaGdPDgQW3fvn1KT/Xl9PT06MiRI5ImgnJuOEw0GlVRUZEymYxKSkq8MeS5nu3cUJhIJOK1Z6Emh/DJPfLOOUUiEW3YsEHRaFThcFiDg4Nez35TU9OUIUBcHAkAgPx4u4T1uCQ55zJmlnS/Sh0ZTbxGk3TYOfcuvxqIt6/pFwySJqq15C5MtFAXLlzwfjYztbS0qL+/X/X19UokEt7Fjmpra9XT06PBwUElEglFIhHv6qWbN2/WgQMHFjQUxsy0efNmlZaWTrkYk5mpqKhIzc3N2rRpkzo7O7V27VrF43Gl02nFYrEpk0crKyu9izYBAICr6+0S1i/nmKQGM3uXc+7F7LCYjc65w343DIUvHA5f0fK5TB+HHolEVFtbq5GREfX19ck5p1gspmQyqebmZpWVlSkcDmvdunXavHmzOjs79dZbb3kXQbqcaDSqe+65Z9YhO+FwWEVFRRofH9e2bdt05swZDQ8Pq7y8XKtWrdLo6Kh3u7GxcdahOQAAYOmui7DunEuY2W9L+oaZLdPE6/4vkgjrWLKWlhZdunRpyrLq6uoZZRkvp7GxUYODg1OWjY2NeWUbJamsrEypVEotLS26++67VVNT4wXlSCSiLVu2aOvWrTp06NC8gT0ajWrr1q1avXq1F9YnD9lJpVIqLS1VVVWVSkpKdMMNN0x5fkVFhZqamq7o9QEAgCtXMGHdOfflST//TNLPpi/P3q6Y4zn7Jd2b10YuEFd1fHupqanR1q1bde7cOSUSCdXW1i6qbGFLS4vGx8d18eJFpdNpLVu2TM459fT0THlcrjLM9N+jeDyu5cuX65FHHtE3v/lNHT582Cv7mGNmikaj2rJli3bs2OEty33PlYOMRqNauXKlmpubr/h1AACAq8cWWubtOsXOwTWXq+wSiUR0+PBhvfLKK1PuNzPdc889M04IksmkXnzxRWUyGQ0PD2vv3r368Y9/rMOHDyuRSKioqEh33XWX7rnnHtXV1am8vFzhcFjd3d1Kp9OKRqMKhUIKhULavn27fu3Xfu2KJsgCAIBFm/MfLmF9fuwc+CqVSmn37t0aGBjwli1fvlz333+/otHojMe3t7fr5MmT3nMTiYRaWlpUU1OjZDKpvr4+bwz82NiY0um0V3kmHo8rFApp8+bN2rZtG0EdAIBrh7C+SHnZOc8++6wk6YEHHsjH6vE2k06ndfToUa8yzLp162ZcOXWyXBgvKipSQ0PDrBNdR0ZG1NPTo1AopJaWFoXDYcXjcRUVFTFZFACAa2/OsF4wY9bfTiZPGAQuJxwOa8uWLQt+fEVFhSoqKq74MSUlJYtqHwAAyB+60AAAAICAIqwDAAAAAUVYBwAAAAKKMes+WL58ud9NAAAAQAGgGsz82DkAAADItzmrwTAMBgAAAAgowroPnnrqKT311FN+NwMAAAABx5h1HwwNDfndBAAAABQAetYBAACAgCKsAwAAAAFFWAcAAAACijHrPlixYoXfTQAAAEABoM76/Ng5AAAAyDfqrAMAAACFhrDug127dmnXrl1+NwMAAAABx5h1H8RiMb+bAAAAgAJAzzoAAAAQUIR1AAAAIKAI6wAAAEBAMWbdB2vXrvW7CQAAACgA1FmfHzsHAAAA+UaddQAAAKDQENZ98OSTT+rJJ5/0uxkAAAAIOMas+yCZTPrdBAAAABQAetYBAACAgCKsAwAAAAFFWAcAAAACijHrPti4caPfTQAAAEABoM76/Ng5AAAAyDfqrAMAAACFhrDug507d2rnzp1+NwMAAAABR1gHAAAAAoqwDgAAAAQUYR0AAAAIKMI6AAAAEFDUWffBli1b/G4CAAAACgB11ufHzgEAAEC+UWc9SJLJpJLJpN/NAAAAQMAR1n3w5JNP6sknn/S7GQAAAAg4wjoAAAAQUEwwvU4459Tf36+hoSFVVlaqtrZWZnMOjwIAAEAAENavEz/84Q+1f/9+JZNJRSIRbd68WR/96EcJ7AAAAAHGMJjrwKlTp/Tyyy8rHo8rk8kokUho//79OnTokN9NAwAAwDzoWffBrbfeek2396Mf/Ujnz5/Xvn37dOLECSWTSUWjUf3Lv/yLvvnNb+rOO++khx0AACCAqLM+v4LfOclkUrfffruOHj2qVCqlycfbzFRWVqYHHnhATzzxhKLRqI8tBQAAuG5RZz1IYrGYYrFY3rfjnNOOHTt09OhRJZNJTT8xc85pdHRUzzzzjHbs2DHjfgAAAPjrsmHdzNJmtn/S16OXefz3zaw6+/XZScvXmNnYtHXtuMy69k167icnLa8zs5+a2YiZPTbtObeb2UEzazOzb1h2fIeZ1ZrZj83sRPZ7zeVee77s2rVLu3btyvt2fvnLX+rZZ5+97AWYxsbG9Oyzz+qVV17Je5sAAACwcJcdBmNmI865iitesdkaSbudc1tnu32F67pP0heccx/J3i6XtE3SVklbnXOfm/TYX0r6Q0kvS/q+pG84535gZl+T1Oec+2r2hKPGOfdnl9kuXc1vA3xiAAAAAu7qDoMxsw+a2T9Nun2fme3O/nzGzOolfVXS+mwP+l/Ps67PTL7fzB7O9Zab2Uh28Vcl3ZNd1x8750adc7+QND5tXc2SqpxzL7mJhPaEpN/K3v2gpG9lf/7WpOUAAABAIC2kGkypme2fdPsrkr4r6XEzK3fOjUr6hKR/nPa8RzXR632r5PWsr5+2rj/IrutFSX+SXfYJSX85y7q8nvV5tEo6P+n2+ewySWpyznVkf+6U1DTbCszsEUmPXGY7AAAAQN4tJKyP5QL3ZGa2R9IDZvbPkj4s6U8XsK6Tc6zrlJndJemEpBsk7V3AuhbNOefmGuLinHtc0uPZdjF+AgAAAL5ZSjWYf5T0kKT3SnrVOTd8Fdb17yU97RY/yPiCpBWTbq/ILpOkruwwmdxwme7Lrcw5l5evgwcP6uDBg3lbf+7r4x//uEKhhR3iUCikhx56KO9t8uMLAACgUC0lrD8v6TZJ/1Ezh8BI0rCkygWu62lNjCn/naWsKzvMZcjM7spWgdkh6Zns3d+T9Onsz5+etPya27p1q7ZuveJ5tlfs85//vEpLSxf02JKSEn3+85/Pc4sAAABwJRYS1kunlVv8qiQ559KSdkv6UPb7FM65Xkl7zezQpAmk66et6w+zj+2XdETSaufcL2dpwwFJaTN708z+WJqYyCrpbyQ9bGbnzWxz9rGflfT3ktoknZT0g+zyr0p6v5mdkPS+7G1fDA4OanBwMO/b2b59ux544IHLXuyotLRUH/3oR3XnnXfmvU0AAABYOK5gOr+87JydO3dKkh5++OF8rH6KZDKp7du36/Dhw7NewTQX1LmCKQAAgG+4gun1KhqN6ktf+pI+/elP68Ybb1Q0GpWZKRqNavv27frZz36m73znOwR1AACAAFpINRgUuPvuu08nTpzQihW/mntbVFSkT33qU1OWAQAAIFjoWb8O1NXV6YEHHlBTU5MqKyvV2NioD3zgAwR1AACAgKNn/TqxZcsWbdq0ScPDw6qoqGDYCwAAQAEgrPvgXe96ly/bjUQiqqmp8WXbAAAAuHJUg5kfOwcAAAD5RjWYIOnp6VFPT4/fzQAAAEDAEdZ9sHv3bu3ePeM6UgAAAMAUhHUAAAAgoAjrAAAAQEAR1gEAAICAIqwDAAAAAUWddR/ce++9fjcBAAAABYA66/Nj5wAAACDfqLMeJJ2dners7PS7GQAAAAg4wroP9uzZoz179vjdDAAAAAQcYR0AAAAIKMI6AAAAEFCEdQAAACCgCOsAAABAQFG6cX552Tnt7e2SpJUrV+Zj9QAAACgsc5ZuJKzPj50DAACAfKPOepC0t7d7vesAAADAXAjrPnjuuef03HPP+d0MAAAABBxhHQAAAAgowjoAAAAQUIR1AAAAIKAI6wAAAEBAUbpxfnnZOZ2dnZKk5cuX52P1AAAAKCzUWV8kdg4AAADyjTrrQXLq1CmdOnXK72YAAAAg4CJ+N+B69MILL0iS1q1b53NLAAAAEGT0rAMAAAABRVgHAAAAAoqwDgAAAAQUYR0AAAAIKEo3zi8vO6enp0eSVF9fn4/VAwAAoLBQZ32R2DkAAADIN+qsB8mxY8d07Ngxv5sBAACAgKPOug9efPFFSdKmTZt8bgkAAACCjJ51AAAAIKAI6wAAAEBAEdYBAACAgCKsAwAAAAFF6cb55WXnDA4OSpKWLVuWj9UDAACgsMxZupFqMNfQCy+8oL179yqVSqm+vl6f/OQnCewAAACYEz3r87tqO+e5557TL37xiynLwuGwvvSlL12tTQAAAKAwcVEkv+3du3fGsnQ6rZdfftmH1gAAAKAQMAzmGnDOqb29Xfv27dOJEyeUTCYVjUa1YcMGxeNxbd++XWZznlABAADgOsUwmPkteeckk0nt2LFD3/3ud5VKpTR5f5uZotGoPvaxj+mJJ55QNBpd6uYAAABQeBY/DMbM0ma2f9LXo5d5/PfNrDr79dlJy9eY2di0de24zLr2TXruJyctf7+ZvWZmB7Pf3zvpvtuzy9vM7BuW7bI2s1oz+7GZnch+r7nca18q55x27Nih733ve0omk5p+YuScUyKR0DPPPKMdO3bMuB8AAADXt8v2rJvZiHOu4opXbLZG0m7n3NbZbl/huu6T9AXn3Eeyt7dJ6nLOXTSzrZJ+6Jxrzd73S0l/KOllSd+X9A3n3A/M7GuS+pxzX82ecNQ45/7sMpteUnp++eWXdf/992t0dPSyjy0vL9e//du/afv27UvZJAAAAArPnD3riwrrZvZBSf+rc+7j2dv3KRumzeyMpDskPSbpQUnHJP1Y0t9plrBuZp+RtN459yfZ2w9LusM597ncts3sJUk3Sjot6VvOub+d9HyT1CupWVKtpJ86527I3vc7ku5zzv0nMzuW/bnDzJol/cw5t+kyr52u7quATwwAAADmtaQ666Vmtn/S7a9I+q6kx82s3Dk3KukTkv5x2vMelbTVOXer5PWsr5+2rj/IrutFSX+SXfYJSX85y7q8nvVp/r2k151zcTNrlXR+0n3nJbVmf25yznVkf+6U1DT3SwYAAAD8t5CwPpYL3JOZ2R5JD5jZP0v6sKQ/XcC6Ts6xrlNmdpekE5JukDSzzuEszGyLpP9T0m8s5PE5zjk3V6+5mT0i6ZErWR8AAACQD0sp3fiPkj4nqU/Sq8654SWu6yFJRyU97RYwbsLMVkh6WtIO59zJ7OILklZMetiK7DJJ6jKz5knDYLpnW69z7nFJj2e3wfgNAAAA+GYpF0V6XtJtkv6jZg6BkaRhSZULXNfTmhjf/jsLWZeZVUv6V0mPOue8XvjsMJchM7srO5Z9h6Rnsnd/T9Knsz9/etLyOTnnlvT18Y9/XKHQwnZxKBTSQw89tORtBvELAAAAi7OQCaZpSQcnLdrjnHs0e99jkh6W1Oici2WXndHEBNEeM/u2pJsl/UATE0yPaGLCac4/OOe+kX3ebkmbnXPrJm07N8E0KumHkuok7ZRULumLmhg2k/MbzrluM7sj+5jS7Hb/IDvspU7SLkmrJJ2V9JBzru8y++eaVYMpKyvTT3/6U6rBAAAAXH8WXw3mOrekneOc0yc/+Uk988wzGhsbm/NxpaWlevDBB/Xtb3+bK5kCAABcfxZ/USQsnpnpiSee0IMPPqhoNDojiJuZSkpK9OCDD+qJJ54gqAMAAGAKetbnd1V2jnNOf/7nf65/+qd/0okTJ5RKpRSJRLRp0yY99thj+vVf//WrsRkAAAAUJobBLNJV2znDw8PauXOnBgcHlclkFI1G9c53vlPvfe97r9YmAAAAUJgI64t0VXdOKpXSwYMHdeTIETU1Nen++++/mqsHAABAYWLMehBEIhFt27ZNiURC7e3tfjcHAAAAAUdYBwAAAAKKsA4AAAAEFGEdAAAACCjCOgAAABBQVIOZHzsHAAAA+UY1GAAAAKDQENZ9sG/fPu3bt8/vZgAAACDgCOs+OH78uI4fP+53MwAAABBwhHUAAAAgoAjrAAAAQEAR1gEAAICAivjdgOtRNBr1uwkAAAAoANRZnx87BwAAAPlGnXUAAACg0BDWffD888/r+eef97sZAAAACDjCug9Onz6t06dP+90MAAAABBxhHQAAAAgowjoAAAAQUIR1AAAAIKCos+6DsrIyv5sAAACAAkCd9fmxcwAAAJBv1FkHAAAACg1h3Qc/+clP9JOf/MTvZgAAACDgGLPug/Pnz/vdBAAAABQAetYBAACAgCKsAwAAAAFFWAcAAAACijHrPqiqqvK7CQAAACgA1FmfHzsHAAAA+UaddQAAAKDQENZ9sGfPHu3Zs8fvZgAAACDgGLPug87OTr+bAAAAgAJAzzoAAAAQUIR1AAAAIKAI6wAAAEBAMWbdB3V1dX43AQAAAAWAOuvzY+cAAAAg36izDgAAABQawroPnn32WT377LN+NwMAAAABx5h1H/T29vrdBAAAABQAetYBAACAgCKsAwAAAAFFWAcAAAACijHrPli+fLnfTQAAAEABoM76/Ng5AAAAyDfqrAMAAACFhrDug6eeekpPPfWU380AAABAwDFm3QdDQ0N+NwEAAAAFgJ51AAAAIKCYYDo/dg4AAADyjQmmAAAAQKEhrAMAAAABRVgHAAAAAoqwDgAAAAQUYR0AAAAIKMI6AAAAEFCEdQAAACCgCOsAAABAQBHWAQAAgIAirAMAAAABRVgHAAAAAoqwDgAAAAQUYR0AAAAIKMI6AAAAEFDmnPO7DYFlZnsk1edp9fWSevK0blwbHMPCxvErbBy/wsbxK2wcv6uvxzn3wdnuIKz7xMxedc7d4Xc7sHgcw8LG8StsHL/CxvErbBy/a4thMAAAAEBAEdYBAACAgCKs++dxvxuAJeMYFjaOX2Hj+BU2jl9h4/hdQ4xZBwAAAAKKnnUAAAAgoAjrPjCzD5rZMTNrM7NH/W4ProyZnTGzg2a238xe9bs9uDwz+wcz6zazQ5OW1ZrZj83sRPZ7jZ9txNzmOH5fNrML2ffhfjP7TT/biNmZ2Uoz+6mZvWVmh83sf8su5/1XIOY5hrwHrxGGwVxjZhaWdFzS+yWdl/SKpN9xzr3la8OwYGZ2RtIdzjlqzBYIM7tX0oikJ5xzW7PLviapzzn31exJc41z7s/8bCdmN8fx+7KkEefc1/1sG+ZnZs2Smp1zr5tZpaTXJP2WpIfF+68gzHMMHxLvwWuCnvVrb7ukNufcKedcQtI/SnrQ5zYBb2vOuRck9U1b/KCkb2V//pYm/vkggOY4figAzrkO59zr2Z+HJR2R1CrefwVjnmOIa4Swfu21SmqfdPu8+KUvNE7Sj8zsNTN7xO/GYNGanHMd2Z87JTX52RgsyufM7EB2mAzDKALOzNZI2ibpZfH+K0jTjqHEe/CaIKwDV+7dzrnbJH1I0u9nP6JHAXMT4wEZE1hY/l9J6yXdKqlD0v/lb3MwHzOrkPRdSX/knBuafB/vv8IwyzHkPXiNENavvQuSVk66vSK7DAXCOXch+71b0tOaGNqEwtOVHYuZG5PZ7XN7cAWcc13OubRzLiPpv4v3YWCZWVQTIe9J59xT2cW8/wrIbMeQ9+C1Q1i/9l6RtMHM1ppZkaT/IOl7PrcJC2Rm5dkJNjKzckm/IenQ/M9CQH1P0qezP39a0jM+tgVXKBf0sv6deB8GkpmZpP8h6Yhz7m8m3cX7r0DMdQx5D147VIPxQba80X+RFJb0D865v/S5SVggM1unid50SYpI+jbHL/jM7DuS7pNUL6lL0v8u6V8k7ZK0StJZSQ8555jEGEBzHL/7NPHxu5N0RtJ/mjQGGgFhZu+W9HNJByVlsov/sybGPPP+KwDzHMPfEe/Ba4KwDgAAAAQUw2AAAACAgCKsAwAAAAFFWAcAAAACirAOAAAABBRhHQAAAAgowjoAXMfMLG1m+yd9PTrPY3/LzDZPuv1/mNn7rkIbqs3ss0tdDwC8HVG6EQCuY2Y24pyrWOBjd0ra7Zz756vchjXZ9W69musFgLcDetYBADOY2VfN7C0zO2BmXzezuyV9VNJfZ3vg15vZTjP77ezjz5jZV7L3vWpmt5nZD83spJl9JvuYCjN7zsxeN7ODZvZgdnNflbQ++9y/zj72T8zslez2/9yPfQAAQRDxuwEAAF+Vmtn+Sbe/Iuknmrh8+A3OOWdm1c65ATP7nib1rE9chXyKc865W83sbyXtlPRrkko0cRny/yZpXNK/c84NmVm9pJey63xU0lbn3K3Z9f6GpA2StksySd8zs3udcy/kYwcAQJAR1gHg+jaWC8k5ZhbRRLD+H2a2W9LuBa7re9nvByVVOOeGJQ2bWdzMqiWNSvorM7tXE5ctb5XUNMt6fiP79Ub2doUmwjthHcB1h7AOAJjCOZcys+2S7pf025I+J+m9C3hqPPs9M+nn3O2IpN+V1CDpdudc0szOaKLnfTqT9BXn3DcX9woA4O2DMesA8P+3c4comUZRGIDft01Q/jbFYDa5BvdhmgUICi7EbBasIsyMCxgsNg2uQTBpvwa/ojBB/3LF56kHzrnx5XC4vNF2I8lqjPE7yWGS3aX0lGRzjdarJA9LUN9Lsv2fvldJfi3vSNuttj/XmAvwZdmsA3xv72/W/yY5SXLR9kdet9xHS+08yWnbg7xu3D/qLMll29skN0nuk2SM8dj2X9u7JH/GGMdtd5JcL3fxz0n2kzx8YibAl+brRgAAmJQzGAAAmJSwDgAAkxLWAQBgUsI6AABMSlgHAIBJCesAADApYR0AACYlrAMAwKReAGvVIT1yynkuAAAAAElFTkSuQmCC\n", | |
| "text/plain": [ | |
| "<Figure size 864x432 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": { | |
| "tags": [], | |
| "needs_background": "light" | |
| } | |
| } | |
| ] | |
| } | |
| ] | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Greetings Jin! First off, thank you so much for posting this! It has been really helpful for me to get started in the Colab / jupyter environment to marry the benefits of R and Python.
The reason I am commenting, is because I have run into an issue with using the "lme4" library in my notebooks. I was wondering if you had any issues with this and have found a workaround? So far, I have tried a lot of different things except creating environments locally that can be used in Colab.
-Jess