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.

Author: John, 2012-12-13

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

Tutaj wpisz opis obrazka

 70
Author: Geoff,
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:

Tutaj wpisz opis obrazka

Dokumentacja i więcej przykładów są tutaj

 28
Author: Akavall,
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.

Http://statsmodels.sourceforge.net/devel/generated/statsmodels.graphics.gofplots.qqplot_2samples.html

 13
Author: ccap,
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
 3
Author: grasshopper,
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)
 2
Author: John,
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"

 2
Author: Ravi Gurnatham,
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)
 1
Author: sushmit,
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