From 21464af51d7f427b7269789c78706c80f1ffaeb1 Mon Sep 17 00:00:00 2001 From: Peter Scheiblechner <peter.scheiblechner@hslu.ch> Date: Wed, 8 Jan 2025 15:42:56 +0000 Subject: [PATCH] Jupyter Notebooks SW09-11 --- notebooks/SW09/SW09_anova.ipynb | 358 ++++++++++++++++++ notebooks/SW10/SW10_anova_two_way.ipynb | 309 +++++++++++++++ .../SW11/SW11_process_optimization_doe.ipynb | 152 ++++++++ 3 files changed, 819 insertions(+) create mode 100644 notebooks/SW09/SW09_anova.ipynb create mode 100644 notebooks/SW10/SW10_anova_two_way.ipynb create mode 100644 notebooks/SW11/SW11_process_optimization_doe.ipynb diff --git a/notebooks/SW09/SW09_anova.ipynb b/notebooks/SW09/SW09_anova.ipynb new file mode 100644 index 0000000..2ef29ca --- /dev/null +++ b/notebooks/SW09/SW09_anova.ipynb @@ -0,0 +1,358 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Varianz-Analyse" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "tags": [] + }, + "source": [ + "## Beispiel: Reissfestigkeit von Papier\n", + "\n", + "### Paarweise t-Tests" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from pandas import DataFrame\n", + "import scipy.stats as st\n", + "import numpy as np\n", + "\n", + "rf = DataFrame({\n", + " \"HC\": np.repeat([\"05%\", \"10%\", \"15%\", \"20%\"], [6, 6, 6, 6]),\n", + " \"Strength\":[7, 8, 15, 11, 9, 10, 12, 17, 13, 18, 19, 15, 14, 18, 19, 17, 16, 18, 19, 25, 22, 23, 18, 20]\n", + "})\n", + "print(rf)\n", + "per5 = rf.loc[rf[\"HC\"]==\"05%\", \"Strength\"]\n", + "per10 = rf.loc[rf[\"HC\"]==\"10%\", \"Strength\"]\n", + "per15 = rf.loc[rf[\"HC\"]==\"15%\", \"Strength\"]\n", + "per20 = rf.loc[rf[\"HC\"]==\"20%\", \"Strength\"]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "st.ttest_ind(per10,per20)\n", + "print(st.ttest_ind(per10,per20))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Stripcharts" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "from pandas import DataFrame\n", + "import pandas as pd\n", + "import numpy as np\n", + "import scipy.stats as st\n", + "from statsmodels.formula.api import ols\n", + "from statsmodels.stats.anova import anova_lm\n", + "from statsmodels.stats.outliers_influence import summary_table\n", + "import matplotlib.pyplot as plt\n", + "from scipy import stats\n", + "\n", + "rf.plot(kind=\"scatter\", x=\"HC\", y=\"Strength\")\n", + "\n", + "plt.xlabel(\"Hartholzkonzentration\")\n", + "plt.ylabel(\"Reissfestigkeit\")\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Boxplots" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "rf.boxplot(column=\"Strength\",by=\"HC\",grid=False)\n", + "\n", + "plt.xlabel(\"Hartholzkonzentration\")\n", + "plt.ylabel(\"Reissfestigkeit\")\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Koeffizienten des Gruppenmittelmodells" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "fit = ols(\"Strength~HC\",data=rf).fit()\n", + "fit.summary()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(fit.params)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Vertrauensintervalle" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "fit_pred = fit.get_prediction()\n", + "print(fit_pred.conf_int())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Beispiel: Meat" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Stripcharts" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "from pandas import DataFrame\n", + "import pandas as pd\n", + "import numpy as np\n", + "import scipy.stats as st\n", + "from statsmodels.formula.api import ols\n", + "from statsmodels.stats.anova import anova_lm\n", + "from statsmodels.stats.outliers_influence import summary_table\n", + "import matplotlib.pyplot as plt\n", + "from scipy import stats\n", + "\n", + "meat = DataFrame({\n", + " \"Treatment\": np.repeat([\"Kommerziell\",\"Vakuum\",\"Gemischt\",\"CO2\"], [3, 3, 3, 3]),\n", + " \"steak_id\":[7.66, 6.98, 7.80, 5.26, 5.44, 5.80, 7.41, 7.33, 7.04, 3.51, 2.91, 3.66]\n", + "})\n", + "print(meat)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "meat.plot(kind=\"scatter\", x=\"Treatment\", y=\"steak_id\")\n", + "\n", + "plt.xlabel(\"Verpackungsmethode\")\n", + "plt.ylabel(\"Logarithmus Bakterienzahl\")\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Boxplots" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "meat.boxplot(column=\"steak_id\",by=\"Treatment\",grid=False)\n", + "\n", + "plt.xlabel(\"Verpackungsmethode\")\n", + "plt.ylabel(\"Logarithmus Bakterienzahl\")\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Paarweise t-Tests" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "kommerziell = meat.loc[meat[\"Treatment\"]==\"Kommerziell\", \"steak_id\"]\n", + "print(kommerziell)\n", + "vakuum = meat.loc[meat[\"Treatment\"]==\"Vakuum\", \"steak_id\"]\n", + "print(vakuum)\n", + "print(st.ttest_ind(kommerziell, vakuum))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Gruppenmittelmodell : Summary" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "fit = ols(\"steak_id~Treatment\",data=meat).fit()\n", + "fit.summary()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Gruppenmittelmodell : Parameterwerte" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(fit.params)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Die Parametrisierung wurde so gewählt, dass $\\mu=\\mu_1=3.36$, d.h. \n", + "$\\tau_1=0$.\n", + "Die behandlungsspezifischen Abweichungen sind $\\tau_2=3.90$, \n", + "$\\tau_3=4.12$ und $\\tau_4=2.14$. D.h. $\\mu_2=\\mu +\\tau_2 = 3.36+3.90$.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Vertrauensintervalle für Gruppenmittelwerte" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "fit_pred = fit.get_prediction()\n", + "print(fit_pred.conf_int())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Python gibt hier direkt die Vertrauensintervalle der Gruppenmittelwerte $\\mu_i$ an und nicht die Vertrauensintervalle der behandlungsspezifischen Abweichungen." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Anova Tabelle" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "fit = ols(\"steak_id~Treatment\",data=meat).fit()\n", + "anova_lm(fit)\n", + "print(anova_lm(fit))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Der $P$-Wert von $1\\cdot 10^{-6}$ besagt, dass ein Effekt von unterschiedlichen \n", + "Verpackungsmethoden signifikant auf dem 5% Niveau nachgewiesen \n", + "werden kann. Die Gruppenmittelwerte unterscheiden sich also signifikant. " + ] + } + ], + "metadata": { + "anaconda-cloud": {}, + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.11.7" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/notebooks/SW10/SW10_anova_two_way.ipynb b/notebooks/SW10/SW10_anova_two_way.ipynb new file mode 100644 index 0000000..6b5abde --- /dev/null +++ b/notebooks/SW10/SW10_anova_two_way.ipynb @@ -0,0 +1,309 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "3853e4d8-fff5-4f1f-b5ca-500883f14529", + "metadata": {}, + "source": [ + "# Beispiel Randomisiertes vollständiges Block-Design: Vaskuläre Röhrchen" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b08f775c-c14c-4592-8ada-143968aaa0f0", + "metadata": {}, + "outputs": [], + "source": [ + "from pandas import DataFrame\n", + "import pandas as pd\n", + "import numpy as np\n", + "import scipy.stats as st\n", + "from statsmodels.formula.api import ols\n", + "from statsmodels.stats.anova import anova_lm\n", + "from statsmodels.graphics.factorplots import interaction_plot\n", + "import matplotlib.pyplot as plt\n", + "\n", + "Daten = DataFrame({\n", + "\"Batch\": np.tile([\"1\", \"2\", \"3\", \"4\", \"5\", \"6\"], 4),\n", + "\"Methode\": np.repeat([\"8500\", \"8700\", \"8900\", \"9100\"], 6),\n", + "\"Y\": np.array([90.3, 89.2, 98.2, 93.9, 87.4, 97.9, 92.5, \n", + "89.5, 90.6, 94.7, 87, 95.8, 85.5,\n", + " 90.8, 89.6, 86.2, 88, 93.4, 82.5, 89.5, 85.6, 87.4, \n", + "78.9, 90.7])\n", + "})\n", + "\n", + "interaction_plot(x=Daten[\"Batch\"], trace=Daten[\"Methode\"], response=Daten[\"Y\"])\n", + "plt.ylabel(\"Daten Y\")\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "019dd7ab-fb14-4a3f-ad06-93672195b95e", + "metadata": {}, + "outputs": [], + "source": [ + "from pandas import DataFrame\n", + "import pandas as pd\n", + "import numpy as np\n", + "import scipy.stats as st\n", + "\n", + "from statsmodels.formula.api import ols\n", + "from statsmodels.stats.anova import anova_lm\n", + "from statsmodels.graphics.factorplots import interaction_plot\n", + "from statsmodels.stats.outliers_influence import summary_table\n", + "import matplotlib.pyplot as plt\n", + "\n", + "from patsy.contrasts import Sum\n", + "\n", + "Daten = DataFrame({\n", + "\"Batch\": np.tile([\"1\", \"2\", \"3\", \"4\", \"5\", \"6\"], 4),\n", + "\"Methode\": np.repeat([\"8500\", \"8700\", \"8900\", \"9100\"],6),\n", + "\"Y\": np.array([90.3, 89.2, 98.2, 93.9, 87.4, 97.9, 92.5, 89.5, 90.6, 94.7, 87, 95.8, 85.5,\n", + " 90.8, 89.6, 86.2, 88, 93.4, 82.5, 89.5, 85.6, 87.4, 78.9, 90.7])\n", + "})\n", + "\n", + "fit = ols(\"Y ~ C(Methode, Sum)+C(Batch,Sum)\", data=Daten).fit()\n", + "\n", + "fit.params\n", + "print(fit.params)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f8e27feb-b475-4806-8043-44b6a5486e1a", + "metadata": {}, + "outputs": [], + "source": [ + "from pandas import DataFrame\n", + "import pandas as pd\n", + "import numpy as np\n", + "import scipy.stats as st\n", + "\n", + "from statsmodels.formula.api import ols\n", + "from statsmodels.stats.anova import anova_lm\n", + "from statsmodels.graphics.factorplots import interaction_plot\n", + "from statsmodels.stats.outliers_influence import summary_table\n", + "import matplotlib.pyplot as plt\n", + "\n", + "from patsy.contrasts import Sum\n", + "import warnings\n", + "warnings.filterwarnings(\"ignore\")\n", + "Daten = DataFrame({\n", + "\"Batch\": np.tile([\"1\", \"2\", \"3\", \"4\", \"5\", \"6\"], 4),\n", + "\"Methode\": np.repeat([\"8500\", \"8700\", \"8900\", \"9100\"],6),\n", + "\"Y\": np.array([90.3, 89.2, 98.2, 93.9, 87.4, 97.9, 92.5, 89.5, 90.6, 94.7, 87, 95.8, 85.5,\n", + " 90.8, 89.6, 86.2, 88, 93.4, 82.5, 89.5, 85.6, 87.4, 78.9, 90.7])\n", + "})\n", + "\n", + "fit = ols(\"Y ~ C(Methode, Sum)+C(Batch, Sum)\", data=Daten).fit()\n", + "\n", + "print(anova_lm(fit))\n", + "anova_lm(fit)" + ] + }, + { + "cell_type": "markdown", + "id": "e64452e2-024e-4123-b337-37341c969f3f", + "metadata": {}, + "source": [ + "# Beispiel Faktorielles Experiment mit 2 Faktoren: Haftungsfestigkeit von Farben" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "03a731b4-7a8d-401b-88df-1553c3ed4eca", + "metadata": {}, + "outputs": [], + "source": [ + "from pandas import DataFrame\n", + "import pandas as pd\n", + "import numpy as np\n", + "import scipy.stats as st\n", + "\n", + "from statsmodels.formula.api import ols\n", + "from statsmodels.stats.anova import anova_lm\n", + "from statsmodels.graphics.factorplots import interaction_plot\n", + "from statsmodels.stats.outliers_influence import summary_table\n", + "import matplotlib.pyplot as plt\n", + "\n", + "Farbe = DataFrame({\n", + "\"Grund\": np.repeat([\"A\", \"B\", \"C\"], 6),\n", + "\"Methode\": np.tile(np.repeat([\"Eintauchen\", \"Besprühen\"], 3), 3),\n", + "\"Y\": np.array([4, 4.5, 4.3, 5.4, 4.9, 5.6, 5.6, 4.9, 5.4, 5.8, 6.1, 6.3, 3.8, 3.7, 4, 5.5, 5, 5])\n", + "})\n", + "\n", + "interaction_plot(x=Farbe[\"Grund\"], trace=Farbe[\"Methode\"], response=Farbe[\"Y\"])\n", + "\n", + "plt.xlabel(\"Grundierungstypen\")\n", + "plt.ylabel(\"Mittelwerte Haltungsfestigkeit\")\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b7a45644-eb48-4eb2-b1a8-31aa0ee2bd65", + "metadata": {}, + "outputs": [], + "source": [ + "fit = ols(\"Y~Grund*Methode\",data=Farbe).fit()\n", + "\n", + "anova_lm(fit)\n", + "print(anova_lm(fit))" + ] + }, + { + "cell_type": "markdown", + "id": "3ad34426-e3fc-46cb-bb5a-5efd058c0829", + "metadata": {}, + "source": [ + "# Beispiel Faktorielles Experiment mit 2 Faktoren und (scheinbarer) Interaktion: Elritzen" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "33fda122-9629-4d47-a283-f824894876f5", + "metadata": {}, + "outputs": [], + "source": [ + "El = DataFrame({\n", + "\"Konz\": np.repeat([\"A\", \"B\", \"C\",\"D\"], 6),\n", + "\"Temp\": np.tile(np.repeat([\"15C\", \"25C\"],3),4),\n", + "\"Y\": np.array([82, 46, 16, 20, 13, 7, 20, 14, 17, 6, 7, 5, 8, 6, 5, 4, 3, 5, 10, 7, 5, 6, 4, 5])\n", + "})\n", + "\n", + "interaction_plot(x=El[\"Konz\"], trace=El[\"Temp\"], response=El[\"Y\"],\n", + "legendtitle=\"Methode\")\n", + "\n", + "plt.xlabel(\"Cyanid-Konzentration\")\n", + "plt.ylabel(\"Mediane Experimente\")\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "db037e83-fcf2-4f15-a90c-8f143495852c", + "metadata": {}, + "outputs": [], + "source": [ + "fit = ols(\"Y~C(Konz,Sum)*C(Temp,Sum)\",data=El).fit()\n", + "\n", + "anova_lm(fit)\n", + "print(anova_lm(fit))" + ] + }, + { + "cell_type": "markdown", + "id": "5e578718-7ac2-46dc-8bc7-d957a974e356", + "metadata": {}, + "source": [ + "# Beispiel Faktorielles Experiment mit 2 Faktoren und Interaktion: Schnecken" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "da8a5599-6029-4b06-b218-b4de05adb85c", + "metadata": {}, + "outputs": [], + "source": [ + "from pandas import DataFrame\n", + "import pandas as pd\n", + "import numpy as np\n", + "import scipy.stats as st\n", + "\n", + "from statsmodels.formula.api import ols\n", + "from statsmodels.stats.anova import anova_lm\n", + "from statsmodels.graphics.factorplots import interaction_plot\n", + "from statsmodels.stats.outliers_influence import summary_table\n", + "import matplotlib.pyplot as plt\n", + "import warnings\n", + "warnings.filterwarnings(\"ignore\")\n", + "snails = DataFrame({\n", + "\"season\": np.repeat([\"spring\", \"summer\"], 9),\n", + "\"density\": np.tile(np.repeat([\"6\", \"12\",\"24\"],3),2),\n", + "\"Y\": np.array([1.17, 0.50, 1.67, 1.50, 0.83, 1.00, 0.67, 0.67, 0.75,\n", + " 4.00, 3.83, 3.83, 3.33, 2.58, 2.75, 2.54, 1.83, 1.63])\n", + "})\n", + "\n", + "fit = ols(\"Y~season*density\",data=snails).fit()\n", + "\n", + "anova_lm(fit)\n", + "print(anova_lm(fit))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "67961a66-6af5-403f-92c1-d32db529894f", + "metadata": {}, + "outputs": [], + "source": [ + "interaction_plot(x=snails[\"density\"], trace=snails[\"season\"],\n", + "response=snails[\"Y\"])\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fb00b072-8e93-4912-a43c-fd36b8ad6ba7", + "metadata": {}, + "outputs": [], + "source": [ + "snails_spring = snails[snails[\"season\"]==\"spring\"]\n", + "\n", + "fit_spring = ols(\"Y~density\",data=snails_spring).fit()\n", + "\n", + "anova_lm(fit_spring)\n", + "print(anova_lm(fit_spring))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f9dd0781-5252-45ad-bd9f-0b42ac5f450a", + "metadata": {}, + "outputs": [], + "source": [ + "snails_summer = snails[snails[\"season\"]==\"summer\"]\n", + "\n", + "fit_summer = ols(\"Y~density\",data=snails_summer).fit()\n", + "\n", + "anova_lm(fit_summer)\n", + "print(anova_lm(fit_summer))" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.11.7" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/notebooks/SW11/SW11_process_optimization_doe.ipynb b/notebooks/SW11/SW11_process_optimization_doe.ipynb new file mode 100644 index 0000000..58ee186 --- /dev/null +++ b/notebooks/SW11/SW11_process_optimization_doe.ipynb @@ -0,0 +1,152 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "27def3bf-f1c1-4f63-8aad-28ed943628f7", + "metadata": {}, + "source": [ + "# Prozessoptimierung\n", + "\n", + "## Beispiel: Jitter von CD's und Disc's" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a7b397ca-c79f-4f48-bfd0-1e5adfc4c01f", + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import pandas as pd\n", + "from statsmodels.formula.api import ols\n", + "from patsy.contrasts import Treatment, Sum\n", + "from statsmodels.stats.anova import anova_lm\n", + "df = pd.DataFrame({\"Aa\": np.tile(np.tile([-1, 1], 4),2),\n", + " \"Bb\": np.tile(np.repeat([-1,1], [2,2]),4),\n", + " \"Cc\": np.tile(np.repeat([-1,1], [4,4]),2)},\n", + " dtype=\"category\")\n", + "df[\"Yy\"] = np.array([34,26,33,21,24,23,19,18,40,29,35,22,23,22,18,18])\n", + "print(df)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "dd5e6edc-6b5f-4248-907b-a525d8b49591", + "metadata": {}, + "outputs": [], + "source": [ + "fit = ols(\"Yy ~ C(Aa, Sum)*C(Bb, Sum)*C(Cc, Sum)\", data=df).fit()\n", + "fit.params" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "cd35a7a5-5d43-4d3d-9805-b5868f6fbfd1", + "metadata": {}, + "outputs": [], + "source": [ + "df[\"Yy\"] = np.array([34,26,33,21,24,23,19,18,40,29,35,22,23,22,18,18])\n", + "fit = ols(\"Yy ~ C(Aa, Sum)*C(Bb, Sum)*C(Cc, Sum)\", data=df).fit()\n", + "anova_lm(fit)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c2b9da26-5389-4905-8680-87ffb925402c", + "metadata": {}, + "outputs": [], + "source": [ + "fit = ols(\"Yy ~ C(Aa, Sum)*C(Bb, Sum)*C(Cc, Sum)\", data=df).fit()\n", + "fit.params" + ] + }, + { + "cell_type": "markdown", + "id": "8037e79a-88ed-4537-a833-bad0e08ceed6", + "metadata": {}, + "source": [ + "## Beispiel: Reaktionsanalyse" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f6e67fc2-9525-444c-936f-48446f00d636", + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import pandas as pd\n", + "from statsmodels.formula.api import ols\n", + "from patsy.contrasts import Treatment, Sum\n", + "from statsmodels.stats.anova import anova_lm\n", + "reakt = pd.DataFrame({\"x1\": np.array([120,160,120,160,140,140]),\n", + " \"x2\": np.array([50,50,70,70,60,60]),\n", + " \"y\": np.array([52,62,60,70,63,65])})\n", + "fit = ols(\"y~x1+x2\",data=reakt).fit()\n", + "fit.params" + ] + }, + { + "cell_type": "markdown", + "id": "1fdd3387-769d-4266-b7bf-1072df749fa5", + "metadata": {}, + "source": [ + "Mit kodierten Variablen:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "040b9d4a-dada-448d-8676-06f84eec81dc", + "metadata": {}, + "outputs": [], + "source": [ + "reakt = pd.DataFrame({\"x1\": np.array([-1,1,-1,1,0,0]),\n", + " \"x2\": np.array([-1,-1,1,1,0,0]),\n", + " \"y\": np.array([52,62,60,70,63,65])})\n", + "fit = ols(\"y~x1+x2\",data=reakt).fit()\n", + "fit.params" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8120720d-47c9-421e-ba3c-f2580bb99bec", + "metadata": {}, + "outputs": [], + "source": [ + "reakt = pd.DataFrame({\"Zeit\": np.array([80,80,100,100,90,90,76,104,90]),\n", + " \"Temp\": np.array([195,235,195,235,187,243,215,215,215]),\n", + " \"y\": np.array([78,76,72,75,74,76,77,72,80])})\n", + "fit = ols(\"y~Zeit+Temp+I(Temp*Temp)+I(Zeit*Zeit)+I(Zeit*Temp)\",data=reakt).fit()\n", + "fit.params" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.11.7" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} -- GitLab