{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "4ae75850",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Imports\n",
    "\n",
    "from IPython.display import display, Markdown\n",
    "from scipy.stats import chi2_contingency\n",
    "from scipy.stats import t as t_test\n",
    "import numpy as np\n",
    "t_value = t_test.isf\n",
    "\n",
    "def _display_table(data_array, row_names=None, col_names=None):\n",
    "    _row_num = len(data_array)\n",
    "    _col_num = len(data_array[0])\n",
    "    _rows = []\n",
    "    for i in range(_row_num):\n",
    "        row = f'| {row_names[i]} |'\n",
    "        for j in range(_col_num):\n",
    "            row += f' {data_array[i][j]:.1f} |'\n",
    "        row += f' {sum(data_array[i]):.0f} |'\n",
    "        _rows.append(row)\n",
    "    _total_row = '| **Total** |'\n",
    "    _col_tots = 0\n",
    "    for i in range(_col_num):\n",
    "        col_tot = 0\n",
    "        for j in range(_row_num):\n",
    "            col_tot += data_array[j][i]\n",
    "        _col_tots += col_tot\n",
    "        _total_row += f' **{col_tot:.0f}** |'\n",
    "    _total_row += f' **{_col_tots:.0f}** |'\n",
    "    display(Markdown(\n",
    "    rf\"\"\"\n",
    "| | {' | '.join(col_names + ['Total'])} |\n",
    "{'|-'*(len(row_names) + 2)} |\n",
    "{'\\n'.join(_rows)}\n",
    "{_total_row}\n",
    "\"\"\"\n",
    "))\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4f6c9952",
   "metadata": {},
   "source": [
    "# Case-kontrol\n",
    "\n",
    "Dette er et case-kontrol studie, da:\n",
    "\n",
    "- Deltagerne udvælges på baggrund af udfaldet (sygdommen/lidelsen)\n",
    "- Perspektivet er retrospektivt, dvs. man ser tilbage på eksponeringen\n",
    "- Både casene (de syge) og kontrollerne (de raske) har været udsat for eksponering og ikke-eksponering (indenfor den hver gruppe, ikke det enkelte individ)\n",
    "\n",
    "Fordel og ulemper:\n",
    "\n",
    "- Hurtige og billige\n",
    "- Mindre sårbare end tværsnitstudier, men mere sårbare end kohorte studier\n",
    "- Ofte selektions- og re-call bias\n",
    "- En sygdom kan skyldes mange eksponeringer. Man kan tage højde for diverse eksponeringer, men kan kun undersøge én eksponering pr. studie\n",
    "- God til sjældne sygdomme, da studiet tager udgangspunkt i udfaldet og man derfor ikke behøver at rekruttere kæmpe stikprøver"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5a1c374c",
   "metadata": {},
   "source": [
    "# Hyppigheds- og associationsmål\n",
    "\n",
    "Odds:\n",
    "\n",
    "$$\n",
    "Odds = \\frac{proportion}{1-proportion} = \\frac{eksponerede}{ikke\\ eksponerede}\n",
    "$$\n",
    "\n",
    "hvor proportion er en andel ($0 \\le proportion \\le 1$). Odds fortæller hvor mange eksponerede, der er for hver _ikke_ eksponeret.\n",
    "\n",
    "Oddsratio (OR):\n",
    "\n",
    "$$\n",
    "OR = \\frac{Odds_{cases}}{Odds_{kontroller}}\n",
    "$$\n",
    "\n",
    "Oddsratio giver hvor mange gange større risiko der er for sygdom, hvis man er eksponeret.\n",
    "\n",
    "- Hvis $OR \\gt 1$: forøget risiko for sygdom, hvis du er eksponeret\n",
    "- Hvis $OR \\lt 1$: reduceret risiko for sygdom, hvis du er eksponeret\n",
    "\n",
    "Nulhypotese: $OR=1$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "9ef67735",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/markdown": [
       "\n",
       "$odds_{blodprop} = \\frac{26}{32} = 0.8125$\n",
       "\n",
       "$odds_{kontrol} = \\frac{10}{106} = 0.0943$\n",
       "\n",
       "$OR = \\frac{odds_{blodprop}}{odds_{kontrol}} = \\frac{0.8125}{0.0943} \\approx 8.6125$\n",
       "\n",
       "Der er 7.61 gange større risiko for blodprop, hvis man er eksponeret, i forhold til hvis man ikke er eksponeret.\n"
      ],
      "text/plain": [
       "<IPython.core.display.Markdown object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "udfald = 'blodprop'           # Fx blodprop\n",
    "\n",
    "antal_syge_eksponerede = 26\n",
    "antal_syge_ikke_eksponerede = 32\n",
    "\n",
    "antal_raske_eksponerede = 10\n",
    "antal_raske_ikke_eksponerede = 106\n",
    "\n",
    "\n",
    "#####################################\n",
    "odds_syge = antal_syge_eksponerede / antal_syge_ikke_eksponerede\n",
    "odds_kontrol = antal_raske_eksponerede / antal_raske_ikke_eksponerede\n",
    "oddsratio = odds_syge / odds_kontrol\n",
    "\n",
    "display(Markdown(\n",
    "    rf\"\"\"\n",
    "$odds_{{{udfald}}} = \\frac{{{antal_syge_eksponerede}}}{{{antal_syge_ikke_eksponerede}}} = {odds_syge:.4f}$\n",
    "\n",
    "$odds_{{kontrol}} = \\frac{{{antal_raske_eksponerede}}}{{{antal_raske_ikke_eksponerede}}} = {odds_kontrol:.4f}$\n",
    "\n",
    "$OR = \\frac{{odds_{{{udfald}}}}}{{odds_{{kontrol}}}} = \\frac{{{odds_syge:.4f}}}{{{odds_kontrol:.4f}}} \\approx {oddsratio:.4f}$\n",
    "\n",
    "Der er {oddsratio-1:.2f} gange større risiko for {udfald}, hvis man er eksponeret, i forhold til hvis man ikke er eksponeret.\n",
    "\"\"\"\n",
    "))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "e2898b72",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "base",
   "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.13.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
