Kwantyl-Wykres Kwantylowy z użyciem Scypy
Jak stworzyć QQ-plot używając Pythona?
Zakładając, że masz duży zestaw pomiarów i używasz jakiejś funkcji kreślarskiej, która przyjmuje wartości XY jako dane wejściowe. Funkcja powinna wykreślić kwantyle pomiarów względem odpowiednich kwantyli pewnego rozkładu (normalnego, jednolitego...).
Uzyskany wykres pozwala nam następnie ocenić w naszym pomiarze zgodnie z założonym rozkładem lub nie.
Http://en.wikipedia.org/wiki/Quantile-quantile_plot
Zarówno R jak i Matlab dostarczają do tego gotowe funkcje, ale zastanawiam się, jaka byłaby najczystsza metoda implementacji w Pythonie.
7 answers
Myślę, że scipy.stats.probplot
zrobi to, co chcesz. Więcej szczegółów można znaleźć w dokumentacji .
import numpy as np
import pylab
import scipy.stats as stats
measurements = np.random.normal(loc = 20, scale = 5, size=100)
stats.probplot(measurements, dist="norm", plot=pylab)
pylab.show()
Wynik
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-13 18:11:14
Użycie qqplot
z statsmodels.api
jest inną opcją:
Bardzo podstawowy przykład:
import numpy as np
import statsmodels.api as sm
import pylab
test = np.random.normal(0,1, 1000)
sm.qqplot(test, line='45')
pylab.show()
Wynik:
Dokumentacja i więcej przykładów są tutaj
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-22 14:38:40
Jeśli chcesz wykonać Wykres QQ jednej próbki vs. drugiej, statsmodels zawiera funkcję qqplot_2samples (). Podobnie jak Ricky Robinson w komentarzu powyżej, to jest to, co myślę o wykresie QQ vs Wykres prawdopodobieństwa, który jest próbką przeciwko rozkład teoretyczny.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-13 19:44:02
Istnieje teraz w pakiecie statsmodels:
Http://statsmodels.sourceforge.net/devel/generated/statsmodels.graphics.gofplots.qqplot.html
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-02 12:19:09
Wymyśliłem to. Może uda Ci się to poprawić. Szczególnie metoda generowania kwantyli rozkładu wydaje mi się kłopotliwa.
Możesz zastąpić np.random.normal
dowolną inną dystrybucją z np.random
, aby porównać dane z innymi dystrybucjami.
#!/bin/python
import numpy as np
measurements = np.random.normal(loc = 20, scale = 5, size=100000)
def qq_plot(data, sample_size):
qq = np.ones([sample_size, 2])
np.random.shuffle(data)
qq[:, 0] = np.sort(data[0:sample_size])
qq[:, 1] = np.sort(np.random.normal(size = sample_size))
return qq
print qq_plot(measurements, 1000)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-13 17:54:07
import numpy as np
import pylab
import scipy.stats as stats
measurements = np.random.normal(loc = 20, scale = 5, size=100)
stats.probplot(measurements, dist="norm", plot=pylab)
pylab.show()
Tutaj probplot narysuj pomiary wykresu vs rozkład normalny, który speofied w dist = "Norma"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-08 17:43:15
Możesz użyć bokeh
from bokeh.plotting import figure, show
from scipy.stats import probplot
# pd_series is the series you want to plot
series1 = probplot(pd_series, dist="norm")
p1 = figure(title="Normal QQ-Plot", background_fill_color="#E8DDCB")
p1.scatter(series1[0][0],series1[0][1], fill_color="red")
show(p1)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-17 05:39:39