Rachunek_prawdopodobienstwa/Przewodnik_studenta_lab/03LRAP_przewodnik.ipynb

803 lines
277 KiB
Plaintext
Raw Permalink Normal View History

{
"cells": [
{
"cell_type": "markdown",
"id": "4cd099",
"metadata": {
"collapsed": false
},
"source": [
"# Generowanie losowych obiektów w Pythonie. Znane rozkłady prawdopodobieństwa w Pythonie. "
]
},
{
"cell_type": "markdown",
"id": "bdfc62",
"metadata": {
"collapsed": false
},
"source": [
"## Biblioteka NumPy\n",
"\n",
"**NumPy** (Numerical Python) jest biblioteką dla języka Python, której głównym zadaniem jest umożliwienie pracy na dużych, wielowymiarowych tabelach i macierzach. Zacznijmy od zaimportowania biblioteki za pomocą poniższego polecenia."
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "1498f3",
"metadata": {
"collapsed": false
},
"outputs": [
],
"source": [
"import numpy as np"
]
},
{
"cell_type": "markdown",
"id": "ac566b",
"metadata": {
"collapsed": false
},
"source": [
"Ponieważ głównym obiektem biblioteki NumPy są macierze, czyli obiekty klasy `ndarray` (N dimensional array), zobaczmy na początek w jaki sposób z nimi pracować. Obiekty tego typu mają zazwyczaj ustalony rozmiar, który wyznaczony jest przez kształt macierzy, czyli `shape`. Np. `shape = (2,2,4)` dotyczy macierzy trójwymiarowej o wymiarach $2\\times 2\\times 4$ i $2\\cdot 2\\cdot 4 = 16$ polach."
]
},
{
"cell_type": "code",
"execution_count": 37,
"id": "60fe48",
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Macierz A\n",
" [[1 2 3]\n",
" [2 3 4]] \n",
"\n",
"Macierz jedynek\n",
" [[1. 1. 1. 1.]\n",
" [1. 1. 1. 1.]\n",
" [1. 1. 1. 1.]] \n",
"\n",
"Macierz zer\n",
" [[0. 0.]\n",
" [0. 0.]]\n"
]
}
],
"source": [
"# tworzymy macierz typu ndarray\n",
"A = np.array([[1, 2, 3], [2, 3, 4]])\n",
"print(\"Macierz A\\n\", A, \"\\n\")\n",
"\n",
"# tworzymy macierz o wymiarach 3x4 składającą się z samych jedynek\n",
"A_ones = np.ones((3, 4))\n",
"print(\"Macierz jedynek\\n\", A_ones, \"\\n\")\n",
"\n",
"# tworzymy macierz o w ymiarach 2x2 składającą się z samcyh zer\n",
"A_zeros = np.zeros((2, 2))\n",
"print(\"Macierz zer\\n\", A_zeros)"
]
},
{
"cell_type": "markdown",
"id": "7ea41f",
"metadata": {
"collapsed": false
},
"source": [
"Na macierzach możemy wykonywać standardowe działania takie jak mnożenie, co przyda nam się na późniejszych zajęciach przy okazji pracy z łańcuchami Markowa."
]
},
{
"cell_type": "code",
"execution_count": 54,
"id": "2b527e",
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Macierz B\n",
" [[1 2]\n",
" [1 4]\n",
" [5 0]\n",
" [5 1]] \n",
"\n",
"Wektor v\n",
" [1 2] \n",
"\n",
"Wynik mnożenia B przez v\n",
" [5 9 5 7]\n"
]
}
],
"source": [
"# Tworzymy macierz B o wymiarach 4x2 oraz wektor v\n",
"B = np.array([[1, 2], [1, 4], [5, 0], [5, 1]])\n",
"v = np.array([1, 2])\n",
"print(\"Macierz B\\n\", B, \"\\n\")\n",
"print(\"Wektor v\\n\", v, \"\\n\")\n",
"\n",
"# Mnożenie macierzy B przez wektor v\n",
"result = B.dot(v)\n",
"print(\"Wynik mnożenia B przez v\\n\", result)"
]
},
{
"cell_type": "markdown",
"id": "deb832",
"metadata": {
"collapsed": false
},
"source": [
"## Generowanie losowych obiektów w NumPy\n",
"\n",
"Na tym kursie interesować nas będzie przede wszystkim zastosowanie biblioteki NumPy w odniesieniu do rachunku prawdopdodobieństwa.\n",
"\n",
"Podstawowym narzędziem, z którego będziemy korzystać jest generator liczb (i innych obiektów) losowych (a dokładniej rzecz ujmując pseudolosowych). Aby wygenerować losową liczbę całkowitą możemy posłużyć się funkcją `randint(n)` (zwracającą losową liczbę całkowitą z przedziału `[0, n)` zgodnie z **rozkładem jednostajnym**, czyli takim, gdzie każda liczba z podanego przedziału ma szanse pojawić się z równym prawdopodobieństwem)."
]
},
{
"cell_type": "code",
"execution_count": 23,
"id": "f45d82",
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"10\n",
"96\n",
"75\n",
"0\n",
"32\n",
"51\n",
"61\n",
"25\n",
"4\n",
"7\n"
]
}
],
"source": [
"# generujemy 10 liczb losowych z przedziału [0,100]\n",
"for _ in range(10):\n",
" x = np.random.randint(100)\n",
" print(x)"
]
},
{
"cell_type": "code",
"execution_count": 20,
"id": "915a84",
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[60 12 38 99 87 40 22 92 79 66]\n",
" [27 30 90 72 35 52 67 80 51 26]]\n"
]
}
],
"source": [
"# generujemy tablicę typu ndarray o wymiarach 2 x 10 wypełnioną losowymi liczbami całkowitymi z przedziału [0, 100]\n",
"\n",
"x = np.random.randint(100, size=(2, 10))\n",
"print(x)"
]
},
{
"cell_type": "markdown",
"id": "050663",
"metadata": {
"collapsed": false
},
"source": [
"NumPy daje nam również możliwość losowania dowolnych obiektów. Służy do tego funkcja `choice`, która przyjmuje następujące argumenty:\n",
" - `a` - może być jednowymiarową macierzą typu `ndarray`, wówczas losowane są elementy z tej macierzy, `a` może być też liczbą naturalną, wówczas losowane są liczby naturalne z przedziału `[0, a]`,\n",
" - `size` - determinuje ile obiektów jest losowanych, może być to liczba lub wektor liczb, domyślnie `size` przyjmuje wartość `None`co oznacza, że losowany jest jeden obiekt,\n",
" - `replace` - czy losujemy ze zwracaniem, czy bez zwracania, domyślnie przyjmuje wartość `True` co oznacza, że dany obiekt może zostać wylosowany wielokrotnie,\n",
" - `p` - wektor prawdopodobieństw, jeśli chcemy by losowanie odbywało się nie w sposób jednostajny, tylko ze z góry zadanym rozkładem.\n",
" \n",
" **Przykład 1**\n",
" \n",
" Chcemy wylosować:\n",
" - jedną kartę\n",
" - $5$ kart otrzymanych przez pojedynczego gracza\n",
" - rozdanie po $5$ kart dla czterech graczy\n",
" \n",
" ze standardowej talii $52$ kart. W tym celu najpierw definiujemy talię, a następnie stosujemy funkcję `choice` z odpowiednimi parametrami."
]
},
{
"cell_type": "code",
"execution_count": 25,
"id": "63563b",
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Losowa karta: 10 karo \n",
"\n",
"Rozdanie 5 losowych kart dla jednego gracza: ['7 trefl' '7 kier' '5 karo' 'As pik' '2 pik'] \n",
"\n",
"Rozdanie po 5 losowych kart dla czterech graczy: \n",
" [['2 pik' '10 karo' '5 trefl' '9 pik' '8 kier']\n",
" ['3 karo' '9 kier' '5 kier' '5 pik' '4 karo']\n",
" ['6 trefl' '2 kier' 'Walet trefl' '4 kier' '6 kier']\n",
" ['4 trefl' 'Dama kier' 'Król trefl' 'Dama trefl' '7 trefl']]\n"
]
}
],
"source": [
"# tworzymy standardową talię 52 kart\n",
"values = ['2', '3', '4', '5', '6', '7', '8', '9', '10', 'Walet', 'Dama', 'Król', 'As']\n",
"suits = ['kier', 'karo', 'pik', 'trefl']\n",
"deck = [v + ' ' + s for v in values for s in suits]\n",
"\n",
"# losujemy jedną kartę z naszej talii\n",
"x = np.random.choice(deck)\n",
"print(\"Losowa karta:\", x, \"\\n\")\n",
"\n",
"# losujemy jednocześnie 5 kart z naszej talii, domyślnie parametr replace = True, co oznacza że losujemy kolejno ze zwracaniem\n",
"y = np.random.choice(deck, size=5, replace=False)\n",
"print(\"Rozdanie 5 losowych kart dla jednego gracza: \", y, \"\\n\")\n",
"\n",
"# losujemy jedocześnie 5 kart z naszej talii dla 4 różnych graczy\n",
"z = np.random.choice(deck, size=(4, 5), replace=False)\n",
"print(\"Rozdanie po 5 losowych kart dla czterech graczy: \\n\", z)"
]
},
{
"cell_type": "markdown",
"id": "0ca5a9",
"metadata": {
"collapsed": false
},
"source": [
"**Przykład 2**\n",
"\n",
"Chcemy wylosować $10$ razy ze zwracaniem jedną kulę z urny zawierającej $3$ białe, $4$ czerwone i $5$ zielonych kul. Możemy tutaj zastosować dwa podejścia:\n",
" - losujemy w sposób jednostajny jeden obiekt z tablicy zawierającej $3+4+5=12$ elementów, które odpowiadają naszym kulom,\n",
" - losujemy jeden z kolorów zgodnie z rozkładem, który odpowiada częstotliwościom występowania każdego z kolorów, czyli przyjmując wektor prawdopodobieństw $p = (3/12, 4/12, 5/12)$."
]
},
{
"cell_type": "code",
"execution_count": 35,
"id": "ee00fe",
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"['b' 'c' 'c' 'b' 'b' 'z' 'z' 'b' 'z' 'z']\n",
"['b' 'b' 'b' 'b' 'z' 'b' 'z' 'c' 'z' 'b']\n"
]
}
],
"source": [
"# pierwszy sposób\n",
"kule = ['b', 'b', 'b', 'c', 'c', 'c', 'c', 'z', 'z', 'z', 'z', 'z']\n",
"x = np.random.choice(kule, size=10)\n",
"print(x)\n",
"\n",
"# drugi sposób\n",
"kolory = ['b', 'c', 'z']\n",
"prawdop = [1/4, 1/3, 5/12]\n",
"y = np.random.choice(kolory, size=10, p=prawdop)\n",
"print(y)"
]
},
{
"cell_type": "markdown",
"id": "01e68a",
"metadata": {
"collapsed": false
},
"source": [
"Przeprowadźmy teraz $1000$-krotne losowanie ze zwracaniem kuli z naszej urny i porównajmy częstotliwość wyboru każdego z kolorów z częstotliwością występowania tego koloru w urnie. Proszę zauważyć, że\n",
"$$(3/12, 4/12, 5/12) = (0{.}25, 0{.}333\\ldots, 0{.}41666\\ldots) = (0{.}25, 0{.}(3)), 0{.}41(6)).$$\n",
"Jeśli nasz generator faktycznie zwraca obiekty w sposób losowy, spodziewamy się, że uzyskane częstotliwości występowania kolorów podczas losowania będą odpowiadały częstotliwościom występowania każdego z kolorów w urnie."
]
},
{
"cell_type": "code",
"execution_count": 36,
"id": "664ba3",
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Częstotliwość wystąpień koloru białego: 0.252\n",
"Częstotliwość wystąpień koloru czerwonego: 0.304\n",
"Częstotliwość wystąpień koloru zielonego: 0.444\n"
]
}
],
"source": [
"x = np.random.choice(kolory, size=1000, p=prawdop)\n",
"\n",
"# Zliczanie wystąpień konkretnego elementu, np. 'b'\n",
"b_count = np.count_nonzero(x == 'b')\n",
"print(\"Częstotliwość wystąpień koloru białego:\", b_count/1000)\n",
"c_count = np.count_nonzero(x == 'c')\n",
"print(\"Częstotliwość wystąpień koloru czerwonego:\", c_count/1000)\n",
"z_count = np.count_nonzero(x == 'z')\n",
"print(\"Częstotliwość wystąpień koloru zielonego:\", z_count/1000)"
]
},
{
"cell_type": "markdown",
"id": "746df6",
"metadata": {
"collapsed": false
},
"source": [
"## SciPy\n",
"\n",
"**SciPy** jest bogatą biblioteką, która umożliwia wykonywanie skomplikowanych obliczeń tj. całkowanie czy optymalizacja. My natomiast wykorzystamy funkcje związane ze znanymi rozkładami prawdopodobieństwa dostępne dzięki pakietowi `stats`. Będą nas interesowały już poznane rozkłady dyskretne:\n",
" - rozkład Bernoulliego (dla pojedynczej próby): `bernoulli`\n",
" - rozkład dwumianowy: `binom`\n",
" - rozkład geometryczny: `geom`\n",
" - rozkład Poissona: `poisson`\n",
" - rozkład hipergeometryczny: `hypergeom`\n",
" - rozkład Pascala (ujemny dwumianowy): `nbinom`\n",
" - rozkład jednostajny (na skończonym zbiorze liczb): `randint`\n",
" \n",
" a także rozkłady ciągłe:\n",
" - rozkład jednostajny: `uniform`\n",
" - rozkład wykładniczy: `expon`\n",
" - rozkład standardowy normalny: `norm`.\n",
" \n",
" Zacznijmy od zaimportowania odpowiedniego pakietu: `stats`."
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "8a7728",
"metadata": {
"collapsed": false
},
"outputs": [
],
"source": [
"from scipy import stats"
]
},
{
"cell_type": "markdown",
"id": "a519aa",
"metadata": {
"collapsed": false
},
"source": [
"Omówimy teraz pokrótce niektóre z wyżej wymienionych rozkładów. Przy czym należy pamiętać, że dla każdego z rozkładów zdefiniowane są podobne metody, zatem nie będziemy ich za każdym razem powtarzać. Metody, z których będziemy najcześciej korzystać przy okazji **rozkładów dyskretnych** to:\n",
" - `pmf` czyli **funkcja masy prawdopodobieństwa** (*ang. probability mass function*),\n",
" - `cdf` czyli **dystrybuanta** (*ang. cumulative distribution function*),\n",
" - `mean` czyli **wartość oczekiwana** (*ang. mean value* or *expectation*),\n",
" - `var` czyli **wariancja** (*ang. variance*),\n",
" - `std` czyli **odchylenie standardowe** (*ang. standard deviation*) będące po prostu pierwiastkiem z wariancji,\n",
" - `rvs` czyli funkcja zwracająca **losową próbkę** (*ang. random sample*) zgodnie z rozkładem zadanej zmiennej losowej \n",
" \n",
" Z kolei do pracy z **rozkładami ciągłymi**, poza wyżej wymienionymi metodami (oprócz `pmf`, która nie ma sensu dla rozkładów ciągłych) przyda nam się dodatkowo metoda:\n",
" - `pdf` czyli **gęstość rozkładu** (*ang. probability density function*).\n",
"\n",
"### Rozkład dwumianowy stats.binom\n",
"\n",
"Przypomnijmy, że rozkład dwumianowy $Bin(n,p)$ z parametrami $n$ i $p$ dotyczy $n$ niezależnych prób Bernoulliego z prawdopodobieństwem sukcesu w pojedynczej próbie wynoszącym $p \\in (0,1)$, a zmienna losowa o tym rozkładzie zwraca liczbę uzyskanych sukcesów. Do wygenerowania takiej zmiennej losowej służy funkcja `stats.binom` przyjmująca dwa argumenty $n$ i $p$.\n",
" \n",
" **Przykład 3**\n",
" \n",
" Wyznaczymy funkcję masy prawdopodobieństwa, wartość oczekiwaną oraz wariancję zmiennej losowej $X$, która zlicza liczbę czwórek wyrzuconych w $12$ rzutach standardową kostką. Wiemy zatem, że $$X \\sim Bin(12, 1/6).$$"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "8ebffc",
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Funkcja masy prawdopodobieństwa zmiennej losowej X\n",
"P(X = 0 ) = 0.11215665478461513\n",
"P(X = 1 ) = 0.2691759714830762\n",
"P(X = 2 ) = 0.29609356863138386\n",
"P(X = 3 ) = 0.19739571242092233\n",
"P(X = 4 ) = 0.08882807058941508\n",
"P(X = 5 ) = 0.028424982588612827\n",
"P(X = 6 ) = 0.006632495937342999\n",
"P(X = 7 ) = 0.001136999303544513\n",
"P(X = 8 ) = 0.00014212491294306426\n",
"P(X = 9 ) = 1.263332559493902e-05\n",
"P(X = 10 ) = 7.579995356963424e-07\n",
"P(X = 11 ) = 2.7563619479866997e-08\n",
"P(X = 12 ) = 4.593936579977831e-10\n",
"Wartość oczekiwana zmiennej losowej X = 2.0\n",
"Wariancja zmiennej losowej X = 1.6666666666666667\n"
]
}
],
"source": [
"# definiujemy zmienną losową X o dwumianowym rozkładzie prawdopodobieństwa z parametrami n=12 i p=1/6\n",
"X = stats.binom(12, 1/6)\n",
"print(\"Funkcja masy prawdopodobieństwa zmiennej losowej X\")\n",
"for k in range(13):\n",
" print(\"P(X =\", k,\") = \", X.pmf(k))\n",
"print(\"Wartość oczekiwana zmiennej losowej X = \", X.mean())\n",
"print(\"Wariancja zmiennej losowej X = \", X.var())"
]
},
{
"cell_type": "markdown",
"id": "66310d",
"metadata": {
"collapsed": false
},
"source": [
"### Rozkład geometryczny\n",
"\n",
"Rozkład geometryczny $Ge(p)$ z parametrem $p\\in(0,1)$ dotyczy eksperymentu, w którym powtarzamy niezależne próby Bernoulliego z prawdopodobieństwem sukcesu w pojedynczej próbie równym $p$, do momentu uzyskania pierwszego sukcesu. Zmienna losowa o tym rozkładzie zwraca liczbę takich prób i możemy ją wygenerować za pomocą polecenia `stats.geom`. \n",
"\n",
"**Przykład 4**\n",
"\n",
"Przedstawimy na wykresie funkcję masy prawdopodobieństwa zmiennej losowej o rozkładzie geometrycznym z parametrem $p=1/8=0{.}125$. Do rysowania wykresów korzystać będziemy z biblioteki **matplotlib**."
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "51c8a4",
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 864x504 with 1 Axes>"
]
},
"execution_count": 18,
"metadata": {
"image/png": {
"height": 440,
"width": 726
},
"needs_background": "light"
},
"output_type": "execute_result"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"\n",
"# definiujemy zmienną losową Y o rozkładzie geometrycznym z parametrem p=0.125\n",
"Y = stats.geom(0.125)\n",
"\n",
"# wartości do wykresu\n",
"x = np.arange(1, 26)\n",
"pmf_values = Y.pmf(x)\n",
"\n",
"# tworzenie wykresu\n",
"plt.bar(x, pmf_values)\n",
"plt.title('Funkcja masy prawdopodobieństwa zmiennej losowej Y')\n",
"plt.xlabel('k')\n",
"plt.ylabel('P(Y=k)')\n",
"plt.xticks(x)\n",
"plt.grid()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"id": "fd54b0",
"metadata": {
"collapsed": false
},
"source": [
"### Rozkład Poissona\n",
"\n",
"Zmienna losowa $X$ ma rozkład Poissona z parametrem $\\lambda\\in (0,+\\infty)$, jeśli jej funkcja masy prawdopodobieństwa dana jest wzorem:\n",
"\n",
"$$\\mathbb{P}(X=k)=\\frac{\\lambda^k}{k!}e^{-\\lambda} \\quad \\text{ dla } \\quad k=0,1,2,\\ldots$$\n",
"\n",
"Rozkładu tego używamy najczęściej aby modelować zdarzenia ,,rzadkie'' np. liczbę wypadków drogowych, liczbę pożarów budynku itp. Wówczas parametr $\\lambda$ odnosi się do średniej wartości tej zmiennej losowej. Zmienną losową o tym rozkładzie wygenerujemy za pomocą polecenia `stats.poisson`.\n",
"\n",
"**Przykład 5**\n",
"\n",
"Porównajmy ze sobą rozkład Poissona i rozkład dwumianowy. W tym celu rozważymy zmienną losową $X \\sim Bin(n, \\frac{\\lambda}{n})$ oraz zmienną losową $Y \\sim Po(\\lambda)$, tak żeby\n",
"$$\\mathbb{E}(X) = n\\cdot\\frac{\\lambda}{n} = \\mathbb{E}Y.$$\n",
"\n",
"Wygenerujemy funkcje masy prawdopodobieństwa dla obu tych rozkładów i dla porównania przedstawimy je na jednym wykresie. Jak się okazuje, dostajemy bardzo podobny rozkład prawdopodobieństwa, co nie jest przypadkiem, ponieważ rozkład dwumianowy $Bin(n,p)$ można dobrze przybliżać rozkładem Poissona $Po(\\lambda)$ przy założeniu, że $p = \\frac{\\lambda}n$. Jako ćwiczenie proszę pozmieniać parametry $\\lambda$, $n$ i $p=\\frac{\\lambda}{n}$."
]
},
{
"cell_type": "code",
"execution_count": 43,
"id": "581700",
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 864x504 with 1 Axes>"
]
},
"execution_count": 43,
"metadata": {
"image/png": {
"height": 440,
"width": 726
},
"needs_background": "light"
},
"output_type": "execute_result"
}
],
"source": [
"# definiujemy zmienną losową X o dwumianowym rozkładzie prawdopodobieństwa z parametrami n=100 i p=0.1\n",
"X = stats.binom(100, 0.1)\n",
"x_binom = np.arange(0, 25) # wartości dla rozkładu dwumianowego\n",
"pmf_binom = X.pmf(x_binom)\n",
"\n",
"# definiujemy zmienną losową Y o rozkładzie Poissona z parametrem lambda=10\n",
"Y = stats.poisson(10)\n",
"x_poisson = np.arange(0, 25) # wartości dla rozkładu Poissona\n",
"pmf_poisson = Y.pmf(x_poisson)\n",
"\n",
"# tworzenie wykresu dla obu rozkładów\n",
"plt.bar(x_binom, pmf_binom, width=0.4, label='Binomial PMF (n=100, p=0.1)', color='blue', align='center')\n",
"plt.bar(x_poisson, pmf_poisson, width=0.4, label='Poisson PMF (lambda=10)', color='orange', align='edge')\n",
"\n",
"plt.title('Funkcje masy prawdopodobieństwa - rozkład dwumianowy i Poissona')\n",
"plt.xlabel('k')\n",
"plt.ylabel('P(X=k), P(Y=k)')\n",
"plt.legend()\n",
"plt.grid()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"id": "c51ae2",
"metadata": {
"collapsed": false
},
"source": [
"### Rozkład normalny\n",
"\n",
"**Rozkład normalny** $\\mathcal{N}(\\mu, \\sigma)$ jest przykładem rozkładu ciągłego i zadany jest przez **gęstość**\n",
"$$f_{\\mu,\\sigma}(x) = \\frac{1}{\\sigma\\sqrt{2\\pi}}\\exp\\left(\\frac{-(x-\\mu)^2}{2\\sigma^2} \\right), $$\n",
"gdzie parametry $\\mu$ i $\\sigma$ oznaczają odpowiednio wartość oczekiwaną i odchylenie standardowe. Specjalnym przypadkiem jest **standardowy rozkład normalny** $\\mathcal{N}(0, 1)$, czyli rozkład normalny o parametrach $\\mu=0$ i $\\sigma=1$, dla którego gęstość dana jest wzorem\n",
"$$f(x) = f_{1, 0}(x) = \\frac{1}{\\sqrt{2\\pi}} \\exp\\left(\\frac{-x^2} 2\\right).$$ \n",
"W przypadku rozkładów ciągłych prawdopodobieństwo wyznacza się poprzez obliczenie odpowiedniej całki oznaczonej. Np. jeśli $X\\sim\\mathcal{N}(0,1)$, to dla dowolnego zbioru (borelowskiego) $A$ zachodzi\n",
"$$\\mathbb{P}(X\\in A) = \\int_{A} f(x)dx = \\int_{A} \\frac{1}{\\sqrt{2\\pi}} \\exp\\left(\\frac{-x^2} 2\\right) dx,$$\n",
"co możemy interpretować w ten sposób, że pole pod wykresem gęstości na zbiorze $A$ jest szukanym prawdopodobieństwem, a tym samym \n",
"$$\\mathbb{P}(X\\in \\mathbb{R}) = \\int_{-\\infty}^{\\infty} f(x)dx = 1.$$\n",
"Obliczanie takich całek w wielu sytuacjach jest bardzo skomplikowane (rozkład normalny jest tutaj dobrym przykładem) i wymaga zastosowania odpowiednich metod numerycznych.\n",
"\n",
"Rozkład normalny jest jednym z najważniejszych rozkładów prawdopodobieństwa i ma ogromne zastosowanie przede wszystkim w statystyce. Zobaczmy na początek jak wygląda gęstość standardowego rozkładu normalnego. Ponieważ rozkład normalny z dowolnymi parametrami da się uzyskać ze standardowego rozkładu normalnego przez odpowiednie przeskalowanie, wykres ten będzie miał zawsze taki sam kształt a reprezentująca go krzywa zwana jest **krzywą Gaussa** lub **krzywą dzwonową** (ze względu na swój kształt)."
]
},
{
"cell_type": "code",
"execution_count": 45,
"id": "cec2f6",
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABa0AAANyCAYAAABheOdmAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuNSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/xnp5ZAAAACXBIWXMAABYlAAAWJQFJUiTwAAEAAElEQVR4nOzdd3gU1f7H8fcJaYTee68iCAJSFSkKIioKV0VRBLti7/WC7cfVa8FeL1VFrGBDEaUpKkoXBCmioiBCKIFAEpLz+2NmN5vNbvpmEvJ5Pc8+yfTvzJyZnf3u2XOMtRYRERERERERERERkZIgyusARERERERERERERER8lLQWERERERERERERkRJDSWsRERERERERERERKTGUtBYRERERERERERGREkNJaxEREREREREREREpMZS0FhEREREREREREZESQ0lrERERERERERERESkxlLQWERERERERERERkRJDSWsRERERERERERERKTGUtBYRERERERERERGREkNJaxEREREREREREREpMZS0FhEREREREREREZESQ0lrERERERERERERESkxor0OQEREpDQxxtQCrnUHX7TW7vQyHhEREREREZGjjWpai4iI5M9kYDxQXglrEW8YY04xxqQbY/42xjT1Oh4RERERESlaSlqLiOSTMca6r6bFsK2t7rb6RnpbkjtjzE3AEOBd4O4iWudo9xwvKIr1lWVl7XqJxP4aYxa46xxdgGWLpSwbY+oArwMpwJnW2q2R3N7RzBjT1PeeFmLaFHfaeA9CKxFyOj6RWK4olLX7YGlljOnrnqetXsciJYsxZrxbNqZ4HUsoxfk5SERESWsRKRECPhzn9rrJ61ilZDDGdHIf7EcX1/aA/wDfA6OstcWejBAp64wxUTgJ69rARdbapUW8/mK9r4iISNEyxpzt3sf7eh2LiIgUjtq0FpGSJg1IzGH6weIKpITYDBwGkr0OpATqBIwDFgJTIrkhY0wF4C1gO3CWtfZQEa5+H7AB+L0I1yniheIoy3cDpwC3W2vfj8D6O1FM9xUREYmIs4FL3P8XeBeGiIgUlpLWIlLSLLHW9vU6iJLCWjvA6xgErLUHgbYRWvcHwAeRWLdIcYp0WTbGxAMGuNpa+3KktiMiIiIiIt5T0lpERERESjxr7WHgYa/jEBERERGRyFOb1iJSKuWlw69wHZkE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
"text/plain": [
"<Figure size 864x504 with 1 Axes>"
]
},
"execution_count": 45,
"metadata": {
"image/png": {
"height": 441,
"width": 726
},
"needs_background": "light"
},
"output_type": "execute_result"
}
],
"source": [
"# argumenty x gęstości standardowego rozkładu normalnego\n",
"x = np.linspace(-4, 4, 1000)\n",
"pdf_values = stats.norm.pdf(x)\n",
"\n",
"# tworzenie wykresu\n",
"plt.plot(x, pdf_values, label='gęstość f(x) standardowego rozkładu normalnego', color='green')\n",
"plt.title('Funkcja gęstości prawdopodobieństwa dla rozkładu normalnego standardowego')\n",
"plt.xlabel('x')\n",
"plt.ylabel('f(x)')\n",
"plt.grid()\n",
"plt.legend()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"id": "0436fe",
"metadata": {
"collapsed": false
},
"source": [
"**Przykład 6**\n",
"\n",
"Tym razem porównamy rozkład normalny z rozkładem Poissona. Ponieważ rozkład normalny jest rozkładem ciągłym, a rozkład Poissona jest rozkładem dyskretnym, porównamy dystrybuanty obu rozkładów na przykładzie zmiennych losowych $Z \\sim \\mathcal{N}(\\mu, \\sigma)$ i $Y \\sim Po(\\lambda)$. Parametry dobierzemy w taki sposób, aby\n",
"$$\\mathbb{E}(Z) = \\mu = \\lambda = \\mathbb{E}(Y) \\quad \\text{oraz} \\quad Var(Z) = \\sigma^2 = \\lambda = Var(Y).$$\n",
"Okazuje się, że jeśli tylko $\\lambda$ jest duża i zachodzą powyższe równości, to rozkład Poissona dobrze przybliża rozkład normalny. Zatem przyjmijmy, że $Z \\sim \\mathcal{N}(100, 10)$ i $Y \\sim Po(100)$, a następnie narysujmy wykresy obydwu dystrybuant."
]
},
{
"cell_type": "code",
"execution_count": 48,
"id": "197497",
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 864x504 with 1 Axes>"
]
},
"execution_count": 48,
"metadata": {
"image/png": {
"height": 440,
"width": 720
},
"needs_background": "light"
},
"output_type": "execute_result"
}
],
"source": [
"# definiujemy parametry dla rozkładu normalnego\n",
"mu = 100\n",
"sigma = 10\n",
"x_norm = np.linspace(mu - 4*sigma, mu + 4*sigma, 1000)\n",
"cdf_norm = stats.norm.cdf(x_norm, mu, sigma)\n",
"\n",
"# definiujemy parametry dla rozkładu Poissona\n",
"lambda_poisson = 100\n",
"x_poisson = np.arange(0, 150) # Adjusted range for visualization\n",
"cdf_poisson = stats.poisson.cdf(x_poisson, lambda_poisson)\n",
"\n",
"# tworzenie wykresu\n",
"plt.plot(x_norm, cdf_norm, label='dystrybuanta rozkładu normalnego (mu=100, sigma=10)', color='green')\n",
"plt.step(x_poisson, cdf_poisson, label='dystrybuanta rozkładu Poissona (lambda=100)', color='orange', where='post')\n",
"\n",
"plt.title('Dystrybuanty rozkładu normalnego i rozkładu Poissona')\n",
"plt.xlabel('x')\n",
"plt.ylabel('F(x)')\n",
"plt.legend()\n",
"plt.grid()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"id": "f3b5ba",
"metadata": {
"collapsed": false
},
"source": [
"## Bibliografia\n",
"\n",
"Dokumentację dotyczącą omawianych pakietów można znaleźć na stronach:\n",
"* [NumPy](https://numpy.org/doc/stable/#)\n",
"* [SciPy](https://docs.scipy.org/doc/scipy/index.html)\n",
"* [Matplotlib](https://matplotlib.org/stable/users/index)"
]
},
{
"cell_type": "raw",
"id": "330537",
"metadata": {
"collapsed": false
},
"source": [
]
},
{
"cell_type": "raw",
"id": "b764e2",
"metadata": {
"collapsed": false
},
"source": [
]
}
],
"metadata": {
"kernelspec": {
"argv": [
"/usr/bin/python3",
"-m",
"ipykernel",
"--HistoryManager.enabled=False",
"--matplotlib=inline",
"-c",
"%config InlineBackend.figure_formats = set(['retina'])\nimport matplotlib; matplotlib.rcParams['figure.figsize'] = (12, 7)",
"-f",
"{connection_file}"
],
"display_name": "Python 3 (system-wide)",
"env": {
},
"language": "python",
"metadata": {
"cocalc": {
"description": "Python 3 programming language",
"priority": 100,
"url": "https://www.python.org/"
}
},
"name": "python3",
"resource_dir": "/ext/jupyter/kernels/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.10.12"
}
},
"nbformat": 4,
"nbformat_minor": 4
}