{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%load_ext autoreload\n", "%autoreload 2\n", "\n", "import anndata\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "import logging\n", "import numpy as np\n", "import pandas as pd\n", "import scipy.stats" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import diffxpy.api as de" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Introduction" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Differential expression analysis is a group of statistical tests that are used to establish whether there a exists a significant variation across a set of tested conditions for each gene. In its easiset form, this test can test for the difference between two distinct groups: This scenario can be handled with (Welch's) T-test, rank sum tests or Wald and likelihood ratio tests (LRT). Wald tests and LRT allow for more adaptive assumptions on the noise model and can therefore be more statistically correct. Moreover, they also allow the testing of more complex effect, e.g. for the variation across many groups (a single p-value for: Is there any difference between four conditions?) or across continuous covariates (a single covariate for: Is a gene expression trajectory in time non-constant?). Below, we introduce these and similar scenarios. We dedicated separate tutorials to a selection of scenarios that require a longer introduction." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Testing a single coefficient" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The test of a single coefficient is the easiest differential expression test one can imagine, the comparison of two groups is a sub-scenario of this case." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Standard test" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Generate data:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here, we use a simulator provided by batchglm and pack the simulated data into an AnnData object. One can also directly supply arrays to diffxpy." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Transforming to str index.\n" ] } ], "source": [ "from batchglm.api.models.tf1.glm_nb import Simulator\n", "\n", "sim = Simulator(num_observations=200, num_features=100)\n", "sim.generate_sample_description(num_batches=0, num_conditions=2)\n", "sim.generate_params(\n", " rand_fn_loc=lambda shape: np.random.uniform(-0.1, 0.1, shape),\n", " rand_fn_scale=lambda shape: np.random.uniform(0.1, 2, shape)\n", ")\n", "sim.generate_data()\n", "\n", "data = anndata.AnnData(\n", " X=sim.x,\n", " var=pd.DataFrame(index=[\"gene\" + str(i) for i in range(sim.x.shape[1])]),\n", " obs=sim.sample_description\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Run differential expression test" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We first tackle this scenario with a Wald test.\n", "\n", "\n", "The wald test checks if a certain coefficient introduces a significant difference in the expression of a gene.\n", "\n", "It needs a formula which describes the setup of the model and the factor of the formula `factor_loc_totest` which should be tested.\n", "\n", "Usually, this factor divides the samples into two groups, e.g. `condition 0` and `condition 1`.\n", "In this case, diffxpy will automatically choose the coefficient to test.\n", "If there are more than two groups specified by the factor, the coefficient which should be tested has to be set manually by specifying `coef_totest`. This coefficient should refer to one of the groups specified by `factor_loc_totest`, e.g. `condition 1`.\n" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "scrolled": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "WARNING: Logging before flag parsing goes to stderr.\n", "I1101 08:29:16.389711 4648003008 estimator.py:51] training strategy:\n", "{'max_steps': 1000, 'update_b_freq': 5}\n" ] } ], "source": [ "test = de.test.wald(\n", " data=data,\n", " formula_loc=\"~ 1 + condition\",\n", " factor_loc_totest=\"condition\"\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Obtain the results" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The p-/q-values can be obtained by calling test.pval / test.qval:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0.60139521, 0.22027086, 0.57619872, 0.93807501, 0.65553144,\n", " 0.88983104, 0.49675858, 0.08771343, 0.07318849, 0.22164236])" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "test.pval[:10]" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0.84703551, 0.53478002, 0.84703551, 0.99868475, 0.86406426,\n", " 0.98870116, 0.82114705, 0.31758301, 0.31758301, 0.53478002])" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "test.qval[:10]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "test.summary() returns a pandas DataFrame with a quick overview of the test results:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
genepvalqvallog2fcmeanzero_meangradcoef_mlecoef_sdll
0gene00.6013950.847036-0.060085435.015015False0.007131-0.0600850.115018-1405.466779
1gene10.2202710.5347800.116396514.085022False0.0195040.1163960.094955-1421.041301
2gene20.5761990.847036-0.043876602.700012False0.046234-0.0438760.078498-1430.723576
3gene30.9380750.9986850.004080446.040009False0.0442340.0040800.052521-1288.610775
4gene40.6555310.8640640.019108504.510010False0.0626640.0191080.042835-1295.435961
5gene50.8898310.988701-0.008318483.299988False0.037404-0.0083180.060049-1342.506068
6gene60.4967590.821147-0.052436480.125000False0.029464-0.0524360.077157-1371.953554
7gene70.0877130.317583-0.109675492.584991False0.007987-0.1096750.064228-1350.015749
8gene80.0731880.317583-0.125621533.655029False0.006187-0.1256210.070114-1380.828275
9gene90.2216420.534780-0.099408493.225006False0.002494-0.0994080.081337-1389.021227
\n", "
" ], "text/plain": [ " gene pval qval log2fc mean zero_mean grad \\\n", "0 gene0 0.601395 0.847036 -0.060085 435.015015 False 0.007131 \n", "1 gene1 0.220271 0.534780 0.116396 514.085022 False 0.019504 \n", "2 gene2 0.576199 0.847036 -0.043876 602.700012 False 0.046234 \n", "3 gene3 0.938075 0.998685 0.004080 446.040009 False 0.044234 \n", "4 gene4 0.655531 0.864064 0.019108 504.510010 False 0.062664 \n", "5 gene5 0.889831 0.988701 -0.008318 483.299988 False 0.037404 \n", "6 gene6 0.496759 0.821147 -0.052436 480.125000 False 0.029464 \n", "7 gene7 0.087713 0.317583 -0.109675 492.584991 False 0.007987 \n", "8 gene8 0.073188 0.317583 -0.125621 533.655029 False 0.006187 \n", "9 gene9 0.221642 0.534780 -0.099408 493.225006 False 0.002494 \n", "\n", " coef_mle coef_sd ll \n", "0 -0.060085 0.115018 -1405.466779 \n", "1 0.116396 0.094955 -1421.041301 \n", "2 -0.043876 0.078498 -1430.723576 \n", "3 0.004080 0.052521 -1288.610775 \n", "4 0.019108 0.042835 -1295.435961 \n", "5 -0.008318 0.060049 -1342.506068 \n", "6 -0.052436 0.077157 -1371.953554 \n", "7 -0.109675 0.064228 -1350.015749 \n", "8 -0.125621 0.070114 -1380.828275 \n", "9 -0.099408 0.081337 -1389.021227 " ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "test.summary().iloc[:10,:]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- `gene`: gene name / identifier\n", "- `pval`: p-value of the gene\n", "- `qval`: multiple testing - corrected p-value of the gene\n", "- `log2fc`: log_2 fold change between `no coefficient` and `coefficient`\n", "- `grad`: the gradient of the gene's log-likelihood\n", "- `coef_mle` the maximum-likelihood estimate of the coefficient in liker-space\n", "- `coef_sd` the standard deviation of the coefficient in liker-space\n", "- `ll`: the log-likelihood of the estimation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`test.plot_volcano()` creates a volcano plot of p-values vs. fold-change:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "scrolled": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYcAAAEKCAYAAAD5MJl4AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzt3Xl4lfWd///nOwsQhEAgYQcBkbpMN4haFIsLrYM6qHWpdbTiqBSoFae2Fu1Yrf1d1Wm/0to6U4dxKS4VcWlFZUBRFqFEBMoiipQ9G4EsBLKRBN6/P87hNORkOSE5OSfwelzXubj38zqHkDf3/bnvz8fcHRERkboSYh1ARETij4qDiIiEUXEQEZEwKg4iIhJGxUFERMKoOIiISBgVBxERCaPiICIiYVQcREQkTFKsA7RUenq6Dx06NNYxREQ6lDVr1hS6e0ak23e44jB06FBWr14d6xgiIh2Kme1qyfa6rCQiImFUHEREJIyKg4iIhFFxEBGRMCoOIiISRsVBRETCqDiIiMSzmnIoWQebn4ADW+BwTbu8rYqDiEg8q8yFBaNh7T2wYBQc2tcub6viICISzw5uAT8SmK4th5r97fK2Kg4iIvGs12jodlpgOn0MdOrdLm/b4brPEBE5qaT0h28sh8OVkNQVuvRtl7dVcRARiXcp/dr9LXVZSUREwqg4iIhIGBUHEREJo+IgIiJhVBxERCSMioOIiIRRcRARkTBRKw5mNtjMFpvZp2a2ycymN7DNRWZWambrgq+fRSuPiIhELpoPwdUC97r7WjPrDqwxs/fc/dN6233o7ldGMYeIiLRQ1M4c3D3f3dcGpw8CnwEDo/V+IiLSdtqlzcHMhgJfBT5qYPUYM1tvZv9nZme3Rx4REWla1PtWMrNuwOvAPe5+oN7qtcCp7l5mZpcDfwFOb+AYk4HJAEOGDIlyYhERieqZg5klEygML7n7G/XXu/sBdy8LTs8Hks0svYHtZrl7prtnZmRkRDOyiIgQ3buVDHgG+MzdZzayTb/gdpjZucE8RdHKJCIikYnmZaULgFuAjWa2LrjsAWAIgLs/BVwHTDWzWqASuNHdPYqZREQkAlErDu6+HLBmtnkSeDJaGURE5PjoCWkREQmj4iAiImFUHEREJIyKg4iIhFFxEBGRMCoOIiISRsVBRETCRL1vJRE5wRyugkNF4LWQ3AM69Yx1IokCnTmISMsUr4F5p8GbQ2HrLKg5GOtEEgUqDiISuZpy+PQxOHIoML/pl1BbFttMEhUqDiISucQukH7+P+bTvgoJybHLI1GjNgcRiVxCIoyYDKlnQNU+GHwVdA7rZV9OACoOItIynXvD4GtinUKiTJeVREQkjIqDiIiEUXEQEZEwKg4iIhKm2QZpM8sELgQGEBjK8xPgPXcviXI2ERGJkUbPHMzsNjNbC9wPpACfA3uBscAiM5ttZkPaJ6aIiLSnps4cugIXuHtlQyvN7CvA6cDuaAQTEZHYabQ4uPt/NbWju69r+zgiIhIPmm2QNrORZva+mX0SnP+Smf1H9KOJiEisRHK30v8SaHeoAXD3DcCN0QwlIiKxFUlx6Oruq+otq41GGBERiQ+RFIdCMzsNcAAzuw7Ij2oqERGJqUg63vs+MAs4w8xygR3AzVFNJSIiMdVscXD37cB4MzsFSHB3DfskInKCi+QJ6Z/VmwfA3R+JUiYREYmxSNocyuu8DgMTgKHN7WRmg81ssZl9amabzGx6A9uYmf3OzLaa2QYzG9XC/CIiEgWRXFZ6vO68mf0/YGEEx64F7nX3tWbWHVhjZu+5+6d1tplA4Cnr04HzgD8E/xQRkRg6nl5ZuwKDmtvI3fPdfW1w+iDwGTCw3mZXAc97QBbQ08z6H0cmERFpQ5G0OWwkeBsrkAhkAC1qbzCzocBXgY/qrRoIZNeZzwkuO+ZWWTObDEwGGDJEff2JiERbJLeyXllnuhYocPeIH4Izs27A68A97n6ghfkAcPdZBG6nJTMz05vZXEREWqnR4mBmvYKT9W9dTTUz3L24uYObWTKBwvCSu7/RwCa5wOA684OCy0REJIaaOnNYQ+BykjWwzoHhTR3YAve8PgN85u4zG9lsHnCXmc0h0BBd6u56+lpEJMaa6rJ7WCuPfQFwC7DRzI527/0AMCR4/KeA+cDlwFagAritle8pIiJtIJI2B8wsjcDtpl2OLnP3ZU3t4+7Lafiso+42TqB7DhERiSOR3K10BzCdQHvAOuBrwErgkuhGExGRWInkOYfpwDnALne/mMAtqfujmkpERGIqkuJQ5e5VAGbW2d03A1+IbiwREYmlSNoccsysJ/AX4D0zKwF2RTeWiIjEUiR9K10TnHzYzBYDPYAFUU0lIiIxFUmD9O+AOe7+V3df2g6ZREQkxiJpc1gD/IeZbTOz/2dmmdEOJSIisdVscXD32e5+OYE7lj4H/tPM/h71ZCIiEjMt6bJ7BHAGcCqwOTpxREQkHjRbHMzsV8EzhUeAT4BMd/+XqCcTEZGYieRW1m3AGHcvjHYYERGJD5G0OfzP0cJgZg9HPZGIiMRcS4cJnRiVFCIiEldaWhya7GVVRERODC0tDqOikkJEROJKJHcrDTezt8ysECgwszfNrMlR4EREpGOL5MzhT8BcoB8wAHgVeDmaoUREJLYiKQ5d3f0Fd68Nvl6kzohwIiJy4onkOYf/M7MZwBzAgW8D882sF4C7F0cxn4iIxEAkxeGG4J/fq7f8RgLFQu0PIiInmEjGcxjWHkFERCR+tPRWVhEROQmoOIiISBgVBxERCdNom4OZNfk0tLuvbfs4IiISD5pqkH48+GcXIBNYT6BvpS8Bq4Ex0Y0mIiKx0uhlJXe/2N0vBvKBUe6e6e6jga8Cue0VUERE2l8kbQ5fcPeNR2fc/RPgzOZ2MrNnzWyvmX3SyPqLzKzUzNYFXz+LPLaIiERTJA/BbTCzp4EXg/P/CmyIYL8/Ak8CzzexzYfufmUExxIRkXYUSXG4DZgKTA/OLwP+0NxO7r7MzIYedzIREYmZSJ6QrjKzp4D57v55G7//GDNbD+QBP3L3TW18fBEROQ6RjOcwEVgHLAjOf8XM5rXBe68FTnX3LwO/B/7SRIbJZrbazFbv27evDd5aRESaEkmD9EPAucB+AHdfB7S6vyV3P+DuZcHp+UCymaU3su2s4N1SmRkZGa19axERaUYkxaHG3UvrLfPWvrGZ9TMzC06fG8xS1NrjiohI60XSIL3JzG4CEs3sdOBu4K/N7WRmLwMXAelmlkPgDCQZwN2fAq4DpppZLVAJ3OjurS46IiLSepEUhx8APwUOERgydCHwi+Z2cvfvNLP+SQK3uoqISJyJpDhc4e4/JVAgADCz6wmMJS0iIiegSNoc7o9wmYiInCCa6pV1AnA5MNDMfldnVSpQG+1gIiISO01dVsoj0PvqRGBNneUHgX+PZigREYmtRouDu68H1pvZn4Fydz8MYGaJQOd2yiciIjEQSZvDu0BKnfkUYFF04oiISDyIpDh0OfokM0Bwumv0IomISKxFUhzK6w4ZamajCTy0JiIiJ6hInnO4B3jVzPIIDBPaD/h2VFOJiEhMRdJl98dmdgbwheCiz929JrqxREQkliLpsrsr8BNgenCI0KFmptHbREROYJG0OTwHVANjgvO5wP8XtUQiIhJzkRSH09z9V0ANgLtXEGh7EBGRE1QkxaHazFIIjuFgZqcR6KFVREROUJHcrfQQgSFCB5vZS8AFwKRohhIRkdhqsjgER2rbDHwL+BqBy0nT3b2wHbKJiEiMNFkc3N3NbL67fxF4p50yiYhIjEXS5rDWzM6JehIREYkbkbQ5nAf8q5ntAsoJXFpyd/9SVJOJiEjMRFIcLot6ChERiSvNNUgnAgvd/Yx2yiMiInGgyTaH4AA/n5vZkHbKIyIicSCSy0ppwCYzW0WgzQEAd58YtVQiIhJTkRSHB6OeQkRE4kokXXYvNbO+wNHbWVe5+97oxhIRkViKpMvuG4BVwPXADcBHZnZdtIOJiEjsRHJZ6afAOUfPFswsA1gEvBbNYCIiEjuRPCGdUO8yUlGE+4mISAcVyS/5BWa20MwmmdkkAn0s/V9zO5nZs2a218w+aWS9mdnvzGyrmW0ws1Etiy4iItHSbHFw9x8D/wN8Kfia5e73RXDsPwL/3MT6CcDpwddk4A8RHFNERNpBs20OZjYMmO/ubwTnU8xsqLvvbGo/d19mZkOb2OQq4Hl3dyDLzHqaWX93z484vYiIREUkl5VeBY7UmT8cXNZaA4HsOvM5wWUiIhJjkRSHJHevPjoTnO4UvUjhzGyyma02s9X79u1rz7cWETkpRVIc9plZqKsMM7sKaIuR4HKBwXXmBwWXhXH3We6e6e6ZGRkZbfDWIiLSlEiKwxTgATPbbWa7gZ8QaEBurXnAd4N3LX0NKFV7g4hIfIik+4xtwNfMrFtwviySA5vZy8BFQLqZ5QAPAcnBYzwFzAcuB7YCFcBtx5FfRESioNHiYGY3A39y9yMQXhTM7DSgv7svb2h/d/9OU28cvEvp+y1OLCIiUdfUmUNv4G9mtgZYA+wDugAjgHEE2h1mRD2hiIi0u0aLg7s/YWZPApcAFxB4AK4S+Ay4xd13t09EERFpb022OQRHgnsv+BIRkZNEU20OScDtwNX84+G0XOBN4Bl3r4l+PBERiYWmzhxeAPYDPyfw9DIEnkW4FXgR+HZ0o4mISKw0VRxGu/vIestyCPSDtCWKmUREJMaaKg7FZnY98PrR21nNLIHAiHAl7RFOjk9BQQGVlZUkJSWRnp5Oly5dYh1JRDqYpp6QvhG4Digwsy3Bs4U9wLeC6yQOFRQU8J3vfIdhw4Zx7bXXkpeXR02NmodEpGWaupV1J8F2BTPrHVxW1D6x5Hjl5OSwePFiAFatWsXatWtJTU0lPT09xslEpCOJaLhPdy+qWxjM7BvRiyStkZ6eTlJSoOYnJCQwbNgwOnVq1050ReQE0GzfSo14BhjSlkGkbWRkZLB8+XJeeeUVJkyYwIABA0hNTY11LBHpYJp6zmFeY6sIdK0hcahr166cd955nHfeebGOIiIdWFNnDhcCNwP1e2E14NyoJRIRkZhrqjhkARXuvrT+CjP7PHqRREQk1pq6W2lCE+u+Hp04IiISDyK6W0lERE4uzd6tZGYHAa+3uBRYDdzr7tujEUxERGInkltZf0ugT6U/EWiMvhE4DVgLPEtgKFARETmBRHJZaaK7/4+7H3T3A+4+C7jM3V8B0qKcT0REYiCS4lBhZjeYWULwdQNQFVxX/3KTiIicACIpDv8K3ALsDb5uAW42sxTgrihmExGRGGm2zSHY4Pwvjaxe3rZxREQkHjR75mBmg8zsz2a2N/h63cwGtUc4ERGJjUguKz0HzAMGBF9vBZeJiMgJKpLikOHuz7l7bfD1RyAjyrlERCSGIikORWZ2s5klBl83Axr0R0TkBBZJcfg34AYCQ4TmExg69LZohhIRkdhqtji4+y53n+juGe7ex92vdvfd7RGuLR04cID8/HwKCgoAKC4uJj8/n3379sU4Wevl5ORw7733MnPmzAY/T1VVFdnZ2WRnZ7N///4mj1VYWMhTTz3F9OnT2bFjR7QiSxs4ePAgH3zwAdOmTWPFihWUl5dH5X0qKytZtWoV06ZN491336W0tDQq7yNxxt0bfAG/B37X2Kux/eod45+Bz4GtwIwG1k8C9gHrgq87mjvm6NGjvaX279/vjz/+uCckJPjQoUN9+/btPn36dAf83HPP9T179rT4mJHIz8/3GTNm+EMPPeR79uzx/fv3+4IFC3zKlCmelZXlFRUVrX6PgoIC/+IXv+gEHkj0Bx980Gtra0PrDx065AsWLPAuXbp4jx49fOnSpV5SUtLo8Z588snQsQYNGuTZ2dm+adMmz8nJ8Z07d/rmzZu9sLCw1bkloLq62nNzc33Tpk0t/jncvHmzm5kDnpiY6Nu3bw/bZs+ePaG/v0OHDjWbY+PGjb5z507Py8vzoqIi37Ztm3/++ef+29/+NvReGzdubPHnlNgDVnsEv7ePvpr6xX5rU69mDwyJwDZgONAJWA+cVW+bScCTLQl8PMUhJycn9AsP8H//93/366+/PjT/6quvtviYzSkuLvYJEyaE3mPKlCm+YcOG0HxycrJnZ2e3+n3y8vK8W7duoeNee+21XllZGVqfn5/vw4cPD60fN26cb9++3ZcuXerbtm3zuXPn+ueff+5lZWV+5MgRnzp1amhbM/NVq1b5uHHj/KWXXvKEhAQH/K677vKSkhI/cuSIHzx40Gtqalr9OU5Wf//730N/f5mZmU0WiL179/o777zjS5cu9cLCQn///feP+bletmzZMdvv3r3bv/a1rzngp5xyin/66aeNFoitW7d69+7dHfDRo0f7ypUr/Q9/+EPo2A8//LDfeeedDvj8+fPb9DuQ9tHS4tDoZSV3n13/BSysM92cc4Gt7r7d3auBOcBVEezX5hITE+nTp09o/vTTT6eioiI0P2RI2w+HXV1dfcxlmYKCArKzs0PzNTU1bXJ6npqayuOPP05CQgK9evXinnvuobKyMrQ+OTmZwYMHh+YHDx7MkSNHABg7diw33HADZ511Frt27cLMuOeee+jfvz8Ajz32GH/+858ZPXo0c+fODe337LPPUl5ezqJFi7jhhhv43e9+R1GR7lE4Hu+99x5lZYHBFlevXt3opaGSkhJ+8IMfcMUVVzBu3Diee+45/umf/onzzz8fgG984xukp6eHtt+zZw/Z2dlkZWUBUF5ezmuvvdboz9yiRYs4ePAgAGvWrCElJYX//d//Da1/+eWXyczM5JxzzmHUqFGt/+AS/1pSSYC1Ldj2OuDpOvO3UO8sgcCZQz6wAXgNGNzIsSYT6CJ89ZAhQ1pcMQ8fPuxbtmzxO+64w3/zm994QUGBZ2Vl+aRJk3zu3LleXFzc4mM2p7q62t99913v3Lmzd+3a1f/617/6nj17/LzzznPAr776at+7d2+bvM8zzzzjS5Ys8ffee88vvvhiz8vLO2ab7Oxsv+uuu/xHP/qR79q1y7/3ve/50qVLj/lf5+zZs93d/aOPPvIFCxb4kiVLfM2aNX7WWWf5lVde6b/5zW9C21511VW+e/duT0xMDC1btGhRqz/LyWjDhg2h73Ho0KFhf3dH5eXleZ8+fULf96WXXuolJSW+Y8cOX7t2ra9ateqYy307duzwRYsWhc4aExIS/N133/WsrKwGj79x48ZQjlNPPdXXrFnjDzzwQOj97r77bs/NzfWCgoKofA8SfbTVZaUGN4a/tWDbSIpDb6BzcPp7wAfNHfd4Lisddfjw4Sbn21plZaXn5eV5Xl6eV1dXu3vg0kBubm6bXrdftmyZJyUlOeB33nmnFxUVhW1z5MgRP3z4sJeVlfmDDz7o77zzjo8ePdoBT0tL8x07dri7e25urg8cODB0CSo7O9vffvtt3759u69atcoXLFjge/fu9e3btx9TXObOndtmn+dkUl5e7lu2bPG33nrLc3NzG93uwIED/tBDD4Uu973xxhuhtqWGfo4LCgr81ltv9R07dvhzzz3nH374of/whz9stPiUlZX5li1b/M033/StW7f6jh07vKCgwJctW+aLFy/2ffv2tc0HlphpaXGwwD6RMbNp7v7fEW47BnjY3S8Lzt8P4O6PNrJ9IlDs7j2aOm5mZqavXr064swng4qKCoqLi6msrCQtLe2YywsNKS4uprS0lKSkJMrLy0lNTaVv374kJiYCkJ+fz4EDB+jRowf9+vVr8BglJSU899xzfPnLX6Zbt24MHDiQgQMHYmZt/vkkoLi4mOLiYjp16kRaWhrdu3cPrdu/fz8lJSWhy4vdu3dn7969lJeXk5KSwsGDB+nevXujf59y4jOzNe6eGfEOLakkLXkR6NRvOzCMfzRIn11vm/51pq8Bspo7bmvOHKRt5ebmhu6UGjBggOfk5MQ60kmprKwsdNnPzHzu3LmhM1WRo2irBunWcvdaAl16LwQ+A+a6+yYze8TMJgY3u9vMNpnZeuBuAm0Q0kGUlJSwceNGAPLy8li3bl2ME52cDh48yBNPPAEE/rP329/+NtS4LHK8Ihkm9Li5+3xgfr1lP6szfT9wfzQzSPSkpaXRs2dP9u/fT3JyMmeeeWasI52UUlJSGDduHDt37gTgkksuoWvXrrENJR1ei9oc4oHaHOJHbW0tubm5rFixgszMTAYPHkxKSkqsY52UCgsLWbFiBSkpKYwaNarZdic5+bS0zUHFQUTkJNDS4hDVy0rScRQUFFBeXk7Xrl11R4uIRK9BWjqOgoICrrjiCk477TTGjh1Lfn5+rCOJSIypOAh79+5lzZo1AGzbto3169fHOJGIxJqKg9C7d+/Q3S2JiYmcfvrpMU4kIrGmNgchIyODv/3tbyxcuJCLLrqo1W0O7k5ZWRldunQhOTm5jVKKSHtScejg9u7dy5w5czh8+DA33XQTffv2bfExkpOTGTlyJCNHjmx1nsrKSj766CMee+wxzj//fKZNm6bbKkU6IBWHDuzgwYPcd999zJ4d6EE9KyuLWbNm0aNHk91TtVhpaSllZWUkJSXRo0cPunTpcsx6d2ffvn0kJCRQVVXFZZddRnV1NQsXLuTss8/m2muvBQIj0pWWltKlS5ewjAcPHqSiooLU1NST+lmJsrIyysvL6d69e0QPsh06dIj9+/c3+J2KtIbaHDqwqqqqUPcVAJ988glVVVXHfbzi4mJ27txJXl4etbW1QODMZMqUKYwfP563336bjz/++JiuGdydzZs3M2HCBCZOnMihQ4eorq4OrS8pKQECv/xff/11LrroIn7wgx8cM5xpYWEhM2bMYNy4cTz99NPNDmV6oioqKuKRRx5h3LhxPPHEExQXFze5fVlZGfPmzeOiiy5i6tSpJ8SQtxJHWtIRUzy81PHeP1RXV/vChQs9OTnZk5KSfN68eU0OBdmU4uJi/+EPf+iAp6am+ieffOLufsxoYAkJCf7hhx/6rl27QvvVH6b0j3/8o8+cOdPT09P9m9/8Zmhks127doWGmTy63VELFiw4pvvvbdu2teJb6bhWrlx5zPfw2WefNbl9dnZ2aHQ+wJ966ql2SiodES3seE+XlTqw5ORkLrzwwtCIc2lpaXTq1Om4jlVZWcnMmTMBOHDgAC+88AKPPvoop5xySmibhIQEzCysW+6kpH/8GM2dO5fZs2dz44030qlTJ3r37g0Q2s+DT+TX3ScxMZHU1FTOPvtsCgoKSEg4OU9oj3aZ3th8QxISEkIj9NX9TkVa6+T8V3gCSUlJCY2l0JrO1pKSkvjCF74AwOTJk7nmmmuYNWsW559/Po899hiZmZk8//zzJCQkkJaWFtqvT58+vPLKK1x44YWMHz+ep556ivT0dPr37x8qDBAoXK+++iqjR49mypQpXHLJJaF1o0aNYsWKFVxzzTU8++yzYW0aJ4vhw4fzyCOPMGrUKH7/+9+HGvL3798fak/KyckJbd+rVy/+8pe/MHr0aCZPnszEiRMbO7RIi6lvJQnJzc1l/vz5ZGZmkpmZyZEjR0hLS2Pjxo0kJiaSnJxMampqg7enFhcXY2bHFI66Kisr+dOf/kRpaSl5eXns3buX3//+9/To0YPdu3dz/vnnk5ubC8CSJUsYN25cVD9rvKqsrKSsrIzU1FQ6d+4MwLJly0Lfx6BBg/j4449DtxsfHYu8S5cudOvWLWa5Jf6pbyU5bgMHDuTOO+/klVdeCV2qKCkpoaKiotkH43r16tXk+srKSp599ln++te/AjBs2DAqKyvp0aMHhw4dChUGgJUrV3LhhReelJeXUlJSwu7WysrKCk3n5ORw6NCh0HxycrJuFZaoOPn+9UmzLrjgAgYOHBiabotbJFNTU5kxY0boF/6MGTNCx+3atStXXnklECgyl1xyCevXr6empqbV73siuPbaa0PF96qrrtJYDdIudFlJGpSfn09lZSXdunWjT58+YesLCgo4cuQIPXv2jPi5hPLycoqLi0P71S06+fn57Nmzh/Lycu6//342bNjA5s2b6d+/f5t9plhy99B3lpiYyJEjR+jdu3dENxAcPnyYgoICqqqq6N69OxkZGe2QWE40Lb2spDMHaVD//v0ZPnx4g4Vh+/btnH/++YwYMYL58+dTUVER0TFPOeUUBg8ezKmnnhp2NtKvXz+ef/55LrzwQpYvX37CnTVs2bKFc845hzPOOIPFixfzk5/8hKysrIg+Z2JiIgMGDGD48OEqDNJuVBykRWpqanjwwQfZvn07FRUVfPe736W0tLTVxzUz7rvvPsaPH8/IkSN56623mm3H6CjKy8v58Y9/TE5ODgcPHmT69OlMnDiR22+/naKioljHE2mQGqSlRRITExk8eHBovm/fvmHPPRyv/v37M3fuXGpra+nZs+cJ02lfUlJSqA0HAmdJ5eXl9OvXT88mSNzST6a0SEJCAvfeey8Au3fv5qGHHiI7O5vExEQyMjJwd/bu3Yu706dPnxbdcVRYWMjmzZtJTk5mxIgRxzwnEc8qKirYs2cPW7du5Ytf/GJYO0nnzp35+c9/TkpKCoWFhfzoRz9izpw5zJkzR3caSfxqyePU8fBS9xnxoaamxpcuXepDhw51wK+//nrfv3+/b9682c8880wfMWKEr1u3zg8fPhzR8YqKivzuu+8OdQXxi1/8wisrK6P8KVqnsLDQc3JyfOPGjZ6UlOSADxs2zPPz8xvcvra21qurq72mpsarq6vbOa2c7FD3GdIeqqqq+NWvfsXOnTsBWLhwIaWlpUyePJnPPvsMgFtuuYVFixY12Kh91NG7cPbv38/8+fNDy+fNm8eUKVPi9mnpoqIiZsyYwaeffsrUqVNZtmwZNTU1VFRUUFtby+bNm+natSvdu3cPPRiYmJgYUZcYIvFAxUGOyymnnMKdd97J/PnzcXduueUWCgsLj3lKt1u3bmGXlUpLS0NPU3fq1Imrr76aSZMm0bVrV773ve/x0UcfUVVVxW233Ub37t1D+x0+fJjS0lKqqqpISkpqsuC01uHDh9mzZw/r16+npKSESy+9NDSAUVpaGunp6ZSVlfFZBhrkAAAMqklEQVT0008zYsQIzj33XMaMGUNxcTFjx47l4YcfZvz48fTu3ZsPPviAhIQEdactHY6KgxwXM+Piiy8O3bXUu3dvHnjgAX72s5/RpUsXampqeOKJJ465pl5ZWcnLL7/M1KlTAVi/fj0ff/wx1113HV//+tfp1KkTBQUFXHzxxXTq1Il7772Xm2++mS9/+cvs27ePmTNnkpqayoQJE3D34xrYqCEVFRVs3LiRF154geuvv56RI0fyzDPP8NBDDwEwYcIErrjiCu666y6++93vMnPmTBISEujTpw8ZGRm89dZboe61ly9fHmpILyoq4r333mPSpEltklOkXbXkGlQ8vNTmEL82bNjgZ555ps+YMcNXrVoV1mawZ88eP+uss0LtCh999JH36dPHL7vsMs/KyvJzzjnHU1NTfdmyZaHuvZOSknzXrl0+ZsyY0H7Tpk3zvLy8Nsu9e/fuUJtBZmamf/jhh3755ZeH3q9nz57+5ptvhubz8vL8k08+8eXLl/svf/lLz8rKCuUdMGCAL1u2LNTF+dKlS72oqKjNsoocL9TmILFy1lln8cEHH4SegK7fXnDKKadw6aWX8umnnwKwYsUKVq1axbp16+jduzc7duwgNTWV7OzsUNfetbW1HDp0KNQtOcC2bduoqqqiurr6uLsoP/rUcXFxMenp6dx55528/fbb5OTk0K9fPyZNmsS7775LbW0t06dPZ/ny5QCcc845JCUl0bNnTyZOnMiZZ56JmbFu3To2bdrE2LFjSUxMZPbs2aE7l06U5zXk5BLV7jPM7J+BJ4BE4Gl3f6ze+s7A88BooAj4trvvbOqY6j6jYyssLGT16tUkJCQwatSo0GWnkpIS5s+fz2233cb777/PfffdR1ZWFhMmTOCXv/wl69ev5/bbb6dr16689tprPPbYYzz//PMcOHCAbt260atXrxb1Srpr1y6mTp3Kj3/8Yzp16sSKFSsYM2YMixcv5t/+7d+oqqri8OHDAHTv3p28vDx27drF2LFj6du3LzU1NeTm5rJq1SoyMzMZNGjQcRcqkfbQ0u4zolYczCwR2AJ8A8gBPga+4+6f1tlmGvAld59iZjcC17j7t5s6rorDiau8vJzS0lISExMxM2pqajh06BCjRo3i+9//Prfccgt5eXn8+te/5pvf/CZr167lxRdfJDExkXfffZcRI0Zw6NAh5syZQ2pqKt/61rcwM5KSkkI9mXbq1Akzo6CggL/97W9s2bKFG2+8kfLycmbNmsXPf/5zLrjgAiorK7n11lu59957GTBgQIy/GZHWa2lxiFrbADAGWFhn/n7g/nrbLATGBKeTgEKCBauxl9ocTi6bN2/2kSNHelJSkq9cudJHjBjhgK9cufKYITJvuukmX7JkiV900UWhZTNmzPDc3FxfsmSJ9+7d23v06OFLlizxpUuX+uzZs0PbDRo0yBcsWOCrV6/2jRs3ashSOSHRwjaHaPatNBDIrjOfE1zW4DbuXguUAh3jsVhpF3369OGdd97hxRdfJD09naVLl7J9+3YGDx7MpZdeGtru6quvBmDz5s2hZampqZSUlHD//fdTVFREaWkp06ZN48iRI6xbty60XU5ODikpKVRVVR1zaahXr15x+5yFSLR1iAZpM5sMTAYYMmRIjNNIe0pLSyMtLY0RI0aErXvxxRdZv349ffv2JSMjgzfeeINHH32U22+/nS5dujB+/HhSUlJCo6ZBoP+m7Oxs7rjjDl566SX27t3L9OnT2bVrF5deeildu3blgw8+ICsri+uvv77NbpcV6Wii2eYwBnjY3S8Lzt8P4O6P1tlmYXCblWaWBOwBMryJUGpzkMYUFhZSXV1NdXU1CQkJ5Ofn069fP2pra5k5cya1tbXcd9991NbWUlxczIABA3B3EhMT6dKli7rDlhNaPA0T+jFwupkNA3KBG4Gb6m0zD7gVWAlcB3zQVGEQaUr9TuyOnmW6O7/+9a9JTEzE3XWpSCQCUSsO7l5rZncRaHROBJ51901m9giBhpF5wDPAC2a2FSgmUEBE2pSZaWhNkRaKapuDu88H5tdb9rM601XA9dHMICIiLaeR4EREJIyKg4iIhFFxEBGRMCoOIiISRsVBRETCRLVX1mgws4PA57HO0QrpBPqQ6oiUPXY6cv6OnB06dv662U9194if9OwQ3WfU83lLnvKLN2a2uqPmV/bY6cj5O3J26Nj5W5Ndl5VERCSMioOIiITpiMVhVqwDtFJHzq/ssdOR83fk7NCx8x939g7XIC0iItHXEc8cREQkyuK+OJhZLzN7z8z+HvwzrYFtTjWztWa2zsw2mdmUWGRtSIT5v2JmK4PZN5hZk+Not5dIsge3W2Bm+83s7fbO2ECWfzazz81sq5nNaGB9ZzN7Jbj+IzMb2v4pGxdB/q8Hf9Zrzey6WGRsTATZf2hmnwZ/xt83s1NjkbMxEeSfYmYbg79nlpvZWbHI2ZDmstfZ7lozczNr/g6mlowpGosX8CtgRnB6BvCfDWzTCegcnO4G7AQGxDp7C/KPBE4PTg8A8oGeHSF7cN2lwL8Ab8c4byKwDRge/JlYD5xVb5tpwFPB6RuBV2L9Pbcw/1DgS8DzwHWxztzC7BcDXYPTUzvgd59aZ3oisCDWuSPNHtyuO7AMyAIymztu3J85AFcBs4PTs4Gr62/g7tXufig425n4OiOKJP8Wd/97cDoP2AvEw7BkzWYHcPf3gYPtFaoJ5wJb3X27u1cDcwh8hrrqfqbXgEvNzNoxY1Oaze/uO919A3AkFgGbEEn2xe5eEZzNAga1c8amRJL/QJ3ZU4B4abCN5Oce4BfAfwJVkRw0nn6JNqavu+cHp/cADQ7qa2aDzWwDkE3gf7h57RWwGRHlP8rMziVQ/bdFO1gEWpQ9Dgwk8Pd/VE5wWYPbuHstUAr0bpd0zYskf7xqafbbgf+LaqKWiSi/mX3fzLYROKu+u52yNafZ7GY2Chjs7u9EetC4eELazBYB/RpY9dO6M+7uZtZgtXb3bOBLZjYA+IuZvebuBW2fNlxb5A8epz/wAnCru7fL/wzbKrtIpMzsZiATGBfrLC3l7v8F/JeZ3QT8B4FhjuOamSUAM4FJLdkvLoqDu49vbJ2ZFZhZf3fPD/7y3NvMsfLM7BPgQgKXDaKuLfKbWSrwDvBTd8+KUtQwbfndx4FcYHCd+UHBZQ1tk2NmSUAPoKh94jUrkvzxKqLsZjaewH88xtW5FBwPWvrdzwH+ENVEkWsue3fgn4AlwSuo/YB5ZjbR3Vc3dtCOcFlpHv+ozrcCb9bfwMwGmVlKcDoNGEv8dM4XSf5OwJ+B5929XQpahJrNHmc+Bk43s2HB7/RGAp+hrrqf6TrgAw+21sWBSPLHq2azm9lXgf8BJrp7vP1HI5L8p9eZvQL4ezvma0qT2d291N3T3X2ouw8l0N7TZGE4umNcvwhcD36fwF/EIqBXcHkm8HRw+hvABgKt9BuAybHO3cL8NwM1wLo6r690hOzB+Q+BfUAlgeudl8Uw8+XAFgJtNj8NLnsk+I8BoAvwKrAVWAUMj/X33ML85wS/43ICZzybYp25BdkXAQV1fsbnxTpzC/M/AWwKZl8MnB3rzJFmr7ftEiK4W0lPSIuISJiOcFlJRETamYqDiIiEUXEQEZEwKg4iIhJGxUFERMKoOIgEmVlZK/Z9Kdgr5idm9qyZJQeXTzKzfcGePNeZ2fN19vmRmW0OLv/YzL7bFp9DpC2oOIi0jZeAM4AvAinAHXXWveLuXwm+vguB7p8JPJ9zrrt/hUDPtvHSAaCIioNIfRbw6+BZwEYLjq9hZglm9t/B/+2/Z2bzj46p4O7zPYjAw3XN9Tj6ADDVgz19uvsBd5/dzD4i7SYu+lYSiTPfAr4CfBlIBz42s2XABQTGUzgL6AN8Bjxbd8fg5aRbgOl1Fn/bzMYGp58AXge6u/v2KH4GkVZRcRAJNxZ42d0PAwVmtpRAtxVjgVc90GPuHjNb3MC+/w0sc/cP6yx7xd3vOjoT7GRRJK7pspJIGzGzhwgM0vTDprYLXkoqM7Ph7RJM5DioOIiE+5DApaBEM8sAvk6gHWEFcG2w7aEvcNHRHczsDuAy4Dse2VgcjxIYFyA1uH833a0k8USXlUTC/RkYQ6CXXwfuc/c9ZvY6gbuKPiUw8tZaAiPJATwF7AJWBvvMf8PdH2niPf5AYLzzj82shkCvvI9H4bOIHBf1yirSAmbWzd3LzKw3gbOJC9x9T6xzibQ1nTmItMzbZtaTwDjfv1BhkBOVzhxERCSMGqRFRCSMioOIiIRRcRARkTAqDiIiEkbFQUREwqg4iIhImP8fCD9WUPYbeOAAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "test.plot_volcano(corrected_pval=True, min_fc=1.05, alpha=0.05, size=20)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`plot_vs_ttest()` shows the correlation between t-test p-values and the wald test p-values" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "scrolled": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEKCAYAAAD9xUlFAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzt3Xt0nOV17/HvntFtJMuWsGUDlsFADYnqmoAVCLBOQkIuJOHgJpCEiyFwiDH40KRpwyFdqRtWOD0NNWmapBBsEiBAKKEQGp+E1qQUlx5uRY4bB9wYzNUyEAnZ8kWSNRq9+/wxF0bSSBrZmvvvs5YXc3k1el582XqevZ/9mLsjIiICECr0AEREpHgoKIiISIqCgoiIpCgoiIhIioKCiIikKCiIiEiKgoKIiKQoKIiISIqCgoiIpFQVegBTNWfOHF+4cGGhhyEiUlI2bdr0tru3THZdyQWFhQsX0tHRUehhiIiUFDN7LZvrtHwkIiIpCgoiIpKioCAiIikKCiIikqKgICIiKTkLCmZ2u5l1mdlz47xvZvZdM9tuZlvM7ORcjUVERLKTy5nCncDZE7z/cWBR4teVwPdzOBYRkZIUBE73vkF27u6ne98gQZDb0zJztk/B3R83s4UTXLIMuMvj54E+bWZNZnaEu7+ZqzGJiJSKWCxgV3+Urn2DXHXPJjp3D9DaHOG2S9s5YV4joZDl5PsWMqcwH9iR9rwz8doYZnalmXWYWUd3d3deBiciUihDQ8Ps3DPA3gMxuvcN0jKjFoDO3QOsuKuDnr5ozr53Sexodvd1wDqA9vb23M6dREQKJAic3oEob/YeYGXa7ODG85Zw04ZtbN7RS+fuAaKx4ZyNoZAzhZ3AgrTnrYnXREQqShA4XfsO8Pqufnb1DaUCAsRnB9c9uIWrzjwOgNbmCDVV4ZyNpZBBYT1waaIK6X3AHuUTRKTSBIGz7Xf7+PQtT3LmTRvp7Y+mAkJS5+4BmiLVqZzC7IaanI0nZ8tHZvb3wJnAHDPrBL4OVAO4+63Aw8AngO1AP3B5rsYiIlJsgsDp6YsSjQ2z4q6OVCDo6YvS2hwZERhamyMc2RThp1efzpwZtTlLMkNuq48unOR9B/5nrr6/iEixSs4OVtzVwbc+c+KIAHDrxpe48bwlXPfgllROYe3ypRzeWEt1de6WjZJKItEsIlJOevqiqdlB78DQiJnB5h29/OjJV7jz8lOoChn1tWHmNOR2dpBObS5ERPIsGhtOBYHkzKC1OQLEl4q+dNbxHNZQzVGH1TO3sS5vAQE0UxARybuaqnBqdrB5Ry83bdjGDcsWc9zcGUSqw8xuqMlrIEinmYKISJ7NbqjhtkvbU7OD7v2DHD6rjtamCC2N+VsqykQzBRGRHEivLqqpGvnTfyhknDCvkYdWnZHx/UJSUBARmWbp1UXj9SwKhYyWxtoCj3QsLR+JiEyz9OoiyE/PoumioCAiMs3Sq4uSct2zaLooKIiITLNkdVG6XPcsmi4KCiIiB2Giw29GVxflo2fRdFGiWURkCoLAebtvkP7BYV55u4/vPvoi3fsHRySSi7m6aDIKCiIiWcpUVZQ862DFXR08tOqMVEVRsVYXTUbLRyIiWcpUVZQ866BUEsmT0UxBRGQcozegjVdVlDzroBQSyZNRUBARySDTUtG9Xzg141kH/dHhkkkkT0bLRyIiGWRaKvrfv9jK2kuWjqgqWrt8KScumDVit3Ip00xBRISxS0VBEIxZKnpkaxc3LFtcklVF2VJQEJGKNzQ0zAtd+1l5z6Z3Tju7ZCkfbZvLI1u7Ute1NkcIhUIlWVWULS0fiUhFi8UC3th7IBUQIL5UtPLuTfz5J9tKcgPaodBMQUQqWtf+Qbr3DWasKgqHrKyXijJRUBCRijY0HNDTF81YVVRTFS7rpaJMtHwkIhVhvF5F1eEQD27aMeac5LXLl5b9UlEmmimISNmb6NCbuTNq+eJZx/PdR19g9TltzG6ooaWxliNn1pX9UlEmmimISNmb6NCbqqoQ75rXyPXnLubdhzdyZFOE+bMiVFeX/u7kg6GZgoiUreTeg/5obMJDb6qqQhzZFMn0ERVHMwURKUvJJaNP3fIEv31rX8keepNvCgoiUpbSl4xu3fjSmERyJew5OBhaPhKRspTe0XTzjl5u2rCN1ee08e7DG4nUVFXEnoODoZmCiJSl0eckb97Ryw0/30qkpoqWxloFhHEoKIhIySrXc5ILKafLR2Z2NvAdIAz8wN2/Oer9o4AfAU2Ja77q7g/nckwiUh4m2ntQ6uckF1LOZgpmFgZuBj4OtAEXmlnbqMv+HLjf3U8CLgBuydV4RKQ8JGcHb+4ZGHfvQVLynOT5zfVaMspSLpePTgG2u/vL7h4F7gOWjbrGgZmJx7OAN3I4HhEpcellpp27BybceyAHJ5fLR/OBHWnPO4FTR11zPfCImf0R0AB8OIfjEZESlH74jZnx7V9uo3P3AL0DQ+M2sZODV+hE84XAne7eCnwCuNvMxozJzK40sw4z6+ju7s77IEWkMNJnBmfc+BifXfsUnz/9GE5a0KS9BzmSy5nCTmBB2vPWxGvprgDOBnD3p8ysDpgDdKVf5O7rgHUA7e3tjohUhEw9i657cAurz2lj5d2buGnDNm5Ytpjj5s4gUq1E8nTI5UzhWWCRmR1jZjXEE8nrR13zOnAWgJm9G6gDNBUQEWDkBrSkzt0DqdlA9/5BDp9VR2tTRInkaZKzmYK7x8zsGmAD8XLT2939eTP7BtDh7uuBPwVuM7MvE086X+bumgmIVKj0/EFNVZhITThj3uDIpghPXPdBlZnmgJXav8Ht7e3e0dFR6GGIyDQbb99BbVWIS2//j4x7ESR7ZrbJ3dsnvU5BQUSKQfe+wVSpaVJrc4Sfrjodw7QB7RBlGxTUEE9EisJ4+YOhWMD85voCjaryFLokVUQqzHj9ikY3sAPtOygEBQURyZvR+w4+dcsTbPvdPoLA1cCuSCinICJ5M17e4KFVZ9DSWDum+kj5g+mjnIKIFFwQOL0DUQaiwwy7U2VGy4zaEUEhvV9RsoGdFI6CgojkRBA4r/b08bu9B7j2gS2pktJvf/ZE/s/Dv2Xzjl5AeYNio5yCiORET1+U13r6UwEB4rOCL9//a7541iJAeYNipJmCiORENDZMfU04Y5npcXNnaEdykVJQEJFDlilBXFMVpj86nLFNRaQ6rNxBkdLykYgckvHKTJsj1Rw9u54156u9dSlRSaqIHJKJykxnN9SkVR9BXXWIOQ3qZloIKkkVkbwYrz1FNDZMKGQc1lAbP1dRSoKWj0TkkKg9RXlRUBCRQ6L2FOVFy0cickhCIeOEeY08tOoMtacoAwoKInLI1J6ifGj5SEREUhQUREQkRUFBRERSlFMQqXCxWED3/kGiwwHhkBGpCdEc0QazSqWgIFLBYrGA3/5uH1fdsynV2nrN+UuYNzPGwtkNYwKDDsEpf1o+EqlgXfsHUwEB4juRr31gC6/19NPTFx1x7URHaUr5UFAQqWBDw0HGFhX1NeHUaWhJPX1RVtzVMSKArLirY0zwkNKmoCBSwarDoYwtKvqjw2PaVEzU40jKh4KCSAUIAqd73yA7d/fTvW8wteQzd0Ytty5fOqJFxZrzl3D07PoxbSrU46gyqHW2SJlL5gKSSz/J3kQnzGskFLJU9dHQcEBoguqjyT5Hilu2rbMVFETK3ETnHUy1NYWqj0qXzlMQEWB6cwHqcVT+lFMQKXPKBchUKCiIlDmddyBTkdPlIzM7G/gOEAZ+4O7fzHDNZ4HrAQd+7e4X5XJMIuVmsnV+nXcgUzHpTMHMvpTNaxmuCQM3Ax8H2oALzaxt1DWLgD8DznD33wf+OMtxi1S8WCzgjd4BduzuZ8/AEN/5lxfH3WWczAXMb66npVF9jWR82SwffT7Da5dl8XWnANvd/WV3jwL3ActGXbMCuNnddwO4e1cWnytS8ZI9iz679ik+sGYjl93xHyw/7WhOP3a2dhnLIRk3KJjZhWb2f4FjzGx92q+NwK4sPns+sCPteWfitXTHA8eb2RNm9nRiuSnTWK40sw4z6+ju7s7iW4uUt0w9i1b9+FeseP+x2mUsh2SinMKTwJvAHOBbaa/vA7ZM4/dfBJwJtAKPm9kfuHtv+kXuvg5YB/F9CtP0vUVKxui8AXjGMtNwyFRZJIdk3KDg7q8Br5nZh4EBdw/M7HjgXcBvsvjsncCCtOetidfSdQLPuPsQ8IqZvUA8SDw7hXsQKWuZdhKvXb6Uj7bN5ZGt76y4tjZHqA6HuPcLp9IcqS7giKWUZZNTeByoM7P5wCPAJcCdWXzds8AiMzvGzGqAC4D1o675R+KzBMxsDvHlpJezGrlIhcjUnXTlPZv42ifbRpSZ3nLxyXzv0Re56AfP8GL3frW0loOSTUmquXu/mV0B3OLuf21m/znZF7l7zMyuATYQL0m93d2fN7NvAB3uvj7x3kfNbCswDFzr7j0Hfzsi5SF9uWjYMy8VVYWM+1eextBwwNCws+7fXuL+TZ0ArLir46DaWIhkFRTM7DTgYuCKxGtZLVi6+8PAw6Ne+4u0xw78SeKXiDB2ueiOy95La3NkTO+imqowLY217NzdzwfWbBzxGUo2y8HKZvnoj4nvJXgo8ZP+scBjuR2WSGVJb2391t4DfPuX21JB4LuPvsia85eMuyNZbSxkOmXdJdXM6t29P8fjmZS6pEq5yZRIvvG8Jdy0YRubd8QL8U5a0MTfXXQSwJgdyWppLdmYti6piaWjHwIzgKPM7ERgpbuvOvRhikimRPJ1D25h9TltrLx7EwDd+wdTy0WjqY2FTKdscgp/C3yMROWQu//azN6f01GJlLHRew6CIPM5ycnloWwa2KmltUyXrBriufsOsxE/dSiDJXIQMu45uCTznoMjmyI8cd0H9ZO/5FU2QWGHmZ0OuJlVA18C/iu3wxIpTxn3HNy9iXu/cCpb39w3Iidw+Mw6BQLJu2yCwlXE21/PJ74j+RFA+QSRgzDeKWjhkCknIEUhm6BwgrtfnP6CmZ0BPJGbIYmUr2T56Hh7DkQKLZt9Ct/L8jURSQgCp2vfAV7f1cfO3f3s6hskCFynoEnRG3emkChFPR1oMbP0HcczyXJHs0glypRMXnP+EubNrGPh7AaVj0pRm2imUEN8b0IV0Jj2ay9wfu6HJlJ6gsB5a++BMcnkax/Ywms9/fT0RXUKmhS1iVpn/xvwb2Z2Z6KNtohMIDlD6BuMZUwm19eE1Y9Iit6kOQUFBJGJJfsWvblnIHUUZqZeRP3RYfUjkqKXTaJZRMaRnB186pYn6Nw9QOfuAW7d+BI3njeygd2a85dw9Ox6JZSl6GW1o1lEMkvfjNY7MERrc4TNO3q5acM2Vp/TxuyGGo6YVUekJkxTRAllKX4TVR99Dxi3haq7fzEnIxIpUqN7Fs1uqBmxGS05Q7juwS1s3tHLDT/fym2XtnPErIiCgZSMiWYKyf7UZwBtwE8Szz8DbM3loESKzXjtqefNrE1tRkvOEG5Ytpjj5s4gUq1yUyk94+YU3P1H7v4jYAlwprt/z92/B5wFvCdfAxQpBpl6Fq24q4NY4CM2o3XvH+TwWXW0NkVUbiolKZucQjPxDWu7Es9nJF4TKWvpy0UALTNqR5Sadu4eYCgWaDOalJVsgsI3gc1m9hhgwPuB63M5KJFCCgLn7b5B+geHeeXtPr776It07x9kzflL+Ot/fuc0tGTPIp1lIOUkm30KdwCnAg8BPwVOSywriZSdZO7g07c8yZk3bWT1z57jKx87gZYZtVz7wBa+eNYiQD2LpHxNVH108qiXdiT+e6SZHenuv8rdsEQKY7KjMY+bO0MH30hZm2j56FsTvOfAh6Z5LCIFN955B02RalqbI0Sq1eJayttEvY8+mM+BiBSD8c476I8Oa7lIKkJWO5rNbDHxvQp1ydfc/a5cDUok1zJtRAuFLHXewYgzlJcv5YimOu1IloowaVAws68DZxIPCg8DHwf+H6CgICVpvI1oJ8xrJBQylZhKRcumId75xDesveXulwMnArNyOiqRaZbsZLpzd3/G8w6S3U0BnXcgFS2boDDg7gEQM7OZQBewILfDEpke7xyL2c9zO/dwzb2beaN3IGMyWWcdiGSXU+gwsybgNmATsB94KqejEpkGmZaJbjxvCQeGhjMmk3XWgUh2m9dWuXuvu98KfAT4fGIZSaRojXcs5nUPbiEcsjHnHaiySCQum0Tz3cDjwL+7+2+n8uFmdjbwHSAM/MDdvznOdecBDwDvdfeOTNeIZGuyYzFDZtzxxMvcv/I03F3JZJE02eQUbgeOAL5nZi+b2YNm9qXJvsjMwsDNxKuV2oALzawtw3WNwJeAZ6Y0cpFxJHclT3Qs5pc/cgKHz6xTMllklGyWjx4D/hJYTTyv0A5cncVnnwJsd/eX3T0K3Acsy3DdDcCNwIFsBy0ykeSu5EzHYq5dvpQTF8xKlZ+KyEjZLB89CjQQTy7/O/Elnq4sPns+7/RLAugk3lgv/bNPBha4+y/M7NqsRy0ygeSu5NHHYh7ZFOHwmXUKBiITyGb5aAsQBRYTP3BnsZlFJv6SyZlZCPgb4E+zuPZKM+sws47u7u5D/dZS5pK7kpOB4Yafb6WhtkoBQSQL5j7uMcwjL4yv/V8GfAU43N0n7ApmZqcB17v7xxLP/wzA3f8q8XwW8BLxEleAw4kf5HPuRMnm9vZ27+hQLlomNl4bC5FKZWab3L19suuyWT66BvhvwFLgVeKJ53/PYgzPAovM7BhgJ3ABcFHyTXffA8xJ+z4bga+o+kimgw6+ETk42WxeqyO+zLPJ3WPZfrC7xxIBZQPxktTb3f15M/sG0OHu6w9qxCIikjNZLx8VCy0fiYhM3bQtH4kUgnICIoWhoCBFJxYL2Na1j5V3b8rY2lpEciebklSRvAkC5409A6mAAGNbW4tI7igoSNFINrGLBc7qc9o4aUFT6j21thbJDy0fSVEYr831TRu2sXlHr1pbi+SJZgpSFJJN7Ea3ub7qzOPiPYsuWarW1iJ5oJmCFIVkE7t0nbsHWDR3Bvd+4VSOnBVRklkkDzRTkKKQbGKXrrU5Ql11mNbmeqqq9EdVJB/0N03yIgic7n2D7NzdT/e+QYJg5KbJ9CZ28M5paGpiJ5JfWj6SnMuURB697yAUMk6Y18hDq87QhjWRAtJMQXIuUxI5076DZBM7nYYmUjgKCpJz4yWRte9ApPgoKEjOjZdE1r4DkeKjoCA5N14SWfsORIqPEs1yyCbraKokskjpUFCQgxYEztv7BxkYGiZw5609B7jjiVf48kdOGNPRVCehiZQGLR/JlAWB09s/yH+9uZdPf/9JPrBmI5f88D8AWPXB3+Pbv9ymjqYiJUpBQaYkCJxXe/rY1TfEyntGtre+9oEt7O4b4rylC1RZJFKitHwkU9LTF+W1nn4a66oylpnW14RpDFWpskikRGmmIFMSjQ1TXxOmpy+ascy0PzrM3MZaVRaJlCgFBZmSmqow/dFhHty0gxvPWzKizPSWi09mwWERdTQVKWFaPpIpmd1Qw9Gz67n8jGO444lXWH1OG7MbamhprGVWpIqZdSo1FSllCgoyJaGQsXB2A0311Xz9v/8+ww511SHmNKhXkUg5UFCQKQuFjMMaaqGh0CMRkemmoCCT7kgWkcqhoFDhsjnrQEQqh6qPKlQsFvBG7wA7dvdTHQ5x+rGzgfHPOhCRyqCZQgWKRmNs6+7j6sSO5GQ5KcD9mzp11oFIBdNMocIMDQ3T3RdNBQSIzw5W/fhXrHj/sYDOOhCpZAoKFSQInBe69jMYCzK2qAiHTGcdiFS4nAYFMzvbzLaZ2XYz+2qG9//EzLaa2RYze9TMjs7leCpREDhd+w7w+q4+3twzwHcefYHhwDO2qKitCvHQqjOUZBapYDnLKZhZGLgZ+AjQCTxrZuvdfWvaZZuBdnfvN7Orgb8GPperMVWaTJVFN563hH/+zZvccvHJrPrxr1Kvf3/5UuY11lFVpcmjSCXLZaL5FGC7u78MYGb3AcuAVFBw98fSrn8aWJ7D8VScnr5oKiBAfInouge3sPqcNu556jXuuOy9hENGbVWIloYaBQQRyeny0XxgR9rzzsRr47kC+KccjqfiRGPDGXMHsxtquH9TJ5ff+SwD0WHmzqilpkaFaCJSJCWpZrYcaAc+MM77VwJXAhx11FF5HFlpq6kK09ocGREYWpsjNNXX8Pj/+iCRau1eFpGRcjlT2AksSHvemnhtBDP7MPA14Fx3H8z0Qe6+zt3b3b29paUlJ4MtR7Mbarjt0vYR7a3XnL+EkEFrU4SWRjWxE5GRcjlTeBZYZGbHEA8GFwAXpV9gZicBa4Gz3b0rh2MpWxP1LQqFjBPmNfLTVadzYCggbBCpCdMU0exARDLLWVBw95iZXQNsAMLA7e7+vJl9A+hw9/XAGmAG8A9mBvC6u5+bqzGVkyBwegeivNl7IHVWcqa+RaGQMbexrsCjFZFSYe5e6DFMSXt7u3d0dBR6GAWVLDV9a88BVv/suTE5g4dWnUFLY20BRygixcbMNrl7+2TXqQaxBCVLTetrwhmri9S3SEQOloJCCUqWmvYODGXcmay+RSJysBQUSlCy1PTWjS9x43lLRlQXqW+RiByKotinIGNNVFWULDVdcVcHN23Yxg3LFnPMnAbqa8M6K1lEDomCQhGa7DS0ZKnpQ6vO0BGaIjKttHxUhDL1LBp9GlooZLQ01jK/uV6b0ERk2igoFKHxehapqkhEck1BoQglE8npVFUkIvmgoFCEMvUsUlWRiOSDEs15lmxPMRAdZtiduuqxFUNKJItIoSgo5FEQOK/29PG7vQe49oEt4/YrgncSySIi+aTlozzq6YvyWk9/KiBA5soiEZFC0Uwhh0ZvQAuCQP2KRKSoaaaQI0NDw+zY3c9rPX0898ZevvbQFt7ui+KgyiIRKVoKCtMsCJw9A4Ns69rPxT94hvNvfYobfr6Vz59+DN/5lxc4+rD46WeqLBKRYqTzFKZRLBbw5t4DmMEF654ec87B6nPaWHzkTCI14UT1EdRVh9SvSERyLtvzFJRTmAZB4LzdN0jfYIxX3+6nqb46Y95gdkMNNVVhDmuohYYCDVZEZAIKCocoFgvY1rWPlXe/cyTmXf/jFFqbI2NmCi2NtVomEpGippzCQYrFAt7oHWDnngG69g7SMiO+p6Bz9wDf/Kf/4uaLTh6RN7h1+VKOnFmnZSIRKWqaKRyEaDRGV1+UaCxgOHCefqmbr3zsBG7asI3NO3p5ZGsXf/ShRdywbDHHtjQQDhnzZtRSXa0KIxEpbgoKUzQ0NMy27j6uvued5aJbLj6ZX/x6J1edeRwr795Ea3OEt/dHaWmsZUZdmOaIEskiUhoUFLIUBM7b+weJDgepgADx5aJVP/4Vd1z2Xnb1Rd9ZKmqqoymifkUiUlqUU8hC8iS0T3//SaKxIGNlUThkHNkU4d4vnMq75jVymMpMRaQEaaYwgfSOpn2DMVaf05bakTy6sqimKsSM2jAz6zQ7EJHSpZlCBrFYQM/+A7y1d4Cduwf43LqnUzuTh4aH+f7FIyuLvr98KXMbamiq1+xAREqbdjSnCQJnz4FB3t4/xEB0mJ79UVb/7Lkxs4KbLzqJhtpqqsOmyiIRKQnZ7mjWTCEhmTfo2R+jc1c8eTxeR9OhYWcgGqMmbBzeWKeAICJlQ0GBeEB4a+8B+gZj1FaFUm0qegeGMnY0PWJWHfObI8ybGaGqSv8LRaR8VHSiORYL2NUfpWvfIFfdM7ZNxa0bX+LG85Zw3YMjT0k7YlZEuQMRKUsVGxRisYDf/m4f3fsGR+QNkm0qbrn4ZFb9+FfctGEbNyxbzMI5DTTUhJkzQ8lkESlfFRUUYrGArv2DDA0HVIWMq+7ZxLc+c+KYvMEjW7v4+rm/z31Xvo/hwIlUKxiISGXI6YK4mZ1tZtvMbLuZfTXD+7Vm9pPE+8+Y2cJcjSU5M/js2qf4wJqNDCY2oY2XN8ChvibMguZ65qqRnYhUiJwFBTMLAzcDHwfagAvNrG3UZVcAu93994BvAzfmajy7+qN07xvkW585kbWXLCUcshF5g/R9B2svWcoRsyLalSwiFSeXy0enANvd/WUAM7sPWAZsTbtmGXB94vEDwN+Zmfk0b56IxQK60nIHrc0R/vZz7+GOy9q5/M6OVN7g6Nn1VIdDHKGZgYhUqFwGhfnAjrTnncCp413j7jEz2wPMBt6ezoF07X+nugjiyeQ//sl/8ncXnsT9V76PWOCEQkakJqSOpiJS0Uoi0WxmVwJXAhx11FFT/vqh4cxN7GbV1zC3sU57DUREEnL5r+FOYEHa89bEaxmvMbMqYBbQM/qD3H2du7e7e3tLS8uUB1IdDmVMJtdVhRQQRETS5PJfxGeBRWZ2jJnVABcA60ddsx74fOLx+cC/Tnc+AWDujFpuXb50zPGYySM0RUQkLmfLR4kcwTXABiAM3O7uz5vZN4AOd18P/BC428y2A7uIB45pV1UV4l3zGrl/5WnEhgOqwiHmzqjVLEFEZBR1SRURqQDqkioiIlOmoCAiIikKCiIikqKgICIiKQoKIiKSUnLVR2bWDbx2CB8xh2luo1HkKu1+QfdcKXTPU3O0u0+6+7fkgsKhMrOObMqyykWl3S/oniuF7jk3tHwkIiIpCgoiIpJSiUFhXaEHkGeVdr+ge64UuuccqLicgoiIjK8SZwoiIjKOsgwKZna2mW0zs+1m9tUM79ea2U8S7z9jZgvzP8rplcU9/4mZbTWzLWb2qJkdXYhxTqfJ7jntuvPMzM2s5CtVsrlnM/ts4vf6eTO7N99jnG5Z/Nk+ysweM7PNiT/fnyjEOKeLmd1uZl1m9tw475uZfTfx/2OLmZ08rQNw97L6RbxN90vAsUAN8GugbdQ1q4BbE48vAH5S6HHn4Z4/CNQnHl9dCfecuK4ReBx4Gmgv9Ljz8Pu8CNgMNCeezy30uPNwz+uAqxOP24BXCz3uQ7zn9wMnA8+N8/4ngH8CDHgf8Mx0fv9ynCmcAmx395fdPQrcBywbdc0y4EeJxw8AZ5lZKR/MPOk9u/tj7t6fePpfbt9tAAAEAElEQVQ08ZPwSlk2v88ANwA3AgfyObgcyeaeVwA3u/tuAHfvyvMYp1s29+zAzMTjWcAbeRzftHP3x4mfLzOeZcBdHvc00GRmR0zX9y/HoDAf2JH2vDPxWsZr3D0G7AFm52V0uZHNPae7gvhPGqVs0ntOTKsXuPsv8jmwHMrm9/l44Hgze8LMnjazs/M2utzI5p6vB5abWSfwMPBH+RlawUz17/uU5OzkNSlOZrYcaAc+UOix5JKZhYC/AS4r8FDyrYr4EtKZxGeDj5vZH7h7b0FHlVsXAne6+7fM7DTipzkudveg0AMrReU4U9gJLEh73pp4LeM1ZlZFfMrZk5fR5UY294yZfRj4GnCuuw/maWy5Mtk9NwKLgY1m9irxtdf1JZ5szub3uRNY7+5D7v4K8ALxIFGqsrnnK4D7Adz9KaCOeI+gcpXV3/eDVY5B4VlgkZkdY2Y1xBPJ60ddsx74fOLx+cC/eiKDU6ImvWczOwlYSzwglPo6M0xyz+6+x93nuPtCd19IPI9yrruX8lmu2fzZ/kfiswTMbA7x5aSX8znIaZbNPb8OnAVgZu8mHhS68zrK/FoPXJqoQnofsMfd35yuDy+75SN3j5nZNcAG4pULt7v782b2DaDD3dcDPyQ+xdxOPKFzQeFGfOiyvOc1wAzgHxI59dfd/dyCDfoQZXnPZSXLe94AfNTMtgLDwLXuXrKz4Czv+U+B28zsy8STzpeV8g95Zvb3xAP7nESe5OtANYC730o8b/IJYDvQD1w+rd+/hP/fiYjINCvH5SMRETlICgoiIpKioCAiIikKCiIikqKgICIiKQoKIhmYWZOZrRrnvT80s7aD/Nz3lHoXTylvCgoimTUR76abyR8S78Z5MN5DvMZcpChpn4JIBmaW7Ma5Dfilu1+beP104OfEmyjuAc5LfMnNQAvxzUQr3P23ZvYZ4huPhhPXfpj4hqMI8bYEf+XuP8nbTYlkQUFBJIPEwUs/d/fFGd67M/HeA4nnjwJXufuLZnYq8X/sP2RmvwHOdvedZtbk7r1mdhnxcx2uyde9iExF2bW5EMknM5sBnM477UMAahP/fQK408zuB35agOGJTJmCgsgkzOwvgU8CuPt7Rr0dAnozvI67X5WYOXwS2GRmS3M+WJFDpESzSGb7iLffxt2/5u7vSfuHP/29vcArifxB8vzcExOPj3P3Z9z9L4h37VyQ/rUixUhBQSSDRGfRJ8zsOTNbM+rt+4BrEwfFHwdcDFxhZr8Gnued4yLXmNlvEgewP0n8fOHHgDYz+08z+1x+7kYke0o0i4hIimYKIiKSoqAgIiIpCgoiIpKioCAiIikKCiIikqKgICIiKQoKIiKSoqAgIiIp/x/wC02p5VpcPAAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "test.plot_vs_ttest()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Vary the test" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Diffxpy supports Welch's t-tests, rank sum tests, Wald tests (as above) and likelihood ratio tests." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Welch's t-test" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For t-tests and rank sum tests, the `grouping` argument indicates the the name of the column in sample description or adata.obs which contains two groups, ie. entries which come from a unique set of length two." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "test_tt = de.test.t_test(\n", " data=data,\n", " grouping=\"condition\"\n", ")" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "sns.scatterplot(\n", " x=test.log10_pval_clean(),\n", " y=test_tt.log10_pval_clean()\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Rank sum test" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "test_rank = de.test.rank_test(\n", " data=data,\n", " grouping=\"condition\"\n", ")" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "sns.scatterplot(\n", " x=test.log10_pval_clean(),\n", " y=test_rank.log10_pval_clean()\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Likelihood ratio test" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In a likelihood ratio test (LRT), one specifies a null (reduced) and an alternative (full) model. The difference set of coefficients of both models is tested. The LRT requires 2 models to be fit rather than one in the Wald test and therefore tends to be slightly slower." ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [], "source": [ "#test_lrt = de.test.lrt(\n", "# data=data, \n", "# full_formula_loc=\"1+condition\",\n", "# reduced_formula_loc=\"1\"\n", "#)" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [], "source": [ "#sns.scatterplot(\n", "# x=test.log10_pval_clean(),\n", "# y=test_lrt.log10_pval_clean()\n", "#)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Two-sample wrapper" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For the special case of two group comparisons, one can also easily toggle between tests using the `two_sample wrapper`." ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "scrolled": true }, "outputs": [], "source": [ "test_2s = de.test.two_sample(\n", " data=data, \n", " grouping=\"condition\",\n", " test=\"t_test\"\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This yields exactly the same as calling t-test twice:" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "sns.scatterplot(\n", " x=test_tt.log10_pval_clean(),\n", " y=test_2s.log10_pval_clean()\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Inclusion of size factors" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "One can also use pre-computed size factors in diffxpy by supplying them to the test function." ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "size_factors = np.random.uniform(0.5, 1.5, (sim.x.shape[0]))" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "I1101 08:29:55.117454 4648003008 estimator.py:51] training strategy:\n", "{'max_steps': 1000, 'update_b_freq': 5}\n" ] } ], "source": [ "test_sf = de.test.wald(\n", " data=data,\n", " formula_loc=\"~ 1 + condition\",\n", " factor_loc_totest=\"condition\",\n", " size_factors=size_factors\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And results can be retrieved as beford. Note that the results differ now as we imposed size factors without changing the data:" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "sns.scatterplot(\n", " x=test.log10_pval_clean(),\n", " y=test_sf.log10_pval_clean()\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Inclusion of continuous effects" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "One can also regress out size factors. Alternatively one can account for other continuous effects such as time, space or concentration. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We also provide a separate tutorial for continuous covariate modelling in the notebook \"modelling_continuous_covariates\". Please consider this section here a short introduction and refer to the dedicated tutorial for further information." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Numeric covariates" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Firstly, you have to indicate that you are supplying a continuous effect if you want to do so. We will otherwise turn it into a catgeorical effect and this will not produce the desired results. We do this so that we can make sure that there are no errors arising from numeric and catgeorical columns in pandas DataFrames. Here, we add the size factor into the anndata object to make it accessible to the model:" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "data.obs[\"size_factors\"] = size_factors" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "I1101 08:29:58.174185 4648003008 estimator.py:51] training strategy:\n", "{'max_steps': 1000, 'update_b_freq': 5}\n" ] } ], "source": [ "test_regressed_sf = de.test.wald(\n", " data=data,\n", " formula_loc=\"~ 1 + condition + size_factors\",\n", " factor_loc_totest=\"condition\",\n", " as_numeric=[\"size_factors\"]\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Again, this gives different results to using size factors to scale to model only:" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "sns.scatterplot(\n", " x=test_sf.log10_pval_clean(),\n", " y=test_regressed_sf.log10_pval_clean()\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Spline basis transformation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It may be desirable to not fit a linear trend to a continuous covariate but to allow smooth trends in this covariate, such as smooth trends of total counts, time, space or concentration. This can be solved by using a spline basis space representation of the continuous covariate. Diffxpy does this automatically in a separate wrapper `continuous_1d()`:" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "scrolled": true }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "I1101 08:30:00.283493 4648003008 estimator.py:51] training strategy:\n", "{'max_steps': 1000, 'update_b_freq': 5}\n" ] } ], "source": [ "test_spline_sf = de.test.continuous_1d(\n", " data=data,\n", " formula_loc=\"~ 1 + condition + size_factors\",\n", " formula_scale=\"~ 1\",\n", " factor_loc_totest=\"condition\",\n", " continuous=\"size_factors\",\n", " df=4,\n", " quick_scale=False\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The spline model has more degrees of freedom (df=4 means 4 degrees of freedom) to fit the expression trend of each gene as a function of the size facotr than the simple linear model (1 degree of freedom) had. Accordingly, the p-values change again:" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "sns.scatterplot(\n", " x=test_regressed_sf.log10_pval_clean(),\n", " y=test_spline_sf.log10_pval_clean()\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Testing a multiple coefficients with a Wald test" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We know turn to tests that cannot be performed with T-tests or rank sum tests because they involve more than two groups (or more general: multiple coefficients)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Generate data:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We now simulate not only two conditions but four conditions, which results in 3 coefficients to be tested: Note that the first group is absorbed into the intercept as is standard in generalized linear models." ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Transforming to str index.\n" ] } ], "source": [ "from batchglm.api.models.tf1.glm_nb import Simulator\n", "\n", "sim = Simulator(num_observations=200, num_features=100)\n", "sim.generate_sample_description(num_batches=0, num_conditions=4)\n", "sim.generate_params(\n", " rand_fn_loc=lambda shape: np.random.uniform(-0.1, 0.1, shape),\n", " rand_fn_scale=lambda shape: np.random.uniform(0.1, 2, shape)\n", ")\n", "sim.generate_data()\n", "\n", "data = anndata.AnnData(\n", " X=sim.x,\n", " var=pd.DataFrame(index=[\"gene\" + str(i) for i in range(sim.x.shape[1])]),\n", " obs=sim.sample_description\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Run differential expression test" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can now choose whether we want to collectively test all coefficients of the condition factor or whether we test the significance of a selected set of coefficients." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Test a whole factor" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "scrolled": true }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "I1101 08:30:21.557281 4648003008 estimator.py:51] training strategy:\n", "{'max_steps': 1000, 'update_b_freq': 5}\n" ] } ], "source": [ "test_fac = de.test.wald(\n", " data=data,\n", " formula_loc=\"~ 1 + condition\",\n", " factor_loc_totest=\"condition\"\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Again, we can look at results like before:" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
genepvalqvallog2fcmeanzero_meangradll
0gene00.2778510.4922730.147647421.869995False0.027561-1312.509915
1gene10.4918070.6565830.047191520.349976False0.030544-1280.711568
2gene20.3598950.580475-0.087734484.940002False0.043177-1334.831021
3gene30.4507690.645822-0.149193467.864990False0.035538-1371.121205
4gene40.8981190.935540-0.057238536.635010False0.053513-1358.993988
5gene50.3992380.604905-0.168357438.980011False0.004615-1362.527003
6gene60.1858400.379265-0.194161539.265015False0.074427-1384.323391
7gene70.6402330.7681720.123167473.200012False0.069339-1369.790906
8gene80.0447630.223817-0.131154504.015015False0.045032-1370.312173
9gene90.0484120.230011-0.276199508.024994False0.066663-1368.800212
\n", "
" ], "text/plain": [ " gene pval qval log2fc mean zero_mean grad \\\n", "0 gene0 0.277851 0.492273 0.147647 421.869995 False 0.027561 \n", "1 gene1 0.491807 0.656583 0.047191 520.349976 False 0.030544 \n", "2 gene2 0.359895 0.580475 -0.087734 484.940002 False 0.043177 \n", "3 gene3 0.450769 0.645822 -0.149193 467.864990 False 0.035538 \n", "4 gene4 0.898119 0.935540 -0.057238 536.635010 False 0.053513 \n", "5 gene5 0.399238 0.604905 -0.168357 438.980011 False 0.004615 \n", "6 gene6 0.185840 0.379265 -0.194161 539.265015 False 0.074427 \n", "7 gene7 0.640233 0.768172 0.123167 473.200012 False 0.069339 \n", "8 gene8 0.044763 0.223817 -0.131154 504.015015 False 0.045032 \n", "9 gene9 0.048412 0.230011 -0.276199 508.024994 False 0.066663 \n", "\n", " ll \n", "0 -1312.509915 \n", "1 -1280.711568 \n", "2 -1334.831021 \n", "3 -1371.121205 \n", "4 -1358.993988 \n", "5 -1362.527003 \n", "6 -1384.323391 \n", "7 -1369.790906 \n", "8 -1370.312173 \n", "9 -1368.800212 " ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "test_fac.summary().iloc[:10, :]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Test selected coefficients" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this artificial example, we test all coefficients necessary to test the entire factor. First, we preview the coefficient names and then yield the desired list to diffxpy." ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['Intercept', 'condition[T.1]', 'condition[T.2]', 'condition[T.3]']" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "de.utils.preview_coef_names(\n", " sample_description=data.obs,\n", " formula=\"~ 1 + condition\"\n", ")" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "I1101 08:30:23.589154 4648003008 estimator.py:51] training strategy:\n", "{'max_steps': 1000, 'update_b_freq': 5}\n" ] } ], "source": [ "test_coef = de.test.wald(\n", " data=data,\n", " formula_loc=\"~ 1 + condition\",\n", " coef_to_test=['condition[T.1]', 'condition[T.2]', 'condition[T.3]']\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Finally, we perform a sanity check that the factor and coefficient test yielded the same p-values:" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "sns.scatterplot(\n", " x=test_fac.log10_pval_clean(),\n", " y=test_coef.log10_pval_clean()\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Running a test across multiple partitions of a data set" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In some scenarios, one wants to perform a test in multiple partitions of a data set. This can be testing the condition effect separately at each observed time point or in each cell type cluster for example." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "WATCH OUT: The use of expression-derived cell type cluster information is confounded with the tested expression." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Similar to what we describe here, one can also run a Welch's t-test, a rank sum test or a likelihood-ratio test on partitions of a data set." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Generate data:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We now simulate conditions across cell types." ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Transforming to str index.\n" ] } ], "source": [ "from batchglm.api.models.tf1.glm_nb import Simulator\n", "\n", "sim = Simulator(num_observations=200, num_features=100)\n", "sim.generate_sample_description(num_batches=0, num_conditions=4)\n", "sim.generate_params(\n", " rand_fn_loc=lambda shape: np.random.uniform(-0.1, 0.1, shape),\n", " rand_fn_scale=lambda shape: np.random.uniform(0.1, 2, shape)\n", ")\n", "sim.generate_data()\n", "sample_description = sim.sample_description\n", "sample_description[\"cell_type\"] = np.repeat(\n", " np.array([\"c1\", \"c2\", \"c3\", \"c4\"]), \n", " int(sim.input_data.num_observations / 4)\n", ")\n", "\n", "data_part = anndata.AnnData(\n", " X=sim.x,\n", " var=pd.DataFrame(index=[\"gene\" + str(i) for i in range(sim.x.shape[1])]),\n", " obs=sample_description\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Run differential expression test" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can now partition the data set by cell type and conduct a test across conditions in each cell type." ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "scrolled": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "I1101 08:30:25.862147 4648003008 estimator.py:51] training strategy:\n", "{'max_steps': 1000, 'update_b_freq': 5}\n", "I1101 08:30:27.281496 4648003008 estimator.py:51] training strategy:\n", "{'max_steps': 1000, 'update_b_freq': 5}\n", "I1101 08:30:28.577277 4648003008 estimator.py:51] training strategy:\n", "{'max_steps': 1000, 'update_b_freq': 5}\n", "I1101 08:30:30.068945 4648003008 estimator.py:51] training strategy:\n", "{'max_steps': 1000, 'update_b_freq': 5}\n" ] } ], "source": [ "part = de.test.partition(\n", " data=data_part,\n", " parts=\"cell_type\"\n", ")\n", "test_part = part.wald(\n", " formula_loc=\"~ 1 + condition\",\n", " factor_loc_totest=\"condition\"\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that there is one test and p-value for each partition for each gene now. We can summarize test statistics across partitions using summary:" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
genepvalqvallog2fcmean
0gene00.0077750.2076740.821535499.535004
1gene10.0000030.0002601.617482447.505005
2gene20.3266010.8594760.342792476.575012
3gene30.2271820.6467210.359799543.405029
4gene40.5696660.8377440.239041448.140015
5gene50.0414720.4253470.768011553.570007
6gene60.0445660.3689510.522767520.119995
7gene70.0236250.2076740.464294485.609985
8gene80.0000090.0008890.268387521.169983
9gene90.0561680.4685010.525614451.494995
\n", "
" ], "text/plain": [ " gene pval qval log2fc mean\n", "0 gene0 0.007775 0.207674 0.821535 499.535004\n", "1 gene1 0.000003 0.000260 1.617482 447.505005\n", "2 gene2 0.326601 0.859476 0.342792 476.575012\n", "3 gene3 0.227182 0.646721 0.359799 543.405029\n", "4 gene4 0.569666 0.837744 0.239041 448.140015\n", "5 gene5 0.041472 0.425347 0.768011 553.570007\n", "6 gene6 0.044566 0.368951 0.522767 520.119995\n", "7 gene7 0.023625 0.207674 0.464294 485.609985\n", "8 gene8 0.000009 0.000889 0.268387 521.169983\n", "9 gene9 0.056168 0.468501 0.525614 451.494995" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "test_part.summary().iloc[:10, :]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Or look the results of a single partition:" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
genepvalqvallog2fcmeanzero_meangradll
0gene00.2366300.8502330.378361474.540009False0.149255-349.672424
1gene10.3880720.8879070.372109432.959991False0.028610-342.420953
2gene20.9154280.998093-0.132995459.140015False0.021319-336.802719
3gene30.3313380.887907-0.129664575.559998False0.051677-326.841868
4gene40.6496710.9973150.165691429.859985False0.022056-322.434363
5gene50.1469810.7469630.481870543.159973False0.008542-354.784068
6gene60.0850760.6544310.362354502.820007False0.020550-327.777691
7gene70.5271210.8961960.321824478.440002False0.036779-345.983630
8gene80.0019420.097125-0.835358485.220001False0.065138-343.036688
9gene90.0561680.5616810.364328391.779999False0.016551-311.557848
\n", "
" ], "text/plain": [ " gene pval qval log2fc mean zero_mean grad \\\n", "0 gene0 0.236630 0.850233 0.378361 474.540009 False 0.149255 \n", "1 gene1 0.388072 0.887907 0.372109 432.959991 False 0.028610 \n", "2 gene2 0.915428 0.998093 -0.132995 459.140015 False 0.021319 \n", "3 gene3 0.331338 0.887907 -0.129664 575.559998 False 0.051677 \n", "4 gene4 0.649671 0.997315 0.165691 429.859985 False 0.022056 \n", "5 gene5 0.146981 0.746963 0.481870 543.159973 False 0.008542 \n", "6 gene6 0.085076 0.654431 0.362354 502.820007 False 0.020550 \n", "7 gene7 0.527121 0.896196 0.321824 478.440002 False 0.036779 \n", "8 gene8 0.001942 0.097125 -0.835358 485.220001 False 0.065138 \n", "9 gene9 0.056168 0.561681 0.364328 391.779999 False 0.016551 \n", "\n", " ll \n", "0 -349.672424 \n", "1 -342.420953 \n", "2 -336.802719 \n", "3 -326.841868 \n", "4 -322.434363 \n", "5 -354.784068 \n", "6 -327.777691 \n", "7 -345.983630 \n", "8 -343.036688 \n", "9 -311.557848 " ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "test_part.tests[test_part.partitions.index(\"c1\")].summary().iloc[:10, :]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Further reading" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Was your scenario not captured by any of these classes of tests? diffxpy wraps a number of further advanced tests to which we dedicated separate tutorials. These are:\n", " \n", "- pairwise tests between groups (\"multiple_tests_per_gene\")\n", "- grouwise tests versus all other groups (\"multiple_tests_per_gene\")\n", "- modelling continuous covariates such as as total counts, time, pseudotime, space, concentration (\"modelling_continuous_covariates\")\n", "- modelling equality constraints, relevant for scenarios with perfect confounding (\"modelling_constraints\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Still not covered? Post an issue on the [diffxpy](https://github.com/theislab/diffxpy) GitHub repository!" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.6.8" }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": false, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": { "height": "calc(100% - 180px)", "left": "10px", "top": "150px", "width": "212px" }, "toc_section_display": true, "toc_window_display": true } }, "nbformat": 4, "nbformat_minor": 1 }