Die Frage ist ziemlich chaotisch mit vielen irrelevanten Informationen, aber vage an den wesentlichen Punkten bleiben. Ich werde versuchen, es so gut wie möglich auszulegen.
Ich denke, was Sie suchen, ist das folgende: Bei einer endlichen Probe aus einer unbekannten Verteilung, wie groß ist die Wahrscheinlichkeit, eine neue Probe zu einem festen Wert zu erhalten?
Ich bin mir nicht sicher, ob es eine allgemeine Antwort darauf gibt, aber in jedem Fall wäre das eine Frage, die man an Statistik- oder Mathematik-Leute stellen sollte. Meine Vermutung ist, dass Sie einige Annahmen über die Verteilung selbst machen müssten.
Für den praktischen Fall könnte es jedoch ausreichen, herauszufinden, in welchem Fach der Stichprobenverteilung der neue Wert liegen würde.
Also angenommen, wir haben eine Verteilung x
, die wir in bins
teilen. Wir können das Histogramm h
unter Verwendung von numpy.histogram
berechnen. Die Wahrscheinlichkeit, in jedem Bin einen Wert zu finden, wird dann durch h/h.sum()
gegeben.
Mit einem Wert von v=0.77
, von dem wir die Wahrscheinlichkeit gemäß der Verteilung wissen möchten, können wir den Bin herausfinden, in dem er nach dem Index ind
im Bin-Array suchen würde, wo dieser Wert eingefügt werden müsste Das Array bleibt sortiert. Dies kann unter Verwendung von numpy.searchsorted
erfolgen.
import numpy as np; np.random.seed(0)
x = np.random.rayleigh(size=1000)
bins = np.linspace(0,4,41)
h, bins_ = np.histogram(x, bins=bins)
prob = h/float(h.sum())
ind = np.searchsorted(bins, 0.77, side="right")
print prob[ind] # which prints 0.058
Also ist die Wahrscheinlichkeit 5,8%, um einen Wert in der Tonne um 0,77 zu probieren.
Eine andere Option wäre, das Histogramm zwischen den Bin-Zentren zu interpolieren, um die Wahrscheinlichkeit zu finden.
Im folgenden Code zeichnen wir eine Verteilung ähnlich der aus dem Bild in der Frage und verwenden beide Methoden, die erste für das Frequenzhistogramm, die zweite für die kumulative Verteilung.
import numpy as np; np.random.seed(0)
import matplotlib.pyplot as plt
x = np.random.rayleigh(size=1000)
y = np.random.normal(size=1000)
bins = np.linspace(0,4,41)
h, bins_ = np.histogram(x, bins=bins)
hcum = np.cumsum(h)/float(np.cumsum(h).max())
points = [[.77,-.55],[1.13,1.08],[2.15,-.3]]
markers = [ur'$\u2660$',ur'$\u2665$',ur'$\u263B$']
colors = ["k", "crimson" , "gold"]
labels = list("ABC")
kws = dict(height_ratios=[1,1,2], hspace=0.0)
fig, (axh, axc, ax) = plt.subplots(nrows=3, figsize=(6,6), gridspec_kw=kws, sharex=True)
cbins = np.zeros(len(bins)+1)
cbins[1:-1] = bins[1:]-np.diff(bins[:2])[0]/2.
cbins[-1] = bins[-1]
hcumc = np.linspace(0,1, len(cbins))
hcumc[1:-1] = hcum
axc.plot(cbins, hcumc, marker=".", markersize="2", mfc="k", mec="k")
axh.bar(bins[:-1], h, width=np.diff(bins[:2])[0], alpha=0.7, ec="C0", align="edge")
ax.scatter(x,y, s=10, alpha=0.7)
for p, m, l, c in zip(points, markers, labels, colors):
kw = dict(ls="", marker=m, color=c, label=l, markeredgewidth=0, ms=10)
# plot points in scatter distribution
ax.plot(p[0],p[1], **kw)
#plot points in bar histogram, find bin in which to plot point
# shift by half the bin width to plot it in the middle of bar
pix = np.searchsorted(bins, p[0], side="right")
axh.plot(bins[pix-1]+np.diff(bins[:2])[0]/2., h[pix-1]/2., **kw)
# plot in cumulative histogram, interpolate, such that point is on curve.
yi = np.interp(p[0], cbins, hcumc)
axc.plot(p[0],yi, **kw)
ax.legend()
plt.tight_layout()
plt.show()
, wem Downvoted meinen Beitrag, würden Sie auf auszuarbeiten, warum so kann ich verbessern, was ich falsch mache? – DarthLazar