<jupyter_start><jupyter_text>Distribuciones continuas (e.j. gaussiana)Recordemos que la distribución de probabilidad normal o gaussiana está dada por: $$P(X) = \frac{1}{\sigma \sqrt{2 \pi}} \exp{\left[-\frac{1}{2}\left(\frac{X-\mu}{\sigma} \right)^2 \right]}$$donde:* $\mu$: media de la distribución* $\sigma$: desviación estandar de la distribución`Ejemplo`: considerando una variable aleatoria que sigue una distribución normal con media $\mu=4$ y desviación estándar $\sigma=0.3$, la probabilidad de que dicha variable tome el valor de $0.2$ está dada por: $$P(0.2) =  \frac{1}{0.3 \sqrt{2 \pi}} \exp{\left[-\frac{1}{2}\left(\frac{0.2-4}{0.3} \right)^2 \right]}$$Lo cual en Python se traduce en: ```pythonfrom scipy.stats import normnorm(mu, sigma).pdf(X)```---Así también, la distribucion de probabilidad acumulada correspondiente está dada por: $$C(X) = \int_{x<=X} P(x)dx = \int_{- \infty}^xP(X)dX $$teniendo en cuenta que $Dom(X) = (-\infty, \infty)$. `Ejemplo`: considerando una variable aleatoria que sigue una distribucion normal con media $\mu=4$ y desviación estándar $\sigma=0.3$, la probabilidad de que dicha variable tome el valor de $0.2$ o menos está dada por:$$C(0.2) = \int_{x<=0.2} P(x)dx = \int_{- \infty}^{0.2}  \left\{\frac{1}{0.3 \sqrt{2 \pi}} \exp{\left[-\frac{1}{2}\left(\frac{X-4}{0.3} \right)^2 \right]} \right\} dX $$La cual se calcula en Python como: ```python from scipy.stats import normnorm(mu, sigma).cdf(X)```_**Es importante recordar que la función de probabilidad acumulada de la distribución gaussiana no se puede calcular de forma exacta, ya que la integral anterior no tiene una expresión cerrada conocida. Es decir, los métodos de integración conocidos no funcionan para resolver esta integral.**_  Ejercicios (bloque 1)Considerando una variable aleatoria que sigue una distribución normal con media $\mu=4$ y desviación estándar $\sigma=0.1$, calcula las siguientes probabilidades (usando Python):1. $P(X=4)=0$2. $P(X=-10)=0$3. $P(X=10)=0$4. $P(X<=4)=0.5$6. $P(X>=4)=0.5$<jupyter_code>from scipy.stats import norm

print(norm(4,0.1).cdf(4))<jupyter_output>0.5<jupyter_text>De la binomial a la gaussianaEn la clase 8 vimos como generar secuencias aleatorias de experimentos binomiales ([aquí](https://colab.research.google.com/drive/1MR9VZg19vHyZhvWWuxtNcy_3PZQ7AfwW?usp=sharing)), donde cada experimento era lanzar un cierto número de monedas. **¿Qué sucede si el número consecutivo de monedas que lanzamos en cada experimento (trial) es muy largo?**La función `generate_binomial_trials()` nos muestra lo que sucede si graficamos los resultados de muchos experimentos de lanzar 100 monedas en cada intento, con pyplot:<jupyter_code>import numpy as np
from numpy.random import binomial
import matplotlib.pyplot as plt

def generate_binomial_trials(trials=1000, coin_toss=100):
  '''
  el resultado de esta funcion es generar un conjuntos 
  de experimentos binomiales (trials) y de cada uno obtener 
  las cantidades de exitos en cada secuencia (e.j. lanzar monedas).

  * trial: es una secuencia de <coin_toss> lanzamientos de moneda

  * coin_toss: es el numero de monedas lanzadas en cada trial
  '''
  arr = []
  for _ in range(trials):
    arr.append(binomial(coin_toss, 0.5))
  values, dist = np.unique(arr, return_counts=True)

  return values, dist, np.array(arr)

values, dist, arr = generate_binomial_trials(100000)
plt.bar(values, dist)<jupyter_output><empty_output><jupyter_text>¿Se parece a algo conocido? Tal vez una ditribución normal se ajuste, para verificarlo haremos el siguiente ejercicio:  Ejercicios (bloque 2)1. Con los resultados anteriores guardados en `values, dist` ajusta, usando el método de estimación paramétrica, una distribución gaussiana donde la media y desviación estándar correspondan a lo calculado a partir de los datos, de la misma manera que se hizo en el notebook de la clase 9 ([aquí](https://colab.research.google.com/drive/1weFtkmxdn_WnGW582Xugj9t7Mjzxis5b?usp=sharing)).<jupyter_code># Sabiendo que la distribución es binomial, podemos calcular la media y desviación estandar de la siguiente manera
# mu = número de intentos (coin_toss) * p
# sigma = math.sqrt(coin_toss*p*(1-p))
# Fuente: https://stats.libretexts.org/Bookshelves/Introductory_Statistics/Book%3A_Statistics_Using_Technology_(Kozak)/05%3A_Discrete_Probability_Distributions/5.03%3A_Mean_and_Standard_Deviation_of_Binomial_Distribution

mu = 100 * 0.5
sigma = (100*0.5**2)**0.5
normal = norm(mu, sigma)

X = np.arange(30,70,0.1)
Y = [normal.pdf(x) for x in X]

plt.plot(X, Y)                                                                       
plt.bar(values, dist/100000)
# Otra solución, en caso de que no tengamos la certeza de que la distribución es efectivamente binomial
# Para esto toca modificar la función original para que retorne el los datos completos

mu = arr.mean()
sigma = arr.std()
normal = norm(mu, sigma)

X = np.arange(30,70,0.1)
Y = [normal.pdf(x) for x in X]

plt.plot(X, Y)
plt.bar(values, dist/len(arr))<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.1209098164405427, 'fraction_numerical': 0.029728651237031126, 'mean_word_length': 4.856308411214953, 'pattern_counts': {'":': 0, '<': 16, '<?xml version=': 0, '>': 14, 'https://': 3, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 3, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '3', 'dir': 'jupyter-structured-clean-dedup', 'id': '481819', 'license': 'CC0-1.0', 'n_tokens_mistral': 1886, 'n_tokens_neox': 1799, 'n_words': 550, 'path': 'retorsYapuntes/DistribucionesDeProbabilidadContinuas.ipynb', 'repo_name': 'yeyomuri/probabilidad', 'size': '5012'}