Skip to content

Instantly share code, notes, and snippets.

@jcheong0428
Last active December 12, 2024 08:53
Show Gist options
  • Select an option

  • Save jcheong0428/f25b47405d9d328691c102787bc92175 to your computer and use it in GitHub Desktop.

Select an option

Save jcheong0428/f25b47405d9d328691c102787bc92175 to your computer and use it in GitHub Desktop.
LMER in Python.ipynb
Display the source blob
Display the rendered blob
Raw
{
"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": "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\n",
"text/plain": [
"<Figure size 864x432 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
}
]
}
@jnel41
Copy link

jnel41 commented Feb 23, 2022

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment