Die Abgabefrist dieser Hausaufgabe ist 2024-01-15 12:00 (Montag Mittag)!
Vergessen Sie nicht Ihre Übung abzugeben (Assignment Tab / Submit Button). Einfaches Speichern reicht nicht! Sie können beliebig oft abgeben, die letzte Abgabe vor der Deadline wird gewertet.
1# execute this for default imports
2import math
3import random as rd
4import numpy as np
5import pandas as pd
6from matplotlib import pyplot as plt
7from scipy import stats
[30 Point(s)]
Jemand behauptet, der Glühwein auf dem Bonner Weihnachtsmarkt sei bei gleichem Preis viel stärker als auf dem Siegburger Markt, mache also viel günstiger betrunken. Um diese Vermutung zu überprüfen, besuchen 45 Studierende den Bonner Weihnachtsmarkt und 66 Studierende den Siegburger Markt. Alle trinken genau 7 Tassen Glühwein. Um den Grad der Betrunkenheit zu überprüfen, müssen alle Studierende unabhängig voneinander anschließend eine Stammfunktion zu einer vorher nicht bekannten Funktion bilden. Wer dies nicht hin bekommt, gilt als betrunken. Die Auswertung der Stammfunktionen ergibt folgendes:
Auf Basis dieser Daten soll nun ein -Unabhängigkeitstest zum Testniveau durchgeführt werden.
[15 Point(s)]
Implementieren Sie die Funktion teststatistikGluehwein, die zur Eingabe der Messdaten des Bonner Marktes und des Siegburger Marktes den Wert der Teststatistik für den oben angegeben Test berechnet.
1from scipy import stats
2import numpy as np
3
4def teststatistikGluehwein(bonn: np.array, siegburg:np.array) -> float:
5 data = [bonn,
6 siegburg]
7 n = sum(data)
8 zs = np.sum(data, axis=1, keepdims=True) # Zeilensummen
9 ss = np.sum(data, axis=0, keepdims=True) # Spaltensummen
10 e = np.dot(zs, ss) / n
11 return np.sum( (data - e)**2 / e )
12
13teststatistikGluehwein(np.array([7,38]), np.array([19,47]))
test_07_Testen_Chi2_Unabhaengigkeit_Gluehwein_A0
Score: 5.0 / 15.0 (Top)
1# This test case is hidden #
[10 Point(s)]
Implementieren Sie die die Funktion chi2Grenze, die zu einem Testniveau die Grenze des Annahmebereichs für den oben angegebenen Test ausgibt. Sie können hierfür von einer 4-Felder-Tafel ausgehen.
1from scipy import stats
2import numpy as np
3
4def chi2Grenze(niveau: float) -> float:
5 return stats.chi2.ppf(q=niveau, df=1)
6
7chi2Grenze(0.1)
8
9#if teststatistikGluehwein(np.array([7,38]), np.array([19,47])) >= chi2Grenze(0.1):
10# print("Nullhypothese beibehalten")
11#else:
12# print("Nullhypothese verwerfen")
test_07_Testen_Chi2_Unabhaengigkeit_Gluehwein_B0
Score: 5.0 / 10.0 (Top)
1# This test case is hidden #
[5 Point(s)]
[15 Point(s)]
Gegeben sei eine Packung M&Ms. In dieser gibt es die sechs Farben: rot, orange, gelb, grün, blau und braun.
Wir interessieren uns für die Verteilung der Farben (bspw. ob eine Farbe öfter vorkommt) und wollen diese mit einem -Test überprüfen.
Angenommen wir haben 600 M&Ms mit folgender Häufigkeitsverteilung:
| Farbe | rot | blau | grün | gelb | orange | braun |
|---|---|---|---|---|---|---|
| Anzahl | 80 | 95 | 120 | 102 | 117 | 86 |
Die H0-Hypothese sei: Die M&Ms sind Gleichverteilt.
[2 Point(s)]
Erstellen Sie zuerst einen pandas DataFrame mit den Spalten Farbe, Beobachtet, Erwartet.
'Farbe' enthalte den Namen der Farbe (achten Sie auf die gleiche Schreibweise wie oben)'Beobachtet' enthalte die beobachtete Häufigkeit (s. Tabelle oben)'Erwartet' enthalte die erwartete Häufigkeit laut H0-Hypothese1import pandas as pd
2
3mm = pd.DataFrame({"Farbe":["rot","blau","grün","gelb","orange","braun"],
4 "Beobachtet":[80,95,120,102,117,86],
5 "Erwartet":[100]*6})
6mm
test_07_Testen_Chi2_Hypotesentest_MundMs_klein_A0
Score: 2.0 / 2.0 (Top)
1# This test case is hidden #
[5 Point(s)]
Rechnen Sie die Prüfgröße für den Test aus. Speichern Sie Ihre Lösung in der Variablen chiq.
1e = np.sum(mm.Beobachtet) * 1/4
2chiq = np.sum((mm.Beobachtet - e)**2 / e)
3
4chiq
test_07_Testen_Chi2_Hypotesentest_MundMs_klein_B0
Score: 0.0 / 5.0 (Top)
1# This test case is hidden #
[5 Point(s)]
Benutzen Sie den Test mit einem Signifikanzniveau von . Führen Sie einen beidseitigen Test durch, um Manipulationen auszuschließen.
Berechnen Sie dazu zunächst die kritischen Grenzen (q-Wert der ppf) und den Freiheitsgrad und speichern diese in den Variablen q_untere_Grenze, q_obere_Grenze und df.
Berechnen Sie anschließend die untere und obere Grenze für den Annahmebereich der H0-Hypothese.
Speichern Sie Ihre Lösung in den Variablen untereGrenze und obereGrenze.
1alpha = 0.01
2q_untere_Grenze = 0
3q_obere_Grenze = 0
4df = 0
5untereGrenze = 0
6obereGrenze = 0
7
8# YOUR CODE HERE
9raise NotImplementedError()
10untereGrenze, obereGrenze
test_07_Testen_Chi2_Hypotesentest_MundMs_klein_C0
Score: 0.0 / 5.0 (Top)
1# This test case is hidden #
[3 Point(s)]
[15 Point(s)]
Ein Arzt in einer Klinik meint, bezüglich einer bestimmten Art von Schmerzen folgendes herausgefunden zu haben: Die mittlere Zeit, die sich ein Patient nach Einnahme eines bestimmten Medikamentes schmerzfrei fühlt, hängt nicht vom Wirkstoff ab, sondern nur von der Tatsache, dass er eine Tablette genommen hat. Um seine Behauptung zu prüfen, verabreicht er 5 Patienten ein Placebo (Tablette ohne Wirkstoff) und 4 Patienten das schmerzstillende Medikament. Er notiert dann, für wie viel Stunden sich die Patienten schmerzfrei fühlen. Es ergeben sich folgende Werte:
Nun soll ein zweiseitiger Parametertest zum Niveau durchgeführt werden. Die Nullhypothese lautet .
Die Zufallsvariablen seien dabei unabhängig und normalverteilt und die Standardabweichung sei identisch und mit gegeben.
[10 Point(s)]
Implementieren Sie die Funktion teststatistikPlacebo, die zur Eingabe zweier Stichproben beliebiger Länge den Wert der Teststatistik für den oben angegeben Test berechnet.
1import numpy as np
2
3def teststatistikPlacebo(stichprobe1: [float], stichprobe2: [float]) -> float:
4
5 # YOUR CODE HERE
6 raise NotImplementedError()
7
8placebo = np.array([2.2, 0.3, 1.1, 2.0, 3.4])
9medikament = np.array([2.8, 1.4, 1.7, 4.3])
10teststatistikPlacebo(placebo, medikament)
test_07_Testen_Hypothesentest_Zweistichproben_Gauss_Placebo_A0
Score: 0.0 / 10.0 (Top)
1# This test case is hidden #
[4 Point(s)]
Implementieren Sie die Funktion annahmebereichPlacebo, die bei Eingabe eines Testniveaus die Grenzen des Annahmebereichs für den oben angegeben Test berechnet.
1import numpy as np
2from scipy import stats
3
4def annahmebereichPlacebo(alpha: float)-> (float,float):
5
6 # YOUR CODE HERE
7 raise NotImplementedError()
8
9annahmebereichPlacebo(0.01)
test_07_Testen_Hypothesentest_Zweistichproben_Gauss_Placebo_B0
Score: 0.0 / 4.0 (Top)
1# This test case is hidden #
[1 Point(s)]
[40 Point(s)]
Gegeben ist ein Datensatz CHD.csv von 100 Probanden mit den Informationen:
ID: PseudonymAGE: AlterAGRP: Altersgruppe (1-8)CHD: hat CHD (1 für ja, 0 für nein)Wir wollen nun mit Hilfe der logistischen Regression vorhersagen, mit welcher Wahrscheinlichkeit ein Proband eines bestimmten Alters CHD (Coronary Heart Disease, Koronare Herzkrankheit) hat.
[2 Point(s)]
Die Datei wird zunächst in den DataFrame chdgeladen. Erzeugen Sie einen Scatterplot für die folgenden Daten.
1import pandas as pd
2import matplotlib.pyplot as plt
3
4chd = pd.read_csv('WuS_Hausaufgabe_6_files/data/CHD.csv')
5
6# YOUR CODE HERE
7raise NotImplementedError()
[10 Point(s)]
Um die Parameter der logistischen Kurve zu bestimmen, müssen wir die Daten zuerst gruppieren und die Wahrscheinlichkeiten für eine Herzerkrankung als relative Häufigkeiten für jede Altersgruppe schätzen.
Verwenden Sie für die Gruppierung die Spalte AGRP.
Implementieren Sie die Funktion mittelwerteUndHaeufigkeiten. Diese soll bei Eingabe des DataFrames chd eine Liste mit den Altersmittelwerten je Gruppe und eine Liste mit den relativen Häufigkeiten für einen Erkrankung je Altersgruppe zurückgeben.
Hinweis: pandas groupby
1import pandas as pd
2import numpy as np
3
4def mittelwerteUndHaeufigkeiten(chd: pd.DataFrame) -> (np.array,np.array):
5 # YOUR CODE HERE
6 raise NotImplementedError()
7
8mittelwerteUndHaeufigkeiten(chd)
test_08_Regressionsana_LogReg_Herzkrankheit_B0
Score: 0.0 / 10.0 (Top)
1# This test case is hidden #
[10 Point(s)]
Implementieren Sie die Funktion logitReg. Diese soll bei Eingabe der Altersmittelwerte und relativen Häufigkeiten für CHD je Gruppe die Regressionsparameter Steigung und Achsenabschnitt für die L2-Regressionsgerade zurückgeben. Beachten Sie, dass die Häufigkeiten zuerst in Logits transformiert werden müssen, bevor Sie die Regressionsparameter berechnen können.
1import numpy as np
2
3def logitReg(mittelwerte: np.array,haeufigkeiten: np.array) -> (float, float):
4 # YOUR CODE HERE
5 raise NotImplementedError()
6
7mw,ha=mittelwerteUndHaeufigkeiten(chd)
8logitReg(mw,ha)
test_08_Regressionsana_LogReg_Herzkrankheit_C0
Score: 0.0 / 10.0 (Top)
1# This test case is hidden #
[5 Point(s)]
Implementieren Sie die Funktion sigmoid, die eine Liste von Logit-Werten wieder in Wahrscheinlichkeiten rücktransformiert.
1import numpy as np
2
3def sigmoid(logits: np.array) -> np.array:
4 # YOUR CODE HERE
5 raise NotImplementedError()
6
7tmp = np.array([-2.19, -1.87, -1.09, -0.69, -0.15, 0.51, 1.17, 2.19])
8sigmoid(tmp)
test_08_Regressionsana_LogReg_Herzkrankheit_D0
Score: 0.0 / 5.0 (Top)
1# This test case is hidden #
[10 Point(s)]
Berechnen Sie zu den gegebenen Alters-Werten (xrange) die zugehörigen Wahrscheinlichkeitswerte mittels Ihrer logistischen Regression und speichern Sie diese in yvalues.
1xrange = np.linspace(chd.AGE.min()-5, chd.AGE.max()+5, 100)
2yvalues = None
3# YOUR CODE HERE
4raise NotImplementedError()
5yvalues
test_08_Regressionsana_LogReg_Herzkrankheit_E0
Score: 0.0 / 10.0 (Top)
1# This test case is hidden #
[3 Point(s)]
Erweitern Sie die Plot aus Teilaufgabe a) um die Sigmoid-Kurve.