Seite 1 von 2
Statistik Aufgabe Python
Verfasst: Montag 18. April 2022, 13:19
von MathGenie123
Es geht um eine große Aufgabe, die ich lösen möchte aber beim Anfang ein Problem habe und zwar lautet die Aufgabe:
Schreiben Sie in Python eine Methode X, welche zufällig reelle Zahlen (floats) zwischen 5 und 8 aus gibt, sodass die Wahrscheinlichkeit für eine Zahl zwischen 5 und 6 doppelt so groß ist wie zwischen 6 und 7, analog die Wahrscheinlichkeit zwischen 6 und 7 doppelt so groß wie zwischen 7 und 8 ist. Innerhalb der Intervalle [5,6),[6,7) und [7,8) sollen die Zahlen gleichverteilt sein.
Tipp: implementieren Sie zunächst eine Zufallsvariable Y mit Werten in {5,6,7} und einer geeigneten Verteilung, schreiben Sie dann X=Y+.....
Mein Problem ist erst einmal wie X = Y + .. gemeint ist genau ?
Re: Statistik Aufgabe Python
Verfasst: Montag 18. April 2022, 13:56
von MathGenie123
ich würde meinen ansatz posten aber leider wurde mein beitrag nicht freigeschaltet
Re: Statistik Aufgabe Python
Verfasst: Montag 18. April 2022, 14:54
von __deets__
MathGenie123 hat geschrieben: Montag 18. April 2022, 13:56
ich würde meinen ansatz posten aber leider wurde mein beitrag nicht freigeschaltet
Es ist Ostersonntag, und die Sonne scheint. Ich hoffe mein Drang zur Frischluft hat dir nicht allzuviel Unbequemlichkeit zugemutet.
Re: Statistik Aufgabe Python
Verfasst: Montag 18. April 2022, 15:04
von MathGenie123
hahaha der war gut ja okay, melde mich morgen nochmal

, aber ich würde gerne wissen wie man bei schnellantworten code postet ?
Re: Statistik Aufgabe Python
Verfasst: Montag 18. April 2022, 15:08
von __blackjack__
@__deets__: In welcher Zeitzone bist Du gerade? Bei mir ist schon Montag. Aber das mit der Sonne stimmt.

Re: Statistik Aufgabe Python
Verfasst: Montag 18. April 2022, 15:32
von __deets__
Ich meinte auch Montag.
@MathGenie123: du kannst die Code Tags auch einfach von Hand eingeben.
Und zu deiner Aufgabe: wenn du eine Verteilung für Y hast, musst du einfach nur die standardmäßige Gleichverteilung von 0..1 der random.random funktion dazuaddieren.
Re: Statistik Aufgabe Python
Verfasst: Montag 18. April 2022, 20:12
von dirk009
Hallo @MathGenie123,
die Aufgabe ist eigentlich ziemlich klein. Nachdem @deets den zweiten Teil erklärt hat. Hier eine Idee zum ersten Teil. Bei der Gleichverteilung von einem Würfel mit sieben Seiten ist die Wahrscheinlichkeit, eine von zwei bestimmte Zahlen zu erhalten, doppelt so gross wie die Wahrscheinlichkeit, eine bestimmte Zahl zu erhalten. Ebenso ist die Wahrscheinlichkeit, eine von vier bestimmten Zahlen zu erhalten, doppelt so gross wie die Wahrscheinlichkeit, eine von zwei bestimmten Zahlen zu erhalten. Also kannst du die Wahrscheinlichkeitsverteilung mit der Gleichverteilung durch Zuordnung der Zahlen simulieren.
Code: Alles auswählen
from random import randint, random
def y():
random_value = randint(1,7)
if random_value == 1:
return 5
if random_value == 2 or random_value == 3:
return 6
return 7 # random_value in [4,5,6,7]
def x():
return y() + random()
if __name__ == '__main__':
[print(x()) for _ in range(0,10)]
Beispielausgabe:
Code: Alles auswählen
7.011883602433043
6.913770049751413
7.0054181930861175
5.035501614027626
6.500347804210461
7.549870524346216
5.248128535731663
6.57574929536881
7.063994066178143
6.5281501833064866
Re: Statistik Aufgabe Python
Verfasst: Montag 18. April 2022, 20:59
von __blackjack__
@dirk009: Der Kommentar ist irreführend, oder übersehe ich da eine Möglichkeit, dass tatsächlich eine 4 von `y()` zurückgegeben werden kann.
Mit der Liste mit den 10 `None`-Werten wird gar nichts gemacht. Warum wird die erstellt?
Re: Statistik Aufgabe Python
Verfasst: Dienstag 19. April 2022, 15:51
von MathGenie123
Code: Alles auswählen
from random import random as r
from sample_of_x import sample
import math
import random
Y = {5,6,7}
def verteilung(x):
p = 1/7
if(x == 7):
p = p
if(x == 6):
p = 2*p
if(x==5):
p=4*p
return p
def X():
x= random.randrange(5, 7, 1) + r()
return x
so habe ich das gelöst ?
Re: Statistik Aufgabe Python
Verfasst: Dienstag 19. April 2022, 17:10
von __deets__
Das random so zu r zu verkuerzen ist ungewoehnlich und erschwert das Verstaendnis. Es ist ein typischer Anfaengerfehler zu glauben, der getippte Buchstabe waere irgendwie teuer. Ist er nicht. Die Zeit, die beim verstehen des eigenen Codes irgendwann mal unnoetig bei drauf geht, hingegen schon. Und das uebt man schon von Anfang an, nicht erst, wenn's drauf ankommt - so wie alles andere auch.
Die Funktion verteilung ist falsch, aber auch nicht benutzt. Und dirk009 hat doch eine Funktion fuer y geschrieben. Was daran ist unklar?
Re: Statistik Aufgabe Python
Verfasst: Dienstag 19. April 2022, 18:03
von dirk009
__blackjack__ hat geschrieben: Montag 18. April 2022, 20:59
@dirk009: Der Kommentar ist irreführend, oder übersehe ich da eine Möglichkeit, dass tatsächlich eine 4 von `y()` zurückgegeben werden kann.
@blackjack
Ich wollte nicht
in der Methode schreiben und der Kommentar sollte deutlich machen, dass 7 in diesen Fällen zurückgegeben wird.
__blackjack__ hat geschrieben: Montag 18. April 2022, 20:59
Mit der Liste mit den 10 `None`-Werten wird gar nichts gemacht. Warum wird die erstellt?
Ursprünglich wollte ich noch ein Histogramm plotten und habe eine Liste von Zufallswerten erzeugt. Dann war ich aber doch zu faul und habe einfach ein print eingebaut.
Re: Statistik Aufgabe Python
Verfasst: Dienstag 19. April 2022, 19:16
von dirk009
MathGenie123 hat geschrieben: Dienstag 19. April 2022, 15:51
so habe ich das gelöst ?
@MathGenie123
Nichts geht über einen Test. Ich habe folgendes zu deinem Code hinzugefügt:
Code: Alles auswählen
from collections import Counter
from math import trunc
if __name__ == '__main__':
zufallszahlen = []
intervalle = []
for _ in range(0, 1000):
x = X()
zufallszahlen.append(x)
intervalle.append(trunc(x))
counter = Counter(intervalle)
for key, value in counter.items():
print(f"{key}: {value}")
Der Code erzeugt 1000 Zufallszahlen und zählt die Anzahl der Zahlen in den Intervallen.
Folgende Ergebnisse werden bei drei Testläufen erzeugt:
5: 486
6: 514
5: 507
6: 493
5: 496
6: 504
Eine Zufallszahl der Form 7.xxx wird nicht erzeugt und das Verhältnis zwischen 5er und 6er Intervall ist 1:1. Es sollte aber 2:1 sein.
PS: Bei meiner Lösung muss man die Zuordnung invertieren (7 statt 5 und 5 statt 7), um an die von der Aufgabenstellung gewünschte Verhältnisse zu kommen.
Re: Statistik Aufgabe Python
Verfasst: Mittwoch 20. April 2022, 07:42
von Sirius3
Das random-Modul liefert alles, was für diese Aufgabe nötig ist. Mit random.choices kann aus einer Menge [5, 6, 7] ein Element mit einer bestimmten Gewichtung gezogen werden, und mit random.random erhält man eine gleichverteilte Zahle zwischen [0,1).
Re: Statistik Aufgabe Python
Verfasst: Donnerstag 21. April 2022, 11:22
von MathGenie123
also ich habe alles generiert, ich habe tausend zufallswerte mit dieser bedingung, was ich nun wissen möchte ist wie man den erwartungswert dort berechnet ? es liegt ja eine Gleichverteilung vor zwischen den einzelnen Intervallen ? wie geht man da um ?
Re: Statistik Aufgabe Python
Verfasst: Donnerstag 21. April 2022, 11:33
von MathGenie123
Code: Alles auswählen
from random import random as r
import math
import random
Y = {5,6,7}
def verteilung(x):
p = 1/7
if(x == 7):
p = p
if(x == 6):
p = 2*p
if(x==5):
p=4*p
return p
def X():
x= random.choices(population=[5, 6, 7], weights=[4/7, 2/7, 1/7], k=1)[0] + r()
return x
#generiere 1000 zufallswerte
random.seed(1)
stichprobe = []
for i in range(1,1001):
stichprobe.append(X())
ich solle nun den erwartungswert bestimmen aber ka wie ich das für die reelen zahlen machen soll
Re: Statistik Aufgabe Python
Verfasst: Donnerstag 21. April 2022, 12:01
von __deets__
Warum ist da denn immer noch diese ueberfluessige verteilung-Funktion drin? Und auch das Y ist doch ueberfluessig.
Was ist denn die Definition des Erwartungswertes? Wie wuerdest du den denn fuer diskrete Wuerfelwuerfe zB berechnen?
Re: Statistik Aufgabe Python
Verfasst: Donnerstag 21. April 2022, 13:21
von MathGenie123
wäre gut wenn einer hilft ?
das ist mein ansatz für den ewert
Code: Alles auswählen
erwartungswert = 0
for x in samp:
if(x < 6):
erwartungswert += x*(4/7)
if(6 <= x < 7):
erwartungswert += x*(2/7)
if(7 <= x < 8):
erwartungswert += x*(1/7)
erwartungswert
Re: Statistik Aufgabe Python
Verfasst: Donnerstag 21. April 2022, 13:55
von MathGenie123
die definition ist ja im grundegenommen nichts weiteres als wahrscheinlichkeit * wert der zv und alles aufsummiert.
mein ansatz steht schon oben
Re: Statistik Aufgabe Python
Verfasst: Donnerstag 21. April 2022, 14:15
von __blackjack__
Zur `verteilung()`-Funktion würde ich auch noch anmerken, dass Gleitkommazahlen nicht ganz ohne Stolperfallen sind, weil die nicht exakt sind/sein müssen, und das man so etwas besser mit ganzen Zahlen löst. Lesetipp:
https://floating-point-gui.de/
Re: Statistik Aufgabe Python
Verfasst: Donnerstag 21. April 2022, 14:20
von MathGenie123
die funktion verteilung ist nicht so releveant eig, es geht nur um den erwartungswert und außerdem habe ich die floor function in meiner implementierung nur habe es nicht hochgeladen