Rozkłady dyskretne - numeryczne obliczenia

In [1]:
import math

# w Pythonie komentujemy linijki za pomocą Hashatagu
# liczba kombinacji k spośród n == dwumian Newtona N nad k == math.comb(N, k)
# math.comb(2,1)

Napiszę funkcję na rozkład Bernoulliego - na początku nieunormowaną.

Ustalmy parametry jako $N=10$ i $p=0.4$

In [2]:
N = 10
p = 0.4

def rozklad_bernoulliego(k, N, p):
    ret = 1
    ret*= math.comb(N, k)
    # w Pythonie potęgujemy za pomocą dwóch gwiazdek
    # p do potęgi k-tej == p**k
    ret*= p**k
    ret*= (1-p)**(N- k)
    return ret

a) Normowanie

In [3]:
suma = 0

for ii in range(N+1):
    suma+= rozklad_bernoulliego(ii, N, p)
    
C=1/suma
print(f"stała C={C}")
stała C=1.0

b) Dystrybuanta

Najpierw napiszę wzór na unormowany rozklad, a potem skorzystam z definicji, że Dystrybuanta suma po wszystkich i mniej

In [4]:
def unormowany_rozklad_bernoulliego(k, N, p):
    ret = C
    ret*= math.comb(N, k)
    # w Pythonie potęgujemy za pomocą dwóch gwiazdek
    # p do potęgi k-tej == p**k
    ret*= p**k
    ret*= (1-p)**(N- k)
    return ret

dystrybuanta = 0
print(f"k\t|F(k)")
print(f"_________________")
for ii in range(N+1):
    dystrybuanta+= rozklad_bernoulliego(ii, N, p)
    print(f"{ii}\t|{dystrybuanta}")
k	|F(k)
_________________
0	|0.006046617599999997
1	|0.04635740159999999
2	|0.16728975359999998
3	|0.3822806016
4	|0.6331032576
5	|0.8337613824
6	|0.9452381184
7	|0.9877054464
8	|0.9983222784
9	|0.9998951424
10	|1.0

c) Kwantyle - Wyznaczę kwantyle rzędu $0.2$ i $0.8$ - na podstawie printa z powyższej komórki:

$q_{0.2} = 3$

$q_{0.8} = 5$