Compte tenu de la distribution de probabilité de la population, calculez la distribution de l'échantillon. Cette fois, nous traiterons des distributions discrètes.
--Utilisez le package statistique scipy.stats de scipy, qui est une collection de packages de calcul scientifique et technologique de python, et numpy de la bibliothèque de calcul numérique.
scipy.stats.rv_discrete Ce qui suit est un extrait de la documentation scipy. Vous pouvez le trouver dans la section Exemple d'aide, que vous pouvez lire comme suit:
from scipy import stats
help(stats.rv_discrete)
Passez simplement la variable de probabilité discrète à $ xk $, la probabilité correspondant à $ pk $, et passez-la à stats.rv_discrete
.
Voici un exemple de variable stochastique qui prend 7 valeurs discrètes.
from scipy import stats
xk = np.arange(7)
pk = (0.1, 0.2, 0.3, 0.1, 0.1, 0.0, 0.2)
custm = stats.rv_discrete(name='custm', values=(xk, pk))
Pour visualiser la fonction de masse probabiliste (pmf) de la distribution discrète, procédez comme suit.
import matplotlib.pyplot as plt
fig, ax = plt.subplots(1, 1)
ax.plot(xk, custm.pmf(xk), 'ro', ms=12, mec='r')
ax.vlines(xk, 0, custm.pmf(xk), colors='r', lw=4)
plt.show()
L'échantillonnage est effectué à partir de la distribution discrète créée. Par exemple, si vous souhaitez échantillonner au hasard 1 000 fois, vous pouvez procéder comme suit. (rvs: random variables) Si vous souhaitez corriger la graine du nombre aléatoire pour assurer la reproductibilité, supprimez la mise en commentaire de la première ligne.
import numpy as np
# np.random.seed(0)
sampled_rvs = custm.rvs(size=1000)
Calculez en utilisant la fonction d'histogramme de numpy. Veillez à ne pas oublier d'ajouter +1 à la corbeille.
f = np.histogram(sampled_rvs, bins = np.arange(7 + 1), density=True)[0]
Le contenu ci-dessus est résumé.
Jusqu'à présent, nous avons traité le cas de la distribution de probabilité unidimensionnelle, mais pour pouvoir gérer une distribution de probabilité simultanée multidimensionnelle.
Tout d'abord, écrasez-le à une dimension avec p.ravel ()
, calculez la distribution de l'échantillon, remodelez-la, puis renvoyez-la.
Passez l'argument p comme un tableau de nupmy.
import numpy as np
from scipy import stats
def sampling_dist(p, size, seed = 0):
xk = np.arange(p.size)
pk = p.ravel()
true_dist = stats.rv_discrete(name='true_dist', values=(xk, pk))
np.random.seed(seed)
sampled_rvs = true_dist.rvs(size=size)
f = np.histogram(sampled_rvs, bins = np.arange(p.size + 1), density=True)[0]
f.reshape(p.shape)
return(f.reshape(p.shape))
p = np.array([[0.10,0.10],[0.10,0.15],[0.15,0.10],[0.10,0.20]])
p_est = sampling_dist(p, 1000)
print(p)
print(p_est)
Recommended Posts