import numpy as np
from numpy.random import binomial #generador aleatorio de numeros basados en la distro binomial
from scipy.stats import binom #distro teorica
from math import factorial
import matplotlib.pyplot as plt #visualizaciones
# (ejecuta esta celda varias veces para observar la variación en los resultados)
p=0.5
n=3
binomial(n, p)
#Simulando 100 lanzamientos
# Vamos a hacer un experimento generando una muestra de conjuntos de lanzamientos de a 3 monedas
arr = []
for _ in range(100):
arr.append(binomial(n, p))
print(arr)
#frecuencias
np.unique(arr, return_counts=True)
# Probabilidades Distribución Empírica
np.unique(arr, return_counts=True)[1]/len(arr) # Claramente estas probabilidades cambian de acuerdo a la muestra generada por el generador aleatorio
#probabilidades Distribución Teórica
values= [0,1,2,3] # valores que puede tomar nuestra variable aleatoria x
[binom(3,0.5).pmf(k) for k in values] #claramente estas probabilidades son fijas pues es distro teorica
def plot_hist(num_trials):
values = [0,1,2,3]
arr = []
for _ in range(num_trials):
arr.append(binomial(3, 0.5))#generador de simulacion de lanzamientos bajo la distro binomial
distribucion_simulada = np.unique(arr, return_counts=True)[1]/len(arr) #de los datos que obtendría lanzando 20
distribucion_teorica = [binom(3, 0.5).pmf(k) for k in values]
plt.bar(values, distribucion_teorica, label = 'teoría', color = 'red')
plt.bar(values, distribucion_simulada, label = 'simulación', alpha = 0.5, color = 'blue')
plt.title('simulación con {} experimentos'.format(num_trials))
plt.show()
#repitamos 20 veces el experimento de: lanzar una moneda 3 veces y contar frecuencias de exitos {0,1,2,3} segun distro teórica y simulada o empírica
plot_hist(20)
#repitamos 200 veces el experimento de: lanzar una moneda 3 veces y contar frecuencias de exitos {0,1,2,3} segun distro teórica y simulada o empírica
plot_hist(200)
#repitamos 20000 veces el experimento de: lanzar una moneda 3 veces y contar frecuencias de exitos {0,1,2,3} segun distro teórica y simulada o empírica
plot_hist(20000)
n, p = 3, 0.5
mean, var, skew, kurt = binom.stats(n, p, moments='mvsk')
print(mean,var,skew,kurt)