Added hyppigheds- og associationsmål
This commit is contained in:
parent
0c957990b0
commit
e12a7c96ae
|
|
@ -0,0 +1,183 @@
|
|||
{
|
||||
"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
|
||||
}
|
||||
|
|
@ -0,0 +1,380 @@
|
|||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"id": "f3c832c5",
|
||||
"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": "4392857e",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# Kohorte / RCT\n",
|
||||
"\n",
|
||||
"Dette er et kohortestudie, da:\n",
|
||||
"\n",
|
||||
"- det tager udgangspunkt i eksponering\n",
|
||||
"- kohorten følges over tid, hvorefter man kigger på udfald\n",
|
||||
"- det finder en årsagssammenhæng\n",
|
||||
"- det undersøger flere udfald samtidig\n",
|
||||
"- det er prospektivt - analytisk\n",
|
||||
"\n",
|
||||
"Forskel på RCT og kohorte:\n",
|
||||
"\n",
|
||||
"- I RCT bestemmer man hvilken eksponering grupperne skal udsættes for, og der kan derfor være blindet\n",
|
||||
"- randomiseret\n",
|
||||
"\n",
|
||||
"Fordele og ulemper ved kohorte:\n",
|
||||
"\n",
|
||||
"- langsomt\n",
|
||||
"- dyrt\n",
|
||||
"- det mindst sårbare studie\n",
|
||||
"- loss to follow-up (bias)\n",
|
||||
"- mange sygdomme (udfald i forhold til eksponering)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"id": "ffac3d14",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# Hyppigheds- og associationsmål (3 sæt)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"id": "9bf576a5",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Incidensrate (IR), incidensrate ratio (IRR), incidensrate differens (IRD)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"id": "cd18552f",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"$$\n",
|
||||
"IR = \\frac{antal\\ nye\\ tilfælde}{samlet\\ persontid\\ i\\ risiko(risikotid)}\n",
|
||||
"$$\n",
|
||||
"\n",
|
||||
"$$\n",
|
||||
"IRR = \\frac{IR_{eksponerede}}{IR_{ikke\\ eksponerede}}\n",
|
||||
"$$\n",
|
||||
"\n",
|
||||
"$$\n",
|
||||
"IRD = IR_{eksponerede} - IR_{ikke\\ eksponerede}\n",
|
||||
"$$\n",
|
||||
"\n",
|
||||
"$H_0$: $IRR=1 \\Leftrightarrow IRD=0$"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 10,
|
||||
"id": "8f9ea711",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/markdown": [
|
||||
"\n",
|
||||
"$IR = \\frac{antal\\ nye\\ tilfælde}{observationstid\\ i\\ personår}$\n",
|
||||
"\n",
|
||||
"$IR_{eksponerede} = \\frac{130}{6834} \\approx 0.01902 \\approx 1.90%$\\% sv.t. 19 pr. 1000 personår\n",
|
||||
"\n",
|
||||
"$IR_{ikke\\ eksponerede} = \\frac{40}{9228} \\approx 0.00433 \\approx 0.43%$\\% sv.t. 4 pr. 1000 personår\n",
|
||||
"\n",
|
||||
"$IRR = \\frac{IR_{eksponerede}}{IR_{ikke\\ eksponerede}} = \\frac{0.01902}{0.00433} \\approx 4.388$\n",
|
||||
"\n",
|
||||
"$IRD = IR_{eksponerede} - IR_{ikke\\ eksponerede} = 0.01902 - 0.00433 \\approx 0.01469$ sv.t. 15 pr. 1000\n"
|
||||
],
|
||||
"text/plain": [
|
||||
"<IPython.core.display.Markdown object>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
"output_type": "display_data"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"antal_nye_tilfælde_eksponerede = 130\n",
|
||||
"observationstid_eksponerede = 6834 # Observationstid målt i personår\n",
|
||||
"\n",
|
||||
"antal_nye_tilfælde_ikke_eksponerede = 40\n",
|
||||
"observationstid_ikke_eksponerede = 9228\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"#####################################\n",
|
||||
"ir_eksponerede = antal_nye_tilfælde_eksponerede / observationstid_eksponerede\n",
|
||||
"ir_ikke_eksponerede = antal_nye_tilfælde_ikke_eksponerede / observationstid_ikke_eksponerede\n",
|
||||
"irr = ir_eksponerede / ir_ikke_eksponerede\n",
|
||||
"ird = ir_eksponerede - ir_ikke_eksponerede\n",
|
||||
"\n",
|
||||
"display(Markdown(\n",
|
||||
" rf\"\"\"\n",
|
||||
"$IR = \\frac{{antal\\ nye\\ tilfælde}}{{observationstid\\ i\\ personår}}$\n",
|
||||
"\n",
|
||||
"$IR_{{eksponerede}} = \\frac{{{antal_nye_tilfælde_eksponerede}}}{{{observationstid_eksponerede}}} \\approx {ir_eksponerede:.5f} \\approx {ir_eksponerede:.2%}$\\% sv.t. {ir_eksponerede*1000:.0f} pr. 1000 personår\n",
|
||||
"\n",
|
||||
"$IR_{{ikke\\ eksponerede}} = \\frac{{{antal_nye_tilfælde_ikke_eksponerede}}}{{{observationstid_ikke_eksponerede}}} \\approx {ir_ikke_eksponerede:.5f} \\approx {ir_ikke_eksponerede:.2%}$\\% sv.t. {ir_ikke_eksponerede*1000:.0f} pr. 1000 personår\n",
|
||||
"\n",
|
||||
"$IRR = \\frac{{IR_{{eksponerede}}}}{{IR_{{ikke\\ eksponerede}}}} = \\frac{{{ir_eksponerede:.5f}}}{{{ir_ikke_eksponerede:.5f}}} \\approx {irr:.3f}$\n",
|
||||
"\n",
|
||||
"$IRD = IR_{{eksponerede}} - IR_{{ikke\\ eksponerede}} = {ir_eksponerede:.5f} - {ir_ikke_eksponerede:.5f} \\approx {ird:.5f}$ sv.t. {ird*1000:.0f} pr. 1000\n",
|
||||
"\"\"\"\n",
|
||||
"))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"id": "a8686b0b",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Risiko (KIP), relativ risiko (RR), risiko differens (RD)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"id": "393753d8",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"$$\n",
|
||||
"KIP = \\frac{antal\\ nye\\ tilfælde\\ i\\ en\\ given\\ periode}{antal\\ personer\\ i\\ risiko\\ ved\\ observationsperiodens\\ start}\n",
|
||||
"$$\n",
|
||||
"\n",
|
||||
"$$\n",
|
||||
"RR = \\frac{KIP_{eksponerede}}{KIP_{ikke\\ eksponerede}}\n",
|
||||
"$$\n",
|
||||
"\n",
|
||||
"$$\n",
|
||||
"RD = KIP_{eksponerede} - KIP_{ikke\\ eksponerede}\n",
|
||||
"$$\n",
|
||||
"\n",
|
||||
"$H_0$: $RR=1 \\Leftrightarrow RD=0$"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 14,
|
||||
"id": "96e8cc3a",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/markdown": [
|
||||
"\n",
|
||||
"$KIP = \\frac{antal\\ nye\\ tilfælde}{antal\\ personer}$\n",
|
||||
"\n",
|
||||
"$KIP_{eksponerede} = \\frac{130}{656} \\approx 0.19817 \\approx 19.82%$\\%\n",
|
||||
"\n",
|
||||
"$KIP_{ikke\\ eksponerede} = \\frac{40}{787} \\approx 0.05083 \\approx 5.08%$\\%\n",
|
||||
"\n",
|
||||
"$RR = \\frac{KIP_{eksponerede}}{KIP_{ikke\\ eksponerede}} = \\frac{0.19817}{0.05083} \\approx 3.899$\n",
|
||||
"\n",
|
||||
"$RD = KIP_{eksponerede} - KIP_{ikke\\ eksponerede} = 0.19817 - 0.05083 \\approx 0.14734$ sv.t. 147 pr. 1000\n",
|
||||
"\n",
|
||||
"Dette vil altså betyde 147 ekstra tilfælde pr. 1000\n"
|
||||
],
|
||||
"text/plain": [
|
||||
"<IPython.core.display.Markdown object>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
"output_type": "display_data"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"antal_nye_tilfælde_eksponerede = 130\n",
|
||||
"antal_eksponerede = 656\n",
|
||||
"\n",
|
||||
"antal_nye_tilfælde_ikke_eksponerede = 40\n",
|
||||
"antal_ikke_eksponerede = 787\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"#####################################\n",
|
||||
"kip_eksponerede = antal_nye_tilfælde_eksponerede / antal_eksponerede\n",
|
||||
"kip_ikke_eksponerede = antal_nye_tilfælde_ikke_eksponerede / antal_ikke_eksponerede\n",
|
||||
"rr = kip_eksponerede / kip_ikke_eksponerede\n",
|
||||
"rd = kip_eksponerede - kip_ikke_eksponerede\n",
|
||||
"\n",
|
||||
"display(Markdown(\n",
|
||||
" rf\"\"\"\n",
|
||||
"$KIP = \\frac{{antal\\ nye\\ tilfælde}}{{antal\\ personer}}$\n",
|
||||
"\n",
|
||||
"$KIP_{{eksponerede}} = \\frac{{{antal_nye_tilfælde_eksponerede}}}{{{antal_eksponerede}}} \\approx {kip_eksponerede:.5f} \\approx {kip_eksponerede:.2%}$\\%\n",
|
||||
"\n",
|
||||
"$KIP_{{ikke\\ eksponerede}} = \\frac{{{antal_nye_tilfælde_ikke_eksponerede}}}{{{antal_ikke_eksponerede}}} \\approx {kip_ikke_eksponerede:.5f} \\approx {kip_ikke_eksponerede:.2%}$\\%\n",
|
||||
"\n",
|
||||
"$RR = \\frac{{KIP_{{eksponerede}}}}{{KIP_{{ikke\\ eksponerede}}}} = \\frac{{{kip_eksponerede:.5f}}}{{{kip_ikke_eksponerede:.5f}}} \\approx {rr:.3f}$\n",
|
||||
"\n",
|
||||
"$RD = KIP_{{eksponerede}} - KIP_{{ikke\\ eksponerede}} = {kip_eksponerede:.5f} - {kip_ikke_eksponerede:.5f} \\approx {rd:.5f}$ sv.t. {rd*1000:.0f} pr. 1000\n",
|
||||
"\n",
|
||||
"Dette vil altså betyde {rd*1000:.0f} ekstra tilfælde pr. 1000\n",
|
||||
"\"\"\"\n",
|
||||
"))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"id": "2f69d5ff",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Odds, oddsratio (OR)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"id": "21428554",
|
||||
"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",
|
||||
"$H_0$: $OR=1$"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 13,
|
||||
"id": "cdda6f48",
|
||||
"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": "9d077dff",
|
||||
"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
|
||||
}
|
||||
|
|
@ -0,0 +1,169 @@
|
|||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"id": "eb67f7a5",
|
||||
"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": "c0bee775",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# Tværsnit\n",
|
||||
"\n",
|
||||
"Dette er et tværsnitstudie, da:\n",
|
||||
"\n",
|
||||
"- det giver et øjebliksbilledet (man ser på nuværende eksponering)\n",
|
||||
"- eksponering og udfald indhentes samtidig, dvs man kan ikke finde årsagssammenhæng\n",
|
||||
"- bruges til at beskrive bestanden af en given tilstand/ sygdom til et givent tidspunkt\n",
|
||||
"\n",
|
||||
"Fordele og ulemper:\n",
|
||||
"\n",
|
||||
"- hurtigt og billigt\n",
|
||||
"- meget sårbart, da man ikke kender årsagssammenhæng\n",
|
||||
"- hypotesegenererende\n",
|
||||
"- deskriptivt (ikke analytisk)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"id": "5a7b9dca",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Hyppigheds- og associationsmål\n",
|
||||
"\n",
|
||||
"Prævalens / Prævalensproportion (PP)\n",
|
||||
"\n",
|
||||
"$$\n",
|
||||
"PP = \\frac{antal\\ syge\\ på\\ et\\ givet\\ tidspunkt}{antal\\ personer\\ i\\ studiepopulationen\\ på\\ samme\\ tidspunkt}\n",
|
||||
"$$\n",
|
||||
"\n",
|
||||
"$$\n",
|
||||
"PPR = \\frac{PP_{eksponerede}}{PP_{ikke\\ eksponerede}}\n",
|
||||
"$$"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 7,
|
||||
"id": "bdd4eb49",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/markdown": [
|
||||
"\n",
|
||||
"$PP_{eksponerede} = \\frac{33}{101} \\approx 32.67%$\\%\n",
|
||||
"\n",
|
||||
"$PP_{ikke\\ eksponerede} = \\frac{19}{90} \\approx 21.11%$\\%\n",
|
||||
"\n",
|
||||
"$PPR = \\frac{PP_{eksponerede}}{PP_{ikke\\ eksponerede}} = \\frac{0.3267}{0.2111} \\approx 154.77%$\\%\n",
|
||||
"\n",
|
||||
"Prævalensen er 54.77% højere blandt eksponerede i forhold til ikke-eksponerede.\n"
|
||||
],
|
||||
"text/plain": [
|
||||
"<IPython.core.display.Markdown object>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
"output_type": "display_data"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"syge_eksponerede = 33\n",
|
||||
"eksponerede_i_alt = 101\n",
|
||||
"\n",
|
||||
"syge_ikke_eksponerede = 19\n",
|
||||
"ikke_eksponerede_i_alt = 90\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"################################\n",
|
||||
"pp_eksponerede = syge_eksponerede / eksponerede_i_alt\n",
|
||||
"pp_ikke_eksponerede = syge_ikke_eksponerede / ikke_eksponerede_i_alt\n",
|
||||
"ppr = pp_eksponerede / pp_ikke_eksponerede\n",
|
||||
"\n",
|
||||
"display(Markdown(\n",
|
||||
" rf\"\"\"\n",
|
||||
"$PP_{{eksponerede}} = \\frac{{{syge_eksponerede}}}{{{eksponerede_i_alt}}} \\approx {pp_eksponerede:.2%}$\\%\n",
|
||||
"\n",
|
||||
"$PP_{{ikke\\ eksponerede}} = \\frac{{{syge_ikke_eksponerede}}}{{{ikke_eksponerede_i_alt}}} \\approx {pp_ikke_eksponerede:.2%}$\\%\n",
|
||||
"\n",
|
||||
"$PPR = \\frac{{PP_{{eksponerede}}}}{{PP_{{ikke\\ eksponerede}}}} = \\frac{{{pp_eksponerede:.4f}}}{{{pp_ikke_eksponerede:.4f}}} \\approx {ppr:.2%}$\\%\n",
|
||||
"\n",
|
||||
"Prævalensen er {ppr-1:.2%} højere blandt eksponerede i forhold til ikke-eksponerede.\n",
|
||||
"\"\"\"\n",
|
||||
"))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "5f8b2150",
|
||||
"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
|
||||
}
|
||||
Loading…
Reference in New Issue