patches to improve code output
This commit is contained in:
parent
e12a7c96ae
commit
0687f47226
|
|
@ -2,7 +2,7 @@
|
||||||
"cells": [
|
"cells": [
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 1,
|
"execution_count": 2,
|
||||||
"id": "bac57c6e-48a0-4414-bf65-ed4ff751aa87",
|
"id": "bac57c6e-48a0-4414-bf65-ed4ff751aa87",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [],
|
"outputs": [],
|
||||||
|
|
@ -91,7 +91,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 2,
|
"execution_count": 9,
|
||||||
"id": "af36924c-e2e7-46cf-9bde-5a94b9d427e3",
|
"id": "af36924c-e2e7-46cf-9bde-5a94b9d427e3",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [
|
"outputs": [
|
||||||
|
|
@ -107,11 +107,13 @@
|
||||||
"| Test negativ | 20 | 3142 | 3162 |\n",
|
"| Test negativ | 20 | 3142 | 3162 |\n",
|
||||||
"| I alt | 137 | 3938 | **4075** |\n",
|
"| I alt | 137 | 3938 | **4075** |\n",
|
||||||
"\n",
|
"\n",
|
||||||
"Sensitivitet $= 85.40%$\\%\n",
|
"<span style='color:red'>Sensitivitet = 85.40%</span>\n",
|
||||||
"\n",
|
"\n",
|
||||||
"Specificitet $= 79.79%$\\%\n",
|
"<span style='color:blue'>Specificitet = 79.79%</span>\n",
|
||||||
"\n",
|
"\n",
|
||||||
"\n"
|
"For personer, der er syge, vil testen altså 85.40% af tiden vise positiv.\n",
|
||||||
|
"\n",
|
||||||
|
"Ligeledes vil testen for personer, der ikke er syge, vise negativ 79.79% af tiden.\n"
|
||||||
],
|
],
|
||||||
"text/plain": [
|
"text/plain": [
|
||||||
"<IPython.core.display.Markdown object>"
|
"<IPython.core.display.Markdown object>"
|
||||||
|
|
@ -150,11 +152,13 @@
|
||||||
"| Test negativ | {falsk_negative} | {sandt_negative} | {sum_negative} |\n",
|
"| Test negativ | {falsk_negative} | {sandt_negative} | {sum_negative} |\n",
|
||||||
"| I alt | {sum_syge} | {sum_ikke_syge} | **{sum_positive + sum_negative}** |\n",
|
"| I alt | {sum_syge} | {sum_ikke_syge} | **{sum_positive + sum_negative}** |\n",
|
||||||
"\n",
|
"\n",
|
||||||
"Sensitivitet $= {sensitivitet:.2%}$\\%\n",
|
"<span style='color:red'>Sensitivitet = {sensitivitet:.2%}</span>\n",
|
||||||
"\n",
|
"\n",
|
||||||
"Specificitet $= {specificitet:.2%}$\\%\n",
|
"<span style='color:blue'>Specificitet = {specificitet:.2%}</span>\n",
|
||||||
"\n",
|
"\n",
|
||||||
|
"For personer, der er syge, vil testen altså {sensitivitet:.2%} af tiden vise positiv.\n",
|
||||||
"\n",
|
"\n",
|
||||||
|
"Ligeledes vil testen for personer, der ikke er syge, vise negativ {specificitet:.2%} af tiden.\n",
|
||||||
"\"\"\"\n",
|
"\"\"\"\n",
|
||||||
"))"
|
"))"
|
||||||
]
|
]
|
||||||
|
|
@ -179,7 +183,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 3,
|
"execution_count": 11,
|
||||||
"id": "0b81b6b9-268a-4338-bff9-d5a7c1636a67",
|
"id": "0b81b6b9-268a-4338-bff9-d5a7c1636a67",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [
|
"outputs": [
|
||||||
|
|
@ -187,16 +191,20 @@
|
||||||
"data": {
|
"data": {
|
||||||
"text/markdown": [
|
"text/markdown": [
|
||||||
"\n",
|
"\n",
|
||||||
"$$\n",
|
"$\n",
|
||||||
"PPV = \\frac{sensitivitet \\cdot prævalens}{sensitivitet \\cdot prævalens + (1-specificitet) \\cdot (1-prævalens)}\n",
|
"PPV = \\frac{sensitivitet \\cdot prævalens}{sensitivitet \\cdot prævalens + (1-specificitet) \\cdot (1-prævalens)}\n",
|
||||||
"$$\n",
|
"$\n",
|
||||||
"$$\n",
|
"\n",
|
||||||
|
"$\n",
|
||||||
"= \\frac{0.854 \\cdot 0.05}{0.854 \\cdot 0.05 + (1-0.798) \\cdot (1-0.05)}\n",
|
"= \\frac{0.854 \\cdot 0.05}{0.854 \\cdot 0.05 + (1-0.798) \\cdot (1-0.05)}\n",
|
||||||
"$$\n",
|
"$\n",
|
||||||
"$$\n",
|
"\n",
|
||||||
|
"$\n",
|
||||||
"= 18.20%\n",
|
"= 18.20%\n",
|
||||||
"\\%\n",
|
"\\%\n",
|
||||||
"$$\n"
|
"$\n",
|
||||||
|
"\n",
|
||||||
|
"Altså vil der være en sandsynlighed på 18.20% for, at en person faktisk er syg, hvis testen er positiv.\n"
|
||||||
],
|
],
|
||||||
"text/plain": [
|
"text/plain": [
|
||||||
"<IPython.core.display.Markdown object>"
|
"<IPython.core.display.Markdown object>"
|
||||||
|
|
@ -215,16 +223,20 @@
|
||||||
"\n",
|
"\n",
|
||||||
"display(Markdown(\n",
|
"display(Markdown(\n",
|
||||||
" rf\"\"\"\n",
|
" rf\"\"\"\n",
|
||||||
"$$\n",
|
"$\n",
|
||||||
"PPV = \\frac{{sensitivitet \\cdot prævalens}}{{sensitivitet \\cdot prævalens + (1-specificitet) \\cdot (1-prævalens)}}\n",
|
"PPV = \\frac{{sensitivitet \\cdot prævalens}}{{sensitivitet \\cdot prævalens + (1-specificitet) \\cdot (1-prævalens)}}\n",
|
||||||
"$$\n",
|
"$\n",
|
||||||
"$$\n",
|
"\n",
|
||||||
|
"$\n",
|
||||||
"= \\frac{{{sensitivitet} \\cdot {prævalens}}}{{{sensitivitet} \\cdot {prævalens} + (1-{specificitet}) \\cdot (1-{prævalens})}}\n",
|
"= \\frac{{{sensitivitet} \\cdot {prævalens}}}{{{sensitivitet} \\cdot {prævalens} + (1-{specificitet}) \\cdot (1-{prævalens})}}\n",
|
||||||
"$$\n",
|
"$\n",
|
||||||
"$$\n",
|
"\n",
|
||||||
|
"$\n",
|
||||||
"= {ppv:.2%}\n",
|
"= {ppv:.2%}\n",
|
||||||
"\\%\n",
|
"\\%\n",
|
||||||
"$$\n",
|
"$\n",
|
||||||
|
"\n",
|
||||||
|
"Altså vil der være en sandsynlighed på {ppv:.2%} for, at en person faktisk er syg, hvis testen er positiv.\n",
|
||||||
"\"\"\"\n",
|
"\"\"\"\n",
|
||||||
"))"
|
"))"
|
||||||
]
|
]
|
||||||
|
|
@ -240,7 +252,7 @@
|
||||||
],
|
],
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"kernelspec": {
|
"kernelspec": {
|
||||||
"display_name": "Python 3 (ipykernel)",
|
"display_name": "base",
|
||||||
"language": "python",
|
"language": "python",
|
||||||
"name": "python3"
|
"name": "python3"
|
||||||
},
|
},
|
||||||
|
|
@ -254,7 +266,7 @@
|
||||||
"name": "python",
|
"name": "python",
|
||||||
"nbconvert_exporter": "python",
|
"nbconvert_exporter": "python",
|
||||||
"pygments_lexer": "ipython3",
|
"pygments_lexer": "ipython3",
|
||||||
"version": "3.14.5"
|
"version": "3.13.9"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nbformat": 4,
|
"nbformat": 4,
|
||||||
|
|
|
||||||
|
|
@ -98,13 +98,34 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 5,
|
"execution_count": 9,
|
||||||
"id": "9ef67735",
|
"id": "9ef67735",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [
|
"outputs": [
|
||||||
{
|
{
|
||||||
"data": {
|
"data": {
|
||||||
"text/markdown": [
|
"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": [
|
||||||
|
"<IPython.core.display.Markdown object>"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "display_data"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"text/markdown": [
|
||||||
|
"\n",
|
||||||
|
"### Hyppigheds- og associationsmål\n",
|
||||||
"\n",
|
"\n",
|
||||||
"$odds_{blodprop} = \\frac{26}{32} = 0.8125$\n",
|
"$odds_{blodprop} = \\frac{26}{32} = 0.8125$\n",
|
||||||
"\n",
|
"\n",
|
||||||
|
|
@ -137,8 +158,27 @@
|
||||||
"odds_kontrol = antal_raske_eksponerede / antal_raske_ikke_eksponerede\n",
|
"odds_kontrol = antal_raske_eksponerede / antal_raske_ikke_eksponerede\n",
|
||||||
"oddsratio = odds_syge / odds_kontrol\n",
|
"oddsratio = odds_syge / odds_kontrol\n",
|
||||||
"\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",
|
"display(Markdown(\n",
|
||||||
" rf\"\"\"\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",
|
"$odds_{{{udfald}}} = \\frac{{{antal_syge_eksponerede}}}{{{antal_syge_ikke_eksponerede}}} = {odds_syge:.4f}$\n",
|
||||||
"\n",
|
"\n",
|
||||||
"$odds_{{kontrol}} = \\frac{{{antal_raske_eksponerede}}}{{{antal_raske_ikke_eksponerede}}} = {odds_kontrol:.4f}$\n",
|
"$odds_{{kontrol}} = \\frac{{{antal_raske_eksponerede}}}{{{antal_raske_ikke_eksponerede}}} = {odds_kontrol:.4f}$\n",
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
"cells": [
|
"cells": [
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 1,
|
"execution_count": 2,
|
||||||
"id": "f0d18716",
|
"id": "f0d18716",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [],
|
"outputs": [],
|
||||||
|
|
@ -129,7 +129,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 23,
|
"execution_count": 4,
|
||||||
"id": "1e61db8b",
|
"id": "1e61db8b",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [],
|
"outputs": [],
|
||||||
|
|
@ -186,7 +186,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 37,
|
"execution_count": 5,
|
||||||
"id": "e7d81100",
|
"id": "e7d81100",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [
|
"outputs": [
|
||||||
|
|
@ -194,7 +194,7 @@
|
||||||
"data": {
|
"data": {
|
||||||
"text/markdown": [
|
"text/markdown": [
|
||||||
"\n",
|
"\n",
|
||||||
"95%-CI\n",
|
"95%-CI med eksakt formel:\n",
|
||||||
"\n",
|
"\n",
|
||||||
"$=\\left[\\bar{x} \\pm t' \\cdot se\\right]$\n",
|
"$=\\left[\\bar{x} \\pm t' \\cdot se\\right]$\n",
|
||||||
"\n",
|
"\n",
|
||||||
|
|
@ -220,7 +220,7 @@
|
||||||
"t_se = t_value(0.025, n-1) * standard_error\n",
|
"t_se = t_value(0.025, n-1) * standard_error\n",
|
||||||
"display(Markdown(\n",
|
"display(Markdown(\n",
|
||||||
" rf\"\"\"\n",
|
" rf\"\"\"\n",
|
||||||
"95%-CI\n",
|
"95%-CI med eksakt formel:\n",
|
||||||
"\n",
|
"\n",
|
||||||
"$=\\left[\\bar{{x}} \\pm t' \\cdot se\\right]$\n",
|
"$=\\left[\\bar{{x}} \\pm t' \\cdot se\\right]$\n",
|
||||||
"\n",
|
"\n",
|
||||||
|
|
|
||||||
132
To Binære.ipynb
132
To Binære.ipynb
|
|
@ -2,7 +2,7 @@
|
||||||
"cells": [
|
"cells": [
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 2,
|
"execution_count": 1,
|
||||||
"id": "42259d82",
|
"id": "42259d82",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [],
|
"outputs": [],
|
||||||
|
|
@ -47,39 +47,27 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "markdown",
|
"cell_type": "markdown",
|
||||||
"id": "82a22acc",
|
"id": "3ef266dc",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"source": [
|
"source": [
|
||||||
"# Hyppigheds- og associationsmål"
|
"# $\\Chi^2$-test\n",
|
||||||
|
"\n",
|
||||||
|
"| | Kolonne 1| Kolonne 2 |\n",
|
||||||
|
"|-|---------|---------|\n",
|
||||||
|
"|Række 1| R1 K1| R1 K2|\n",
|
||||||
|
"|Række 2| R2 K1| R2 K2|"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": null,
|
"execution_count": null,
|
||||||
"id": "9920c0f3",
|
"id": "7c426592",
|
||||||
"metadata": {},
|
|
||||||
"outputs": [],
|
|
||||||
"source": [
|
|
||||||
"# Odds risiko\n",
|
|
||||||
"# Relativ risiko\n",
|
|
||||||
"# Risiko differens"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"cell_type": "code",
|
|
||||||
"execution_count": 20,
|
|
||||||
"id": "d8e8f8ea",
|
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [
|
"outputs": [
|
||||||
{
|
{
|
||||||
"data": {
|
"data": {
|
||||||
"text/markdown": [
|
"text/markdown": [
|
||||||
"\n",
|
"$H_0$: $\\pi_1 = \\pi_0$, altså ingen sammenhæng mellem rækker og søjler, hvilket vil sige ingen sammenhæng mellem eksponering og udfald."
|
||||||
"Prævalens (Høj skærmtid) $= \\frac{210}{460} = 0.4565 \\approx 45.65%$ \\%\n",
|
|
||||||
"\n",
|
|
||||||
"Prævalens (Lav skærmtid) $= \\frac{90}{360} = 0.2500 \\approx 25.00%$ \\%\n",
|
|
||||||
"\n",
|
|
||||||
"PPR $= \\frac{0.4565}{0.2500} = 1.8261$\n"
|
|
||||||
],
|
],
|
||||||
"text/plain": [
|
"text/plain": [
|
||||||
"<IPython.core.display.Markdown object>"
|
"<IPython.core.display.Markdown object>"
|
||||||
|
|
@ -87,44 +75,7 @@
|
||||||
},
|
},
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"output_type": "display_data"
|
"output_type": "display_data"
|
||||||
}
|
|
||||||
],
|
|
||||||
"source": [
|
|
||||||
"kategorier = ['Høj skærmtid', 'Lav skærmtid']\n",
|
|
||||||
"data = [[210, 460],\n",
|
|
||||||
" [90, 360]]\n",
|
|
||||||
"\n",
|
|
||||||
"\n",
|
|
||||||
"\n",
|
|
||||||
"####################################\n",
|
|
||||||
"prævalens1 = data[0][0] / data[0][1]\n",
|
|
||||||
"prævalens2 = data[1][0] / data[1][1]\n",
|
|
||||||
"\n",
|
|
||||||
"display(Markdown(\n",
|
|
||||||
" rf\"\"\"\n",
|
|
||||||
"Prævalens ({kategorier[0]}) $= \\frac{{{data[0][0]}}}{{{data[0][1]}}} = {prævalens1:.4f} \\approx {prævalens1:.2%}$ \\%\n",
|
|
||||||
"\n",
|
|
||||||
"Prævalens ({kategorier[1]}) $= \\frac{{{data[1][0]}}}{{{data[1][1]}}} = {prævalens2:.4f} \\approx {prævalens2:.2%}$ \\%\n",
|
|
||||||
"\n",
|
|
||||||
"PPR $= \\frac{{{prævalens1:.4f}}}{{{prævalens2:.4f}}} = {prævalens1 / prævalens2:.4f}$\n",
|
|
||||||
"\"\"\"\n",
|
|
||||||
"))"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"cell_type": "markdown",
|
|
||||||
"id": "3ef266dc",
|
|
||||||
"metadata": {},
|
|
||||||
"source": [
|
|
||||||
"# $\\Chi^2$-test"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"cell_type": "code",
|
|
||||||
"execution_count": 4,
|
|
||||||
"id": "7c426592",
|
|
||||||
"metadata": {},
|
|
||||||
"outputs": [
|
|
||||||
{
|
{
|
||||||
"data": {
|
"data": {
|
||||||
"text/markdown": [
|
"text/markdown": [
|
||||||
|
|
@ -187,11 +138,26 @@
|
||||||
"data": {
|
"data": {
|
||||||
"text/markdown": [
|
"text/markdown": [
|
||||||
"\n",
|
"\n",
|
||||||
"$\\Chi^2$-værdi: 36.24\n",
|
"Frihedsgrader: 1\n",
|
||||||
"\n",
|
"\n",
|
||||||
"$p$-værdi: 1.7e-09\n",
|
"Udregnet ved brug af Python-biblioteket `scipy.stats.chi2_contingency`:\n",
|
||||||
"\n",
|
"\n",
|
||||||
"Frihedsgrader: 1\n"
|
"$\\Chi^2$-værdi/teststørrelse: 36.24\n",
|
||||||
|
"\n",
|
||||||
|
"$p$-værdi: 1.7e-09 $\\ll 0.05$\n"
|
||||||
|
],
|
||||||
|
"text/plain": [
|
||||||
|
"<IPython.core.display.Markdown object>"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "display_data"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"text/markdown": [
|
||||||
|
"\n",
|
||||||
|
"Da $p$ $\\ll 0.05$, kan nulhypotesen $\\pi_1 = \\pi_0$ forkastes. Der er altså signifikant sammenhæng mellem udfald og eksponering.\n"
|
||||||
],
|
],
|
||||||
"text/plain": [
|
"text/plain": [
|
||||||
"<IPython.core.display.Markdown object>"
|
"<IPython.core.display.Markdown object>"
|
||||||
|
|
@ -202,16 +168,26 @@
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"source": [
|
"source": [
|
||||||
"rækker = ['Høj skærmtid', 'Lav skærmtid']\n",
|
|
||||||
"kolonner = ['Hovedpine', 'Ingen hovedpine']\n",
|
"kolonner = ['Hovedpine', 'Ingen hovedpine']\n",
|
||||||
"data = [[210, 250], \n",
|
"rækker = ['Høj skærmtid',\n",
|
||||||
" [90, 270]]\n",
|
" 'Lav skærmtid']\n",
|
||||||
|
"data = [[210, 250], # R1 K1 , R1 K2\n",
|
||||||
|
" [90, 270]] # R2 K1 , R2 K2\n",
|
||||||
"\n",
|
"\n",
|
||||||
"\n",
|
"\n",
|
||||||
"\n",
|
"\n",
|
||||||
"############################################\n",
|
"############################################\n",
|
||||||
"stat, p, dof, expected = chi2_contingency(data)\n",
|
"stat, p, dof, expected = chi2_contingency(data)\n",
|
||||||
|
"p_threshold = 0.05\n",
|
||||||
|
"match p:\n",
|
||||||
|
" case p if p >= p_threshold:\n",
|
||||||
|
" p_text = f'$\\ge {p_threshold}$'\n",
|
||||||
|
" case p if p < p_threshold/100:\n",
|
||||||
|
" p_text = f'$\\ll {p_threshold}$'\n",
|
||||||
|
" case _:\n",
|
||||||
|
" p_text = f'$\\lt {p_threshold}$'\n",
|
||||||
"\n",
|
"\n",
|
||||||
|
"display(Markdown(rf\"$H_0$: $\\pi_1 = \\pi_0$, altså ingen sammenhæng mellem rækker og søjler, hvilket vil sige ingen sammenhæng mellem eksponering og udfald.\"))\n",
|
||||||
"display(Markdown('### Observeret:'))\n",
|
"display(Markdown('### Observeret:'))\n",
|
||||||
"_display_table(data, rækker, kolonner)\n",
|
"_display_table(data, rækker, kolonner)\n",
|
||||||
"display(Markdown('### Forventet:'))\n",
|
"display(Markdown('### Forventet:'))\n",
|
||||||
|
|
@ -219,13 +195,29 @@
|
||||||
"\n",
|
"\n",
|
||||||
"display(Markdown(\n",
|
"display(Markdown(\n",
|
||||||
" rf\"\"\"\n",
|
" rf\"\"\"\n",
|
||||||
"$\\Chi^2$-værdi: {stat:.2f}\n",
|
|
||||||
"\n",
|
|
||||||
"$p$-værdi: {p:.2}\n",
|
|
||||||
"\n",
|
|
||||||
"Frihedsgrader: {dof}\n",
|
"Frihedsgrader: {dof}\n",
|
||||||
|
"\n",
|
||||||
|
"Udregnet ved brug af Python-biblioteket `scipy.stats.chi2_contingency`:\n",
|
||||||
|
"\n",
|
||||||
|
"$\\Chi^2$-værdi (teststørrelse): {stat:.2f}\n",
|
||||||
|
"\n",
|
||||||
|
"$p$-værdi: {p:.2} {p_text}\n",
|
||||||
"\"\"\"\n",
|
"\"\"\"\n",
|
||||||
"))\n"
|
"))\n",
|
||||||
|
"\n",
|
||||||
|
"if p < p_threshold:\n",
|
||||||
|
" display(Markdown(\n",
|
||||||
|
" rf\"\"\"\n",
|
||||||
|
"Da $p$ {p_text}, kan nulhypotesen $\\pi_1 = \\pi_0$ forkastes. Der er altså signifikant sammenhæng mellem udfald og eksponering.\n",
|
||||||
|
"\"\"\"\n",
|
||||||
|
" ))\n",
|
||||||
|
"\n",
|
||||||
|
"else:\n",
|
||||||
|
" display(Markdown(\n",
|
||||||
|
" rf\"\"\"\n",
|
||||||
|
"Da $p$ {p_text}, kan nulhypotesen $\\pi_1 = \\pi_0$ ikke forkastes. Altså kan uafhængighed mellem udfald og eksponering ikke afvises.\n",
|
||||||
|
"\"\"\"\n",
|
||||||
|
" ))"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
"cells": [
|
"cells": [
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": null,
|
"execution_count": 2,
|
||||||
"id": "0ba6d314",
|
"id": "0ba6d314",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [],
|
"outputs": [],
|
||||||
|
|
@ -72,25 +72,27 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 61,
|
"execution_count": null,
|
||||||
"id": "7e734740",
|
"id": "7e734740",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [
|
"outputs": [
|
||||||
{
|
{
|
||||||
"data": {
|
"data": {
|
||||||
"text/markdown": [
|
"text/markdown": [
|
||||||
|
"\n",
|
||||||
|
"Middeldifference: $\\bar{x} = \\bar{x}_1 - \\bar{x}_2 = 1.44 - 1.26 = 0.180$\n",
|
||||||
"\n",
|
"\n",
|
||||||
"$H_0: \\mu_1 = \\mu_2 \\Rightarrow \\mu_1 - \\mu_2 = 0$\n",
|
"$H_0: \\mu_1 = \\mu_2 \\Rightarrow \\mu_1 - \\mu_2 = 0$\n",
|
||||||
"\n",
|
"\n",
|
||||||
"Test: uparret t-test med $df = 150 + 300 - 2 = 448$ frihedsgrader\n",
|
"Test: uparret t-test med $df = 36 + 36 - 2 = 70$ frihedsgrader\n",
|
||||||
"\n",
|
"\n",
|
||||||
"$SD_{fælles} = \\sqrt{ \\frac{ (n_1 - 1)\\cdot SD_1^2 + (n_2-1) \\cdot SD_2^2 }{ n_1 + n_2 - 2 } } = \\sqrt{ \\frac{ (150 - 1)\\cdot 1.7^2 + (300-1) \\cdot 1.8^2 }{ 150 + 300 - 2 } } = 1.7674$\n",
|
"$SD_{fælles} = \\sqrt{ \\frac{ (n_1 - 1)\\cdot SD_1^2 + (n_2-1) \\cdot SD_2^2 }{ n_1 + n_2 - 2 } } = \\sqrt{ \\frac{ (36 - 1)\\cdot 0.25^2 + (36-1) \\cdot 0.32^2 }{ 36 + 36 - 2 } } = 0.2871$\n",
|
||||||
"\n",
|
"\n",
|
||||||
"$se(\\bar{x_1} - \\bar{x_2}) = \\sqrt{\\frac{1}{n_1} + \\frac{1}{n_2}} \\cdot SD_{fælles} = \\sqrt{\\frac{1}{150} + \\frac{1}{300}} \\cdot 1.7674 = 0.1767$\n",
|
"$se(\\bar{x_1} - \\bar{x_2}) = \\sqrt{\\frac{1}{n_1} + \\frac{1}{n_2}} \\cdot SD_{fælles} = \\sqrt{\\frac{1}{36} + \\frac{1}{36}} \\cdot 0.2871 = 0.0677$\n",
|
||||||
"\n",
|
"\n",
|
||||||
"$t(x) = \\frac{\\bar{x_1} - \\bar{x_2}}{se(\\bar{x_1} - \\bar{x_2})} = \\frac{21.9 - 21.6}{0.1767} = 1.6974$\n",
|
"$t(x) = \\frac{\\bar{x_1} - \\bar{x_2}}{se(\\bar{x_1} - \\bar{x_2})} = \\frac{1.44 - 1.26}{0.0677} = 2.6596$\n",
|
||||||
"\n",
|
"\n",
|
||||||
"For en t-test med 448 frihedsgrader og et signifikansniveau på $\\alpha = 0.05$ er den kritiske værdi for $t(x) = 1.9653$.\n"
|
"p-værdi for $|t(x)|$ ved 70 frihedsgrader: 0.0097 $\\lt 0.05$\n"
|
||||||
],
|
],
|
||||||
"text/plain": [
|
"text/plain": [
|
||||||
"<IPython.core.display.Markdown object>"
|
"<IPython.core.display.Markdown object>"
|
||||||
|
|
@ -103,7 +105,7 @@
|
||||||
"data": {
|
"data": {
|
||||||
"text/markdown": [
|
"text/markdown": [
|
||||||
"\n",
|
"\n",
|
||||||
"Da teststørrelsen $t(x)$ er mindre end den kritiske værdi, kan nulhypotesen $H_0: \\mu_1 - \\mu_2 = 0$ ikke forkastes.\n"
|
"Da $p$ $\\lt 0.05$, kan nulhypotesen $H_0: \\mu_1 - \\mu_2 = 0$ forkastes. Der er altså statistisk signifikant forskel mellem middelværdierne.\n"
|
||||||
],
|
],
|
||||||
"text/plain": [
|
"text/plain": [
|
||||||
"<IPython.core.display.Markdown object>"
|
"<IPython.core.display.Markdown object>"
|
||||||
|
|
@ -114,13 +116,13 @@
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"source": [
|
"source": [
|
||||||
"middel1 = 21.9\n",
|
"middel1 = 1.44\n",
|
||||||
"n1 = 150\n",
|
"n1 = 36\n",
|
||||||
"sd1 = 1.7\n",
|
"sd1 = 0.25\n",
|
||||||
"\n",
|
"\n",
|
||||||
"middel2 = 21.6\n",
|
"middel2 = 1.26\n",
|
||||||
"n2 = 300\n",
|
"n2 = 36\n",
|
||||||
"sd2 = 1.8\n",
|
"sd2 = 0.32\n",
|
||||||
"\n",
|
"\n",
|
||||||
"\n",
|
"\n",
|
||||||
"\n",
|
"\n",
|
||||||
|
|
@ -129,10 +131,20 @@
|
||||||
"sd_fælles = math.sqrt(((n1-1)*sd1**2 + (n2-1)*sd2**2) / (n1 + n2 - 2))\n",
|
"sd_fælles = math.sqrt(((n1-1)*sd1**2 + (n2-1)*sd2**2) / (n1 + n2 - 2))\n",
|
||||||
"se_fælles = math.sqrt(1/n1 + 1/n2) * sd_fælles\n",
|
"se_fælles = math.sqrt(1/n1 + 1/n2) * sd_fælles\n",
|
||||||
"t_x = (middel1 - middel2)/(se_fælles)\n",
|
"t_x = (middel1 - middel2)/(se_fælles)\n",
|
||||||
"crit_t = t_test.ppf(1-0.05/2, dof)\n",
|
"p_threshold = 0.05\n",
|
||||||
|
"p_værdi = (1 - t_test.cdf(t_x, dof))*2\n",
|
||||||
|
"match p_værdi:\n",
|
||||||
|
" case p_værdi if p_værdi >= p_threshold:\n",
|
||||||
|
" p_text = f'$\\ge {p_threshold}$'\n",
|
||||||
|
" case p_værdi if p_værdi < p_threshold/100:\n",
|
||||||
|
" p_text = f'$\\ll {p_threshold}$'\n",
|
||||||
|
" case _:\n",
|
||||||
|
" p_text = f'$\\lt {p_threshold}$'\n",
|
||||||
"\n",
|
"\n",
|
||||||
"display(Markdown(\n",
|
"display(Markdown(\n",
|
||||||
" rf\"\"\"\n",
|
" rf\"\"\"\n",
|
||||||
|
"Middeldifference: $\\bar{{x}} = \\bar{{x}}_1 - \\bar{{x}}_2 = {middel1} - {middel2} = {middel1 - middel2:.3f}$\n",
|
||||||
|
"\n",
|
||||||
"$H_0: \\mu_1 = \\mu_2 \\Rightarrow \\mu_1 - \\mu_2 = 0$\n",
|
"$H_0: \\mu_1 = \\mu_2 \\Rightarrow \\mu_1 - \\mu_2 = 0$\n",
|
||||||
"\n",
|
"\n",
|
||||||
"Test: uparret t-test med $df = {n1} + {n2} - 2 = {dof}$ frihedsgrader\n",
|
"Test: uparret t-test med $df = {n1} + {n2} - 2 = {dof}$ frihedsgrader\n",
|
||||||
|
|
@ -143,20 +155,20 @@
|
||||||
"\n",
|
"\n",
|
||||||
"$t(x) = \\frac{{\\bar{{x_1}} - \\bar{{x_2}}}}{{se(\\bar{{x_1}} - \\bar{{x_2}})}} = \\frac{{{middel1} - {middel2}}}{{{se_fælles:.4f}}} = {t_x:.4f}$\n",
|
"$t(x) = \\frac{{\\bar{{x_1}} - \\bar{{x_2}}}}{{se(\\bar{{x_1}} - \\bar{{x_2}})}} = \\frac{{{middel1} - {middel2}}}{{{se_fælles:.4f}}} = {t_x:.4f}$\n",
|
||||||
"\n",
|
"\n",
|
||||||
"For en t-test med {dof} frihedsgrader og et signifikansniveau på $\\alpha = 0.05$ er den kritiske værdi for $t(x) = {crit_t:.4f}$.\n",
|
"p-værdi for $|t(x)|$ ved {dof} frihedsgrader: {p_værdi:.4f} {p_text} (fundet ved brug af Python-biblioteket `scipy.stats.t`)\n",
|
||||||
"\"\"\"\n",
|
"\"\"\"\n",
|
||||||
"))\n",
|
"))\n",
|
||||||
"\n",
|
"\n",
|
||||||
"if t_x > crit_t:\n",
|
"if p_værdi < p_threshold:\n",
|
||||||
" display(Markdown(\n",
|
" display(Markdown(\n",
|
||||||
" rf\"\"\"\n",
|
" rf\"\"\"\n",
|
||||||
"Da teststørrelsen $t(x)$ er større end den kritiske værdi, kan nulhypotesen $H_0: \\mu_1 - \\mu_2 = 0$ forkastes.\n",
|
"Da $p$ {p_text}, kan nulhypotesen $H_0: \\mu_1 - \\mu_2 = 0$ forkastes. Der er altså statistisk signifikant forskel mellem middelværdierne.\n",
|
||||||
"\"\"\"\n",
|
"\"\"\"\n",
|
||||||
" ))\n",
|
" ))\n",
|
||||||
"else:\n",
|
"else:\n",
|
||||||
" display(Markdown(\n",
|
" display(Markdown(\n",
|
||||||
" rf\"\"\"\n",
|
" rf\"\"\"\n",
|
||||||
"Da teststørrelsen $t(x)$ er mindre end den kritiske værdi, kan nulhypotesen $H_0: \\mu_1 - \\mu_2 = 0$ ikke forkastes.\n",
|
"Da $p$ {p_text}, kan nulhypotesen $H_0: \\mu_1 - \\mu_2 = 0$ ikke forkastes. Der kan altså ikke siges at være statistisk signifikant forskel mellem middelværdierne.\n",
|
||||||
"\"\"\"\n",
|
"\"\"\"\n",
|
||||||
" ))"
|
" ))"
|
||||||
]
|
]
|
||||||
|
|
@ -195,7 +207,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 75,
|
"execution_count": 20,
|
||||||
"id": "bdc8cd82",
|
"id": "bdc8cd82",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [
|
"outputs": [
|
||||||
|
|
@ -203,19 +215,21 @@
|
||||||
"data": {
|
"data": {
|
||||||
"text/markdown": [
|
"text/markdown": [
|
||||||
"\n",
|
"\n",
|
||||||
"$\\bar{x}_1 = 21.9$\n",
|
"$\\bar{x}_1 = 1.44$\n",
|
||||||
"\n",
|
"\n",
|
||||||
"$\\bar{x}_2 = 21.6$\n",
|
"$\\bar{x}_2 = 1.26$\n",
|
||||||
"\n",
|
"\n",
|
||||||
"$SD_{fælles} = \\sqrt{ \\frac{ (n_1 - 1)\\cdot SD_1^2 + (n_2-1) \\cdot SD_2^2 }{ n_1 + n_2 - 2 } } = \\sqrt{ \\frac{ (150 - 1)\\cdot 1.7^2 + (300-1) \\cdot 1.8^2 }{ 150 + 300 - 2 } } = 1.7674$\n",
|
"Eksakt formel:\n",
|
||||||
"\n",
|
"\n",
|
||||||
"$se(\\bar{x_1} - \\bar{x_2}) = \\sqrt{\\frac{1}{n_1} + \\frac{1}{n_2}} \\cdot SD_{fælles} = \\sqrt{\\frac{1}{150} + \\frac{1}{300}} \\cdot 1.7674 = 0.1767$\n",
|
"$SD_{fælles} = \\sqrt{ \\frac{ (n_1 - 1)\\cdot SD_1^2 + (n_2-1) \\cdot SD_2^2 }{ n_1 + n_2 - 2 } } = \\sqrt{ \\frac{ (36 - 1)\\cdot 0.25^2 + (36-1) \\cdot 0.32^2 }{ 36 + 36 - 2 } } = 0.2871$\n",
|
||||||
|
"\n",
|
||||||
|
"$se(\\bar{x_1} - \\bar{x_2}) = \\sqrt{\\frac{1}{n_1} + \\frac{1}{n_2}} \\cdot SD_{fælles} = \\sqrt{\\frac{1}{36} + \\frac{1}{36}} \\cdot 0.2871 = 0.0677$\n",
|
||||||
"\n",
|
"\n",
|
||||||
"$95\\% CI(\\mu_1 - \\mu_2) = \\bar{x}_1 - \\bar{x}_2 \\pm t' \\cdot se(\\bar{x}_1 - \\bar{x}_2)$\n",
|
"$95\\% CI(\\mu_1 - \\mu_2) = \\bar{x}_1 - \\bar{x}_2 \\pm t' \\cdot se(\\bar{x}_1 - \\bar{x}_2)$\n",
|
||||||
"\n",
|
"\n",
|
||||||
"$= 21.9 - 21.6 \\pm 1.965 \\cdot 0.177$\n",
|
"$= 1.44 - 1.26 \\pm 1.994 \\cdot 0.068$\n",
|
||||||
"\n",
|
"\n",
|
||||||
"$= 0.300 \\pm 0.347 = \\left[-0.047\\ ;\\ 0.647\\right]$\n"
|
"$= 0.180 \\pm 0.135 = \\left[0.045\\ ;\\ 0.315\\right]$\n"
|
||||||
],
|
],
|
||||||
"text/plain": [
|
"text/plain": [
|
||||||
"<IPython.core.display.Markdown object>"
|
"<IPython.core.display.Markdown object>"
|
||||||
|
|
@ -228,7 +242,7 @@
|
||||||
"data": {
|
"data": {
|
||||||
"text/markdown": [
|
"text/markdown": [
|
||||||
"\n",
|
"\n",
|
||||||
"Da $0$ er inkluderet i $95\\%CI$, kan der ikke siges at være signifikant forskel på middelværdierne.\n"
|
"Da $0$ ikke er inkluderet i $95\\%CI$, kan der siges at være signifikant forskel på middelværdierne.\n"
|
||||||
],
|
],
|
||||||
"text/plain": [
|
"text/plain": [
|
||||||
"<IPython.core.display.Markdown object>"
|
"<IPython.core.display.Markdown object>"
|
||||||
|
|
@ -252,6 +266,8 @@
|
||||||
"\n",
|
"\n",
|
||||||
"$\\bar{{x}}_2 = {middel2}$\n",
|
"$\\bar{{x}}_2 = {middel2}$\n",
|
||||||
"\n",
|
"\n",
|
||||||
|
"Eksakt formel:\n",
|
||||||
|
"\n",
|
||||||
"$SD_{{fælles}} = \\sqrt{{ \\frac{{ (n_1 - 1)\\cdot SD_1^2 + (n_2-1) \\cdot SD_2^2 }}{{ n_1 + n_2 - 2 }} }} = \\sqrt{{ \\frac{{ ({n1} - 1)\\cdot {sd1}^2 + ({n2}-1) \\cdot {sd2}^2 }}{{ {n1} + {n2} - 2 }} }} = {sd_fælles:.4f}$\n",
|
"$SD_{{fælles}} = \\sqrt{{ \\frac{{ (n_1 - 1)\\cdot SD_1^2 + (n_2-1) \\cdot SD_2^2 }}{{ n_1 + n_2 - 2 }} }} = \\sqrt{{ \\frac{{ ({n1} - 1)\\cdot {sd1}^2 + ({n2}-1) \\cdot {sd2}^2 }}{{ {n1} + {n2} - 2 }} }} = {sd_fælles:.4f}$\n",
|
||||||
"\n",
|
"\n",
|
||||||
"$se(\\bar{{x_1}} - \\bar{{x_2}}) = \\sqrt{{\\frac{{1}}{{n_1}} + \\frac{{1}}{{n_2}}}} \\cdot SD_{{fælles}} = \\sqrt{{\\frac{{1}}{{{n1}}} + \\frac{{1}}{{{n2}}}}} \\cdot {sd_fælles:.4f} = {se_fælles:.4f}$\n",
|
"$se(\\bar{{x_1}} - \\bar{{x_2}}) = \\sqrt{{\\frac{{1}}{{n_1}} + \\frac{{1}}{{n_2}}}} \\cdot SD_{{fælles}} = \\sqrt{{\\frac{{1}}{{{n1}}} + \\frac{{1}}{{{n2}}}}} \\cdot {sd_fælles:.4f} = {se_fælles:.4f}$\n",
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue