[PYTHON] Berechnen Sie die Probenverteilung mit Scipy (diskrete Verteilung)

Zweck

Berechnen Sie anhand der Wahrscheinlichkeitsverteilung der Population die Stichprobenverteilung. Dieses Mal werden wir uns mit diskreten Verteilungen befassen.

Methode

Politik

--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.

  1. Definieren Sie die diskrete Wahrscheinlichkeitsverteilung der Population als diskrete Verteilung auf scipy.stats
  2. Führen Sie eine Probenahme durch
  3. Berechnen Sie die Probenverteilung aus der erhaltenen Probe

Definition der diskreten Verteilung

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)

Definition der diskreten Verteilung

Ü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))

Visualisierung der diskreten Verteilung

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()

Probenahme

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)

Berechnung der Probenverteilung

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]

Zu einer Funktion zusammenfügen

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

Berechnen Sie die Probenverteilung mit Scipy (diskrete Verteilung)
Generieren Sie mit SciPy eine Normalverteilung
LPC mit Scipy
ICA mit Scipy
CORDIC mit Scipy
1. Mit Python 2-1 gelernte Statistiken. Wahrscheinlichkeitsverteilung [diskrete Variable]
Erstellen Sie einen Filter mit scipy
Daten mit Scipy normieren
Berechnen Sie tf-idf mit scikit-learn
Mit Python erstellte Beispieldaten
3. Normalverteilung mit neuronalem Netz!
Verwenden Sie OpenBLAS mit numpy, scipy
[MCMC] WAIC mit Pystan berechnen
Spitzenwert mit scipy extrahieren