{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "1c7e9b8a",
   "metadata": {},
   "source": [
    "# TP 10-2: Tests Statistiques\n",
    "\n",
    "Le but du TP est de mettre en oeuvre les tests statistiques de t-student et du $\\chi^2$ dans un contexte simple.\n",
    "\n",
    "\n",
    "| Numéro        | Compétence           | \n",
    "|:------------- |:--------------------:|\n",
    "|TS004|\tÊtre capable de déterminer la statistique à utiliser|\n",
    "|TS005|\tSavoir conclure suite à un résultat du test statistique|\n",
    "|TS101|\tSavoir dans quel contexte utiliser un test du chi2|\n",
    "|TS102|\tSavoir calculer le nombre de degrés de liberté d’un test du chi2|\n",
    "|TS103|\tEtre capable d'appliquer un test du chi2 sur un tableau de contingence|\n",
    "|TS104|\tConnaître les limites du test du chi2|\n",
    "|TS201|\tSavoir dans quel contexte utiliser un test de student|\n",
    "|TS202|\tConnaître les limites du test de student|\n",
    "|TS203|\tSavoir calculer le nombre de degrés de liberté d’un test de student|\n",
    "|PY603|\tÊtre capable de mettre en œuvre un test de student|\n",
    "|PY604|\tÊtre capable de mettre en œuvre un test du chi^2 (adéquation et indépendance)|\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ed7a3739",
   "metadata": {},
   "source": [
    "##  $\\chi^2$ Complet\n",
    "\n",
    "Le but de cet exercice est de mettre en oeuvre un test statistique du $\\chi^2$ de A à Z."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "2d134c2d",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import scipy.io as sio\n",
    "import scipy.stats as stats"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "17f13c67",
   "metadata": {},
   "source": [
    "Un échantillon aléatoire de 1367 diplômes d’université, délivrés en 2013, a donné la répartition suivante : \n",
    "\n",
    "/|Licence|Maîtrise|Doctorat\n",
    "--|---|---|---\n",
    "Masculin|534|144|22\n",
    "Féminin|515|141|11"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fd4abfea",
   "metadata": {},
   "source": [
    "Peut-on statistiquement affirmer que genre et le niveau de diplôme obtenu sont liés ?\n",
    "\n",
    "\n",
    "1. Donnez les hypothèses du tests\n",
    "2. Quelle est la statistique à considérer ? Quel risque $\\alpha$ considérez vous ?\n",
    "3. Construire le tableau $T$ des effectifs théoriques\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "3605f370",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "02d3db13",
   "metadata": {
    "tags": [
     "correction"
    ]
   },
   "source": [
    "A.     \n",
    "\n",
    "$\\mathcal{H}_0$,  genre et le niveau de diplôme obtenu ne sont pas liés    (indépendance)\n",
    "$\\mathcal{H}_1$,  genre et le niveau de diplôme obtenu sont liés    \n",
    "\n",
    "B. \n",
    "\n",
    "la distance du Chi2, alpha=0.05 (l'alpha est un choix)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "11c85221",
   "metadata": {
    "tags": [
     "correction"
    ]
   },
   "outputs": [],
   "source": [
    "#C\n",
    "O = np.array([[534, 144, 22], [515, 141, 11]])\n",
    "m = np.sum(O, axis=0) #les marginales\n",
    "n = np.sum(O, axis=1)\n",
    "          \n",
    "T = np.outer(n, m) / np.sum(n)\n",
    "T"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "de72973e",
   "metadata": {},
   "source": [
    "4. Calculer la distance du $\\chi_2$ entre les observations et les valeurs théoriques"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "3254933e",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "19c9f2e0",
   "metadata": {
    "tags": [
     "correction"
    ]
   },
   "outputs": [],
   "source": [
    "D = np.sum((O-T)**2/T)\n",
    "D"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "daabeb34",
   "metadata": {},
   "source": [
    "5. Quel est le nombre de degrés de liberté de la loi sous $\\mathcal{H}_0$ ?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "b7bd7d7c",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "5125cb4d",
   "metadata": {
    "tags": [
     "correction"
    ]
   },
   "outputs": [],
   "source": [
    "ddl = (len(n)-1)*(len(m)-1)\n",
    "ddl"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "42d568df",
   "metadata": {},
   "source": [
    "6. calculez la p-valeur du test"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "44a42bce",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "6bb0c9bd",
   "metadata": {
    "tags": [
     "correction"
    ]
   },
   "outputs": [],
   "source": [
    "#deux manieres\n",
    "print( 1 - stats.chi2.cdf(D,ddl))\n",
    "print(stats.chi2.sf(D,ddl))\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "31aaa118",
   "metadata": {},
   "source": [
    "7. Quelle est votre conclusion ?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "4322317b",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "93acdf8e",
   "metadata": {
    "tags": [
     "correction"
    ]
   },
   "outputs": [],
   "source": [
    "alpha=0.05\n",
    "p = stats.chi2.sf(D,ddl)\n",
    "if p < alpha:\n",
    "    print(\"H_o est rejetée, genre et diplomes ne sont pas indépendants\")\n",
    "else:\n",
    "    print(\"H_o est gardée, genre et diplomes sont indépendants\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "8ccfc572",
   "metadata": {
    "tags": [
     "correction"
    ]
   },
   "outputs": [],
   "source": [
    "# vérification \n",
    "\n",
    "chi2, p, dof, ex = stats.chi2_contingency(O)\n",
    "print(chi2, p, dof, ex)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "469b746d",
   "metadata": {},
   "source": [
    "# $\\chi^2$ pour test d'adéquation\n",
    "\n",
    "(Si on a le temps, sinon semaine prochaine !)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5073c160",
   "metadata": {},
   "source": [
    "On considère des variables qui peuvent prendre 4 valeurs différentes, notées $A,B,C$ et $D$, avec des probabilités respectives $p_A,p_B,p_C$ et $p_D$. On a récolté un échantillon de telles variables, les résultats sont résumés dans le tableau suivant :\n",
    "\n",
    "Valeur prise |A|B|C|D\n",
    "---|---|---|---|---\n",
    "Effectif observé|48|53|17|12"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d803d13f",
   "metadata": {},
   "source": [
    "1. Peut-on raisonnablement affirmer que $\\{p_A=p_B=0,4$ et $p_C=p_D= 0,1\\}$?\n",
    "\n",
    "    1. Donnez les hypothèses du test\n",
    "    2. Quelle est la statistique à considérer\n",
    "    3. Construire le vecteur $T$ des effectifs théoriques"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "915c1e6a",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import scipy.stats as stats"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "f2c1a31d",
   "metadata": {
    "tags": [
     "correction"
    ]
   },
   "outputs": [],
   "source": [
    "#H_O adéquation OK\n",
    "#test du chi2 ==> calcul de la distance du chi2\n",
    "O = np.array([48, 53, 17, 12])\n",
    "p = np.array([.4, .4, .1, .1])\n",
    "T = p * np.sum(O)\n",
    "T"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c97b8107",
   "metadata": {},
   "source": [
    "D.  calculer la distance du $\\chi^2$ entre les observations et les valeurs théoriques"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "fd786991",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "29445716",
   "metadata": {
    "tags": [
     "correction"
    ]
   },
   "outputs": [],
   "source": [
    "Dchi2 =np.sum((O-T)**2/T)\n",
    "Dchi2"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a1035257",
   "metadata": {},
   "source": [
    "E. Quel est le nombre de degrés de liberté de la loi sous $\\mathcal{H}_0$ ?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "9dcbcc48",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "792f2531",
   "metadata": {
    "jupyter": {
     "outputs_hidden": true
    },
    "tags": [
     "correction"
    ]
   },
   "outputs": [],
   "source": [
    "ddl = len(O) - 1\n",
    "\n",
    "ddl"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "284054f3",
   "metadata": {},
   "source": [
    "F. calculez la p-valeur du test"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "5ebea1e5",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "7db7a264",
   "metadata": {
    "tags": [
     "correction"
    ]
   },
   "outputs": [],
   "source": [
    "pval = 1 - stats.chi2.cdf(Dchi2, ddl)\n",
    "pval = stats.chi2.sf(Dchi2, ddl)\n",
    "\n",
    "pval"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "087adc4b",
   "metadata": {},
   "source": [
    "G. que concluez vous ?\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "d9b74db7",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "3469bf68",
   "metadata": {
    "tags": [
     "correction"
    ]
   },
   "source": [
    "\n",
    "Que l'on peut raisonnablement affirmer que $P(A)=P(B)=0,4$ et $P(C)=P(D)=0,1$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "9eba6645",
   "metadata": {
    "tags": [
     "correction"
    ]
   },
   "outputs": [],
   "source": [
    "Di, pval = stats.chisquare(O,T)\n",
    "print(Di,pval)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a25236d5-e74d-442e-bd97-33ca87c8d086",
   "metadata": {},
   "source": [
    "# Test de Student et Hauteurs d'Arbres\n",
    "\n",
    "Dans deux types de forêts distincts, on a mesuré en mètre les hauteurs dominantes respectivement de 14 et 13 peuplements du même age choisis au hasard et indépendamment.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "462f1086-5bba-4710-acd9-6eb1e85f5983",
   "metadata": {},
   "source": [
    "type\\peuplement   | 1|2|3|4|5|6|7|8|9|10|11|12|13|14|\n",
    "---|---|---|---|---|---|---|---|---|---|---|---|---|---|---\n",
    "type 1 |23.4 |24.4 |24.6 |24.9 |25.0 |26.2 |26.3 |26.8 |26.8 |26.9 |27.0 |27.6 |27.7 |28.5\n",
    "type 2 |22.5 |22.9 |23.7 |24.0 |24.4 |24.5 |25.3 |26.0 |26.2 |26.4 |26.7 |26.9 |27.4| |"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cc558656-3f41-4ad9-97d4-01bfa3fe328c",
   "metadata": {},
   "source": [
    "Considérons un risque de première espèce de 0,05. En considérant que la variance des hauteurs mesurées est connue $(\\sigma^2 = 1.7)$, on cherche à savoir si les hauteurs moyennes des deux types de forêts sont identiques.\n",
    "\n",
    "\n",
    "1. Posez les hypothèses"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "58fd8dad",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "c6e38104-c30c-456e-ac77-26e5e39c5cfe",
   "metadata": {
    "tags": [
     "correction"
    ]
   },
   "source": [
    "* $H_0$   les deux forêts sont identiques : $\\mu_1 = \\mu_2$    \n",
    "* $H_1$    les deux forêts sont différentes: $\\mu_1 \\neq \\mu_2$"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ec2cc099-e466-4533-a0fc-7b82f0e23b2d",
   "metadata": {},
   "source": [
    "2. Quel statistique et quel test allez vous utilisez ? Justifiez votre réponse !\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "2b2dd7fb",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "d5b4f87b-3950-4f1b-905c-e59e02fdbb7b",
   "metadata": {
    "tags": [
     "correction"
    ]
   },
   "source": [
    "la différence des moyennes centrée réduite/ test z car variance connue et H_0 suit une loi normale."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0ee9d59b-5a25-4218-aa24-75e8049f9e89",
   "metadata": {},
   "source": [
    "3. Calculez la statistique et la p-valeur associées à vos données"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "37d07b3f",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "025905e8",
   "metadata": {
    "tags": [
     "correction"
    ]
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import scipy.stats as stats\n",
    "x = np.array([23.4, 24.4, 24.6, 24.9, 25.0, 26.2, 26.3, 26.8, 26.8, 26.9, 27.0, 27.6, 27.7, 28.5])\n",
    "y = np.array([22.5, 22.9, 23.7, 24.0, 24.4, 24.5, 25.3, 26.0, 26.2, 26.4, 26.7, 26.9, 27.4])\n",
    "nx = len(x)\n",
    "ny = len(y)\n",
    "mx = np.mean(x)\n",
    "my = np.mean(y)\n",
    "sig2 = 1.7\n",
    "u = (mx-my)/np.sqrt(sig2*(1/nx+1/ny))\n",
    "pval = 2*(1 - stats.norm.cdf(abs(u),0,1))\n",
    "pval"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a707674f-fc03-48fc-9bf8-1a23b839b368",
   "metadata": {
    "tags": [
     "correction"
    ]
   },
   "source": [
    "la p-val étant inférieure au seuil choisi (ici 0,05), on rejette H0"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ef1e07ae-69fb-4c52-b018-4eda38af6818",
   "metadata": {},
   "source": [
    "4. les deux forêts sont-elles toujours identiques si l’on suppose que la variance des hauteurs mesurées est inconnue ?\n",
    "Justifiez votre raisonnement"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "21e98445",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "90c842a8",
   "metadata": {
    "tags": [
     "correction"
    ]
   },
   "outputs": [],
   "source": [
    "#variance inconnue donc test de t-student\n",
    "\n",
    "Sx = np.sum((x-mx)**2)\n",
    "Sy = np.sum((y-my)**2)\n",
    "\n",
    "shat = (Sx + Sy)/(nx+ny-2)\n",
    "\n",
    "t = (mx-my)/np.sqrt(shat*(1/nx+1/ny))\n",
    "\n",
    "pval = 2*(1 - stats.t.cdf(abs(t),nx+ny-2))\n",
    "\n",
    "pval, shat, t"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "bd7e4027",
   "metadata": {
    "tags": [
     "correction"
    ]
   },
   "outputs": [],
   "source": [
    "# vérification à l'aide de scipy.stats\n",
    "s,p = stats.ttest_ind(x,y)\n",
    "print(s,p)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ad62543c-9cb9-40ba-8d54-2da8f8d10795",
   "metadata": {
    "tags": [
     "correction"
    ]
   },
   "source": [
    "la p-val étant de 0.1 donc superieur à 0.05, on garde H0"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "99ba7a59-c508-4712-bb82-34dbf8abadaa",
   "metadata": {},
   "source": [
    "# Mesure de dépendance Exam\n",
    "\n",
    "Cet exercice reprend le médian 2024. Il s'agit de mettre en oeuvre le test du chi2, et de recalculer le tableau de contingence.\n",
    "\n",
    "Pour cet exercice, nous allons nous intéresser aux poissons observés sur chacun des sites le long de la rivière du Doubs. Pour cela, nous allons utiliser une liste indiquant si les sites sont pollués ou non."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "1988a091-d733-461e-948f-b9d5cbe1444b",
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "sites_pollues = np.array([False, False, False, False, False, False, False, True, True, False, False, False, False, False, False, False, False, False, False, False, False, False, True, True, True, True, True, True, True, True])\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7713360d-4316-468c-802b-5d72b54d7d9c",
   "metadata": {},
   "source": [
    "1. Nous allons évaluer la dépendance entre la pollution d'un site de prélèvement et les espèces de poissons observées sur chacun des sites. Analysez les variables especes et poissons pour comprendre son contenu.  Quelles sont les modalités de chacune des variables ? Quelle est votre hypothèse nulle ? "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "86e8e74a-18fd-4553-b832-9247070e1d04",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a827fab0-39fe-415b-9edc-45c123b785bc",
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": [
     "correction"
    ]
   },
   "outputs": [],
   "source": [
    "import numpy as np \n",
    "especes = np.load(\"doubs_species.npy\",allow_pickle=True)\n",
    "poissons = np.load(\"doubs_fish.npy\")\n",
    "\n",
    "\n",
    "# Deux variables qualitatives\n",
    "#modalités variable 1 : pollué, non pollué\n",
    "# modalités variables 2 : \n",
    "especes[:,1]"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1b3f54d0-7400-4462-9666-7fc8d4fa9e2e",
   "metadata": {
    "tags": [
     "correction"
    ]
   },
   "source": [
    "Hypothese nulle : la distribution des especes est indépendante de la pollution."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4a60d1e0-d7d6-4cd2-87a5-8c219a6362fc",
   "metadata": {},
   "source": [
    "2. Calculez le tableau de contingence entre la pollution des sites et les espèces observées. Comparez et assurez vous de trouver la même chose que le tableau fourni. Si ce n'est pas le cas, utilisez `contingence_prof` pour le reste de l'exercice.  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "7266f9fa-1da2-455e-b553-dbed51109a44",
   "metadata": {},
   "outputs": [],
   "source": [
    "contingence = ... \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "0c9d35c7-e6d3-4a0e-9043-2618375e1d9e",
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": [
     "correction"
    ]
   },
   "outputs": [],
   "source": [
    "# calcul du tableau de contingence\n",
    "# Le tableau de contingence va renseigner le nb de poissons observés pour chaque espece et chaque type de site (pollué ou non)\n",
    "n,p = poissons.shape\n",
    "cont = np.zeros((2,p))\n",
    "for i in range(n):\n",
    "    if sites_pollues[i]:\n",
    "        cont[1] += poissons[i] # site pollue en 2 eme ligne\n",
    "    else:\n",
    "        cont[0] += poissons[i]\n",
    "print(cont)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "708c7507-c212-4fa7-98b7-c4b4250cb30d",
   "metadata": {},
   "source": [
    "3. Calculez les effectifs marginaux pour chaque ligne et colonne, ainsi que l'effectif total."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "18962cae-a93a-4695-a1ff-7cb4325ffa84",
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "\n",
    "marg_l = ...\n",
    "marg_c = ...\n",
    "n = ..."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "c2dce219-6d9a-481c-8c37-d957f686c69b",
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": [
     "correction"
    ]
   },
   "outputs": [],
   "source": [
    "marg_l = np.sum(contingence_prof,axis=1)\n",
    "marg_c = np.sum(contingence_prof,axis=0)\n",
    "n = np.sum(contingence_prof)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "51513cbc-4afb-467a-a035-b3851c2fc13d",
   "metadata": {},
   "source": [
    "4. Calculez le tableau théorique des effectifs, sous l'hypothèse que les deux variables soient indépendantes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "e67f8dd8-46d1-485d-a107-d098fd9d0125",
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "tab_theo = ..."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "849f2fec-6d65-4bec-921e-9dd2ed0eba2e",
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": [
     "correction"
    ]
   },
   "outputs": [],
   "source": [
    "tab_theo = 1/n * np.outer(marg_l,marg_c)\n",
    "print(tab_theo)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9e0524a2-a914-4473-8942-3a41282767c6",
   "metadata": {},
   "source": [
    "5. Calculez la distance du chi2 associée à ces deux variables"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "2f7e259f-77ee-4412-bbc3-b7599cf98f7c",
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "chi2 = ...\n",
    "print(chi2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "d24248ba-9f17-482f-b9ed-1c84e02fc225",
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": [
     "correction"
    ]
   },
   "outputs": [],
   "source": [
    "chi2 = np.sum((tab_theo - contingence_prof)**2/tab_theo)\n",
    "print(chi2)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "41ba5a00-81ae-49bf-a911-96f869345e97",
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "source": [
    "7. Est ce que vous rejetez l'hypothèse nulle ? "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "c92a1ebf-bf13-4b7a-8d4f-e15bed9aa0cd",
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "4cddb008-7fb0-4916-97e1-bd32d5501d5c",
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": [
     "correction"
    ]
   },
   "outputs": [],
   "source": [
    "from scipy.stats import chi2_contingency\n",
    "chi2_contingency(contingence_prof)\n",
    "# p value tres faible -> on rejette"
   ]
  }
 ],
 "metadata": {
  "celltoolbar": "Tags",
  "kernelspec": {
   "display_name": "M8",
   "language": "python",
   "name": "m8"
  },
  "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.10.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
