2016-05-22 3 views
1

Ich habe ein Array von Datenwerten wie folgt:Wie plotten Wahrscheinlichkeit Dichte Funktion (PDF) der Zwischen Ankunftszeit von Ereignissen?

0.000000000000000000e+00 
3.617000000000000171e+01 
1.426779999999999973e+02 
2.526699999999999946e+01 
4.483190000000000168e+02 
7.413999999999999702e+00 
1.132390000000000043e+02 
8.797000000000000597e+00 
1.362599999999999945e+01 
2.080880900000000111e+04 
5.580000000000000071e+00 
3.947999999999999954e+00 
2.615000000000000213e+00 
2.458000000000000185e+00 
8.204600000000000648e+01 
1.641999999999999904e+00 
5.108999999999999986e+00 
2.388999999999999790e+00 
2.105999999999999872e+00 
5.783000000000000362e+00 
4.309999999999999609e+00 
3.685999999999999943e+00 
6.339999999999999858e+00 
2.198999999999999844e+00 
3.568999999999999950e+00 
2.883999999999999897e+00 
7.307999999999999829e+00 
2.515000000000000124e+00 
3.810000000000000053e+00 
2.829000000000000181e+00 
2.593999999999999861e+00 
3.963999999999999968e+00 
7.258000000000000007e+00 
3.543000000000000149e+00 
2.874000000000000110e+00 
................... and so on. 

I Wahrscheinlichkeitsdichtefunktion der Datenwerte darstellen möchten. Ich habe (Wiki) und scipy.stats.gaussian_kde genannt. aber ich verstehe nicht, ob das stimmt oder nicht. Ich benutze Python. einfache Daten Plot-Code ist wie folgt:

from matplotlib import pyplot as plt 
plt.plot(Data) 

Aber jetzt will ich PDF (Wahrscheinlichkeitsdichtefunktion) zeichnen. Aber ich bekomme keine Bibliothek in Python dazu.

+0

Da Sie mit * diskreten * Daten arbeiten, wird Ihr PDF in 'Bins' kategorisiert. Die Erstellung dieser Bins gestaltet sich mit Doppeln schwierig, da es sehr schwierig ist, Gleichheit auf ihnen zu definieren, daher wird Ihr PDF, wie es derzeit aussieht, fast sicher wie eine flache Linie aussehen (da es N eindeutige Werte zählt). Sie müssen eine Art des Vergleichens von diesen wie Rundung usw. einführen. –

+0

Ok. Ich kann es bis zu 2 Dezimalstellen abrunden. wie kann ich dann plotten? @ScottSteinton – KrunalParmar

+1

Nach dem Runden müssen Sie das Vorkommen jeder Zahl zählen und dann durch die Gesamtmenge der Daten dividieren. Dies gibt Ihnen die Wahrscheinlichkeit für jeden Wert. Dieser Wert ist Ihr PDF. –

Antwort

4

Der Datensatz Sie bieten sehr klein ist für eine zuverlässige Kernel-Dichteschätzung zu ermöglichen. Deshalb werde ich das Verfahren demostrate (wenn ich das richtig verstanden, was Sie zu tun versuchen) durch setzen weitere Daten mit

import numpy as np 
import scipy.stats 

# generate data samples 
data = scipy.stats.expon.rvs(loc=0, scale=1, size=1000, random_state=123) 

Eine Kerndichteschätzung kann dann einfach erhalten werden, indem

scipy.stats.gaussian_kde(data,bw_method=bw) 

Aufruf wo bw ist ein (optionaler) Parameter für das Schätzverfahren. Aus diesem Datensatz und unter Berücksichtigung drei Werte für bw ist die Passform, wie unten

# test values for the bw_method option ('None' is the default value) 
bw_values = [None, 0.1, 0.01] 

# generate a list of kde estimators for each bw 
kde = [scipy.stats.gaussian_kde(data,bw_method=bw) for bw in bw_values] 


# plot (normalized) histogram of the data 
import matplotlib.pyplot as plt 
plt.hist(data, 50, normed=1, facecolor='green', alpha=0.5); 

# plot density estimates 
t_range = np.linspace(-2,8,200) 
for i, bw in enumerate(bw_values): 
    plt.plot(t_range,kde[i](t_range),lw=2, label='bw = '+str(bw)) 
plt.xlim(-1,6) 
plt.legend(loc='best') 

enter image description here

Hinweis gezeigt, dass große bw Werte in einer glatteren pdf Schätzung führen, jedoch mit den Kosten (in diesem Beispiel), negative Werte vorzuschlagen, sind möglich, was hier nicht der Fall ist.

1

Verwenden numpy.histogram

Beispiel:

# a is your data array 
hist, bins = np.histogram(a, bins=100, normed=True) 
bin_centers = (bins[1:]+bins[:-1])*0.5 
plt.plot(bin_centers, hist) 
Verwandte Themen