Berechnen Sie anhand der Wahrscheinlichkeitsverteilung der Population die Stichprobenverteilung. Dieses Mal werden wir uns mit diskreten Verteilungen befassen.
--Verwenden Sie das Statistikpaket scipy.stats von scipy, eine Sammlung von Python-Berechnungspaketen für Wissenschaft und Technologie sowie die Anzahl der numerischen Berechnungsbibliotheken. --Berechnen Sie in den folgenden 3 Schritten.
scipy.stats.rv_discrete Das Folgende ist ein Auszug aus der Scipy-Dokumentation. Sie finden es im Abschnitt Hilfebeispiel, den Sie wie folgt lesen können:
from scipy import stats
help(stats.rv_discrete)
Übergeben Sie einfach die diskrete Wahrscheinlichkeitsvariable an $ xk $, die Wahrscheinlichkeit, die $ pk $ entspricht, und übergeben Sie sie an stats.rv_discrete
.
Dies ist ein Beispiel für eine stochastische Variable, die 7 diskrete Werte annimmt.
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))
Gehen Sie wie folgt vor, um die probabilistische Massenfunktion (pmf) der diskreten Verteilung zu visualisieren.
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()
Die Abtastung erfolgt aus der erstellten diskreten Verteilung. Wenn Sie beispielsweise 1000-mal zufällig eine Stichprobe erstellen möchten, können Sie wie folgt vorgehen. (rvs: random variables) Wenn Sie den Startwert der Zufallszahl festlegen möchten, um die Reproduzierbarkeit zu gewährleisten, kommentieren Sie die erste Zeile aus.
import numpy as np
# np.random.seed(0)
sampled_rvs = custm.rvs(size=1000)
Berechnen Sie mit der Histogrammfunktion von numpy. Vergessen Sie nicht, +1 zu bin hinzuzufügen.
f = np.histogram(sampled_rvs, bins = np.arange(7 + 1), density=True)[0]
Die obigen Inhalte sind zusammengefasst.
Bisher haben wir uns mit dem Fall der eindimensionalen Wahrscheinlichkeitsverteilung befasst, aber damit wir die mehrdimensionale gleichzeitige Wahrscheinlichkeitsverteilung handhaben können.
Zerdrücken Sie es zuerst mit p.ravel ()
auf eine Dimension, berechnen Sie die Probenverteilung, formen Sie es neu und geben Sie es dann zurück.
Übergeben Sie das Argument p als Array von 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