{ "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": null, "id": "9ef67735", "metadata": {}, "outputs": [ { "data": { "text/markdown": [ "\n", "### 2x2-tabel\n", "\n", "| | blodprop | Ikke blodprop | I alt |\n", "| :-------------- | :----------------------------------: | :-----------------------------------: | ----------------------------------------: |\n", "| Eksponeret | 26 | 10 | 36 |\n", "| Ikke eksponeret | 32 | 106 | 138 |\n", "| I alt | 58 | 116 | **174** |\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/markdown": [ "\n", "### Hyppigheds- og associationsmål\n", "\n", "$odds_{blodprop} = \\frac{26}{32} = 0.8125$\n", "\n", "$odds_{kontroller} = \\frac{10}{106} = 0.0943$\n", "\n", "$OR = \\frac{odds_{blodprop}}{odds_{kontroller}} = \\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": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "udfald = 'blodprop' # Fx blodprop # BEMÆRK: mellemrum forsvinder\n", "kontrol_label = 'kontrol' # hvis mellemrum skal forblive, skal der være backslash (\\) foran, fx: kontrol_label = 'ikke\\ 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", "sum_udfald = antal_syge_eksponerede + antal_syge_ikke_eksponerede\n", "sum_ikke_udfald = antal_raske_eksponerede + antal_raske_ikke_eksponerede\n", "sum_eksponerede = antal_syge_eksponerede + antal_raske_eksponerede\n", "sum_ikke_eksponerede = antal_syge_ikke_eksponerede + antal_raske_ikke_eksponerede\n", "\n", "display(Markdown(\n", " rf\"\"\"\n", "### 2x2-tabel\n", " \n", "| | {udfald} | Ikke {udfald} | I alt |\n", "| :-------------- | :----------------------------------: | :-----------------------------------: | ----------------------------------------: |\n", "| Eksponeret | {antal_syge_eksponerede} | {antal_raske_eksponerede} | {sum_eksponerede} |\n", "| Ikke eksponeret | {antal_syge_ikke_eksponerede} | {antal_raske_ikke_eksponerede} | {sum_ikke_eksponerede} |\n", "| I alt | {sum_udfald} | {sum_ikke_udfald} | **{sum_udfald + sum_ikke_udfald}** |\n", "\"\"\"\n", "))\n", "\n", "display(Markdown(\n", " rf\"\"\"\n", "### Hyppigheds- og associationsmål\n", "\n", "$odds_{{{udfald}}} = \\frac{{{antal_syge_eksponerede}}}{{{antal_syge_ikke_eksponerede}}} = {odds_syge:.4f}$\n", "\n", "$odds_{{{kontrol_label}}} = \\frac{{{antal_raske_eksponerede}}}{{{antal_raske_ikke_eksponerede}}} = {odds_kontrol:.4f}$\n", "\n", "$OR = \\frac{{odds_{{{udfald}}}}}{{odds_{{{kontrol_label}}}}} = \\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 }