<jupyter_start><jupyter_text>Ejercicios de ilustración método de transformada inversa y aceptación y rechazo<jupyter_code># Importamos librerías a trabajar en todas las simulaciones
import matplotlib.pyplot as plt
import numpy as np
from itertools import cycle  # Librería para hacer ciclos
import scipy.stats as st     # Librería estadística
from math import factorial as fac # Importo la operación factorial

%matplotlib inline<jupyter_output><empty_output><jupyter_text>Ilustración método de la transformada inversa con paquete `stats`<jupyter_code>plt.hist(st.norm.ppf(np.random.rand(1000)), label='MTI')
plt.hist(st.norm.rvs(size=1000), label='M.RVS', alpha=0.5)
plt.legend()

# Elegir la distribución
name_dist = 'chi'
# Explorar la función de la función getattr
dist = getattr(st, name_dist)
# Parametros de la distribución (tupla)
params = (4, 0, 1)
# Cantidad de términos
N = 5000
# Diccionario de argumentos de la distribución
args = {'df': 6, 'loc': 0, 'scale': 1}

# Generación de variable aleatorias de la distrubición elegida
x = dist(**args).rvs(size=1000)

# Comparación de histogramas
# 1. Histograma distribución original
plt.figure(figsize=[10,5])
plt.plot(np.arange(0, 5, 0.1),  dist(**args).pdf(np.arange(0, 5, 0.1)))

plt.hist(x, bins=50, density=True, label='distribución original');

# 2. Implementación del método de la transformada inversa usando función 'ppf'
U = np.random.rand(N)
f_inv = dist(**args).ppf(U)
plt.hist(f_inv, bins=50, density=True, label='método de la transformada inversa', alpha=0.5);
plt.legend()<jupyter_output><empty_output><jupyter_text>**Ejercicio 2**  1. Generación variable aleatoria continua$$h(x)=\begin{cases}0, & x<0 \\x, & 0 \le x < 1 \\2-x, & 1\le x \le 2 \\0,& x>2\end{cases}$$Genere muestres aleatorias que distribuyan según la función dada usando el método de la transformada inversa y grafique el histograma de 100 muestras generadas con el método y compárela con el función $h(x)$ dada, esto con el fín de validar que el procedimiento fue realizado de manera correcta Método de la transformada inversa<jupyter_code>h = lambda x: 0 if x < 0 else (x if 0 < x < 1 else (2 - x if 1 <= x <= 2 else 0))

x = np.arange(-0.5, 2.5, 0.01)
plt.plot(x, [h(xi) for xi in x])
U = np.random.rand(N)

H_inv = lambda u: np.sqrt(2 * u) if 0 <= u <= 0.5 else 2 - np.sqrt(4 - 2 *(1 + u))
H_inv_values = [H_inv(ui) for ui in U]

# Validar función inversa (gráfica)
h = lambda x: 0 if x < 0 else (x if 0 < x < 1 else (2 - x if 1 <= x <= 2 else 0))
plt.plot(x, [h(xi) for xi in x], label='pdf')

plt.hist(H_inv_values, bins=50, density=True, label='MTI')
N = 500
# Crear función acumulada
H = lambda x: 0 if x<0 else (x ** 2 / 2 if 0 <= x < 1 else (-x **2 / 2  + 2 * x -1 if 1 <= x <= 2 else 0) )

# Graficar función acumulada
x = np.arange(0, 2, 0.01)
plt.plot(x, [H(xi) for xi in x], label='$H(x)$')

# Crear función inversa
# Vector de aleatorios uniformer
U = np.random.rand(N)

H_inv = lambda u: np.sqrt(2 * u) if 0 <= u <= 0.5 else 2 - np.sqrt(4 - 2 *(1 + u))
# Vector generado con MTI
H_inv_values = [H_inv(ui) for ui in U]

# Validar función inversa (gráfica)

# Graficar histograma aleatorios
plt.hist(H_inv_values, bins=50, density=True, label='MTI')

# Función de densidad h(x)
h = lambda x: 0 if x < 0 else (x if 0 < x < 1 else (2 - x if 1 <= x <= 2 else 0))
plt.plot(x, [h(xi) for xi in x], label='pdf')

plt.legend();<jupyter_output><empty_output><jupyter_text>Método de aceptación y rechazo<jupyter_code>N = 100

# Graficar densidad de probabilidad h(x)

# Programar método de aceptación y rechazo

# Graficar puntos aceptados

# Almacenar números aceptados en una variable y graficar su histograma<jupyter_output><empty_output><jupyter_text>Ejercicio 3Suponga que tiene la siguiente probability mass function $$P(X=k) = \begin{cases} \frac{1}{3}\left( \frac{2}{3}\right)^{k-1}, & \text{si } k=1, 2, \cdots \\0, & \text{otro caso}\end{cases}$$<jupyter_code>N = 700
# PMF p(x)
p = lambda k: (1 / 3) * (2 / 3) ** (k-1) 

# Gráfica de pmf
k = np.arange(1, 20)
plt.plot(k, p(k), 'r*')

# Método de aceptación rechazo discreto
max_p = p(1)<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.14053398058252428, 'fraction_numerical': 0.03713592233009709, 'mean_word_length': 4.443857331571995, 'pattern_counts': {'":': 0, '<': 47, '<?xml version=': 0, '>': 22, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '5', 'dir': 'jupyter-structured-clean-dedup', 'id': '63296', 'license': 'MIT', 'n_tokens_mistral': 1793, 'n_tokens_neox': 1661, 'n_words': 524, 'path': 'TEMA-2/Clase11_Ejercicios_MTI_MAR.ipynb', 'repo_name': 'AlexiaDiaz/SPF-2021-II', 'size': '4120'}