Statystyka w języku Python
2019-08-19
Rozdział 1 Statystyki rozkładu
1.1 Rozkład dyskretny
Funkcja rozkładu prawdopodobieństwa \(f(x)\) przedstawia dowolny rozkład dyskretny gdy: \[\begin{equation} 0\leq f(x_i)\leq1\quad\textrm{oraz}\quad \sum_{i=1}^{n}f(x_i)=1\quad\textrm{dla}\quad i=1,2,3,\dots,n \tag{1.1} \end{equation}\]
Statystyki dla tego rodzaju rozkładów można obliczyć za pomocą wzorów:
\[\begin{align} E(x)=\sum_{i=1}^{n}x_i\cdot f(x_i) \quad\longrightarrow\quad & \textrm{średnia} \tag{1.2}\\[2.5pt] V(x)=\sum_{i=1}^{n}f(x_i)\cdot \big[x_i-E(x)\big]^2 \quad\longrightarrow\quad & \textrm{wariancja} \tag{1.3}\\[2.5pt] SK(x)=\frac{1}{D(x)^3}\sum_{i=1}^{n}f(x_i)\cdot \big[x_i-E(x)\big]^3 \quad\longrightarrow\quad & \textrm{skośność} \tag{1.4}\\[2.5pt] KU(x)=\frac{1}{D(x)^4}\sum_{i=1}^{n}f(x_i)\cdot \big[x_i-E(x)\big]^4-3 \quad\longrightarrow\quad & \textrm{kurtoza} \tag{1.5} \end{align}\]
Przykładowo, dla rozkładu prawdopodobieństwa (rozkład Poissona) danego wzorem \(f(x)=\frac{\lambda^x\exp(-\lambda)}{x!}\) gdzie \(x!=\Gamma(x+1)\) można wyprowadzić następujące wzory: \(E(x)= \lambda\), \(V(x)=\lambda\), \(SK(x)=\lambda^{-1/2}\), \(KU(x)=\lambda^{-1}\).
import scipy.stats as stats
import pandas as pd
mu, var, sk, ku = stats.poisson.stats(mu=3,loc=0, moments='mvsk')
df = pd.DataFrame({'średnia' :[mu], 'wariancja' :[var],\
'skośność':[sk.round(4)], 'kurtoza':[ku.round(4)]})
print(df)
## średnia wariancja skośność kurtoza
## 0 3.0 3.0 0.5774 0.3333
1.2 Rozkład ciągły
Funkcja rozkładu prawdopodobieństwa \(f(x)\) przedstawia dowolny rozkład ciągły gdy: \[\begin{equation} 0\leq f(x_i)\leq1\quad\textrm{oraz}\quad \int_{-\infty}^{+\infty}f(x)\;dx=1 \tag{1.6} \end{equation}\]
Statystyki dla tego rodzaju rozkładów można obliczyć za pomocą wzorów:
\[\begin{align} E(x)=\int_{-\infty}^{\infty}x\cdot f(x)\; dx \quad\longrightarrow\quad & \textrm{średnia} \tag{1.7}\\[2.5pt] V(x)=\int_{-\infty}^{\infty} f(x)\cdot\big[x-E(x)\big]^2\; dx \quad\longrightarrow\quad & \textrm{wariancja} \tag{1.8}\\[2.5pt] SK(x)=\frac{1}{D(x)^3}\int_{-\infty}^{\infty} f(x)\cdot\big[x-E(x)\big]^3\; dx \quad\longrightarrow\quad & \textrm{skośność} \tag{1.9}\\[2.5pt] KU(x)=\frac{1}{D(x)^4}\int_{-\infty}^{\infty} f(x)\cdot\big[x-E(x)\big]^4\; dx-3 \quad\longrightarrow\quad & \textrm{kurtoza} \tag{1.10} \end{align}\]
Warto zauważyć, że parametry danego rozkładu mogą odpowiadać pewnej kombinacji średniej i wariancj. W przypadku rozkładu gamma (patrz rozdział 3) będziemy mieli: \(E(x)=a\cdot s\), \(V(x)=a\cdot s^2\), \(SK(x)=\sqrt{4/a}\), \(KU(x)=6/a\). Wynika z tego, że \(a=E(x)^2/V(x)\) oraz \(s=V(x)/E(x)\) to odpowiednio parametr kształtu oraz skali.
import scipy.stats as stats
v = stats.gamma.rvs(a=1.3,loc=0,scale=1.36,size=150,random_state=2305)
fit = stats.gamma.fit(v,floc=0)
mu,var,sk,ku = stats.gamma.stats(a=fit[0],loc=fit[1],scale=fit[2], moments='mvsk')
print("MLE:\na= %.4f, loc= %.4f, s= %.4f" % (fit[0],fit[1],fit[2]))
print("\nśrednia= %.2f, wariancja= %.2f, skośność= %.2f, kurtoza= %.2f" % (mu,var,sk,ku))
print("\nMOM:\nśrednia^2/wariancja: a= %.2f, wariancja/średnia: s= %.2f" % (mu**2/var, var/mu))
## MLE:
## a= 1.1907, loc= 0.0000, s= 1.3814
##
## średnia= 1.64, wariancja= 2.27, skośność= 1.83, kurtoza= 5.04
##
## MOM:
## średnia^2/wariancja: a= 1.19, wariancja/średnia: s= 1.38
Ciekawym przypadkiem jest rozkład normalny (patrz rozdział 2) ponieważ średnia oraz odchylenie standardowe czyli pierwiastek kwadratowy z wariancji są jednocześnie parametrami tego rozkładu. Dodajmy, że nie każdy rozkład prawdopodobieństwa musi mieć te statystyki określone. Przykładem może być rozkład Cauchy’ego który nie ma zdefiniowanej średniej, wariancji, skośności oraz kurtozy.