統計学 – 標本と統計量について

目次

概要

統計量について解説し、pandas、numpy を使った計算方法について紹介します。

キーワード

  • 標本 (sample)、ランダム標本 (random sample)
  • 母集団 (population)
  • 標本抽出 (sampling)
  • 統計量 (statistic)

母集団

これから知りたいと思う集団全体を母集団 (population) という。 母集団から分析のために選んだ要素を標本 (sample)、標本を選び出すことを標本抽出 (sampling) という。

標本

確率変数 $X_1, X_2, \cdots, X_n$ が互いに独立で同一な確率分布に従う (independent and identically distributed / i.i.d.) とき、確率変数 $X_1, X_2, \cdots, X_n$ はその確率分布を持つ母集団 (population) からの大きさ $n$ のランダム標本 (random sample of size n) または単に標本 (sample) という。

$X$ を母集団確率変数としたとき、

$$ X_1, X_2, \cdots, X_n \overset{iid}{\sim} X $$

と表す。

統計量

$X_1, X_2, \cdots, X_n$ を母集団確率変数 $X$ からの大きさ $n$ の標本としたとき、$X_1, X_2, \cdots, X_n$ の関数 $T = r(X_1, X_2, \cdots, X_n)$ を統計量 (statistic) という。

  • 統計量もまた確率変数である。
  • 標本 $X_1, X_2, \cdots, X_n$ の観測値を $x_1, x_2, \cdots, x_n$ としたとき、$t = r(x_1, x_2, \cdots, x_n)$ は統計量の値である。
  • 統計量の分布を標本分布 (sampling distribution) という。

順序統計量

$X_1, X_2, \cdots, X_n$ を母集団確率変数 $X$ からの大きさ $n$ の標本としたとき、これを小さい順に並べたものを

$$ X_{(1)} \le X_{(2)} \le \cdots \le X_{(n)} $$

つまり、

$$ \begin{aligned} X_{(1)} &= X_1, X_2, \cdots, X_n の中で1番目に小さい値 \\ &= \min(X_1, X_2, \cdots, X_n)\\ X_{(2)} &= X_1, X_2, \cdots, X_n の中で2番目に小さい値\\ &\vdots \\ X_{(n)} &= X_1, X_2, \cdots, X_n の中で n 番目に小さい値 \\ &= \max(X_1, X_2, \cdots, X_n) \\ \end{aligned} $$

順序統計量 (order statistics) という。

統計量の一覧

  • 標本和 (sample sum)
$$ T(X_1, X_2, \cdots, X_n) = \sum_{i = 1}^n X_i $$
  • 標本平均 (sample mean)
$$ T(X_1, X_2, \cdots, X_n) = \bar{X} = \frac{1}{n} \sum_{i = 1}^n X_i $$
  • 標本平均絶対偏差 (sample mean absolute deviation / MAD)
$$ T(X_1, X_2, \cdots, X_n) = \frac{1}{n} \sum_{i = 1}^n |X_i – \bar{X}| $$
  • (不偏)標本分散 (sample variance)
$$ T(X_1, X_2, \cdots, X_n) = s^2 = \frac{1}{n – 1} \sum_{i = 1}^n (X_i – \bar{X})^2 $$
  • (不偏)標本標準偏差 (sample standard deviation)
$$ T(X_1, X_2, \cdots, X_n) = s = \sqrt{\frac{1}{n – 1} \sum_{i = 1}^n (X_i – \bar{X})^2} $$
  • (不偏)標本標準誤差 (sample standard error of mean / SEM)
$$ T(X_1, X_2, \cdots, X_n) = \frac{s}{\sqrt{n}} $$
  • $r$ 次の標本積率 (r-th sample moment)
$$ T(X_1, X_2, \cdots, X_n) = M_r = \frac{1}{n} \sum_{i = 1}^n X_i^r $$
  • $\bar{X}$ 周りの $r$ 次の標本積率 (r-th sample moment about $\bar{X}$)
$$ T(X_1, X_2, \cdots, X_n) = \frac{1}{n} \sum_{i = 1}^n (X_i – \bar{X})^r $$
  • (不偏)標本歪度 (sample skew)
$$ T(X_1, X_2, \cdots, X_n) = \frac{n}{(n – 1)(n – 2)} \sum_{i = 1}^n \left(\frac{X_i – \bar{X}}{s}\right)^3 $$
  • (不偏)標本尖度 (sample kurtosis)

正規分散の尖度を0とする定義

$$ T(X_1, X_2, \cdots, X_n) = \frac{n(n + 1)}{(n – 1)(n – 2)(n – 3)} \sum_{i = 1}^n \left(\frac{X_i – \bar{X}}{s}\right)^4 – \frac{3(n – 1)^2}{(n – 2)(n – 3)} $$
  • 標本モード (sample mode)
$$ T(X_1, X_2, \cdots, X_n) = 最も頻繁におこる値 $$
  • (不偏)標本共分散 (sample covariance)
$$ T(X_1, X_2, \cdots, X_n) = s_{XY} = \frac{1}{n – 1} \sum_{i = 1}^n (X_i – \bar{X})(Y_i – \bar{Y}) $$
  • (不偏)標本相関係数 (sample correlation coefficient)
$$ T(X_1, X_2, \cdots, X_n) = r_{XY} = \frac{s_{XY}}{\sqrt{s_X} \sqrt{s_Y}} $$
  • 標準メディアン (sample median)
$$ T(X_1, X_2, \cdots, X_n) = \tilde{X} = \begin{cases} X_{(k)} & n = 2k – 1 \\ \frac{X_{(k)} + X_{(k + 1)}}{2} & n = 2k \\ \end{cases} $$
  • 標本範囲 (sample range)
$$ T(X_1, X_2, \cdots, X_n) = R = X_{(n)} – X_{(1)} $$
  • 標本中点 (sample midpoint)
$$ T(X_1, X_2, \cdots, X_n) = \frac{X_{(1)} + X_{(n)}}{2} $$

pandas、numpy で計算する方法

pandas、numpy で計算する方法について紹介します。

名前 名前 (英語) 表記 pandas.DataFrame pandas.Series numpy
標本和 sample sum   pandas.DataFrame.sum pandas.Series.sum numpy.sum
標本平均 sample mean $\bar{X}$ pandas.DataFrame.mean pandas.Series.mean numpy.mean
標本平均絶対偏差 sample mean absolute deviation / MAD   pandas.DataFrame.mad pandas.Series.mad  
(不偏)標本分散 sample variance / VAR $s^2$ pandas.DataFrame.var pandas.Series.var numpy.var(ddof=1)
(不偏)標本標準偏差 sample standard deviation / STD $s$ pandas.DataFrame.std pandas.Series.std numpy.std(ddof=1)
(不偏)標本標準誤差 sample standard error of mean / SEM   pandas.DataFrame.sem pandas.Series.sem  
$r$ 次の標本積率 r-th sample moment $M_r$      
$\bar{X}$ 周りの $r$ 次の標本積率 r-th sample moment about \bar{X}        
(不偏)標本歪度 sample skew   pandas.DataFrame.skew pandas.Series.skew  
(不偏)標本尖度 sample kurtosis   pandas.DataFrame.kurt pandas.DataFrame.kurt  
標本モード sample mode   pandas.DataFrame.mode pandas.Series.mode scipy.stats.mode
(不偏)標本共分散 sample covariance / COV $s_{XY}$  pandas.DataFrame.cov pandas.Series.cov numpy.cov
標本相関係数 sample correlation coefficient / CORR $r_{XY}$ pandas.DataFrame.corr pandas.Series.corr numpy.corrcoef
標準メディアン sample median $\tilde{X}$ pandas.DataFrame.median pandas.Series.median numpy.median
標本範囲 sample range $R$      
標本中点 sample midpoint        
最小   $X_{(1)}$ pandas.DataFrame.min pandas.Series.min numpy.min
最大   $X_{(n)}$ pandas.DataFrame.max pandas.Series.max numpy.max
n 番目に小さい値     pandas.DataFrame.nsmallest pandas.Series.nsmallest  
n 番目に大きい値     pandas.DataFrame.nlargest pandas.Series.nlargest  
In [1]:
import numpy as np
import pandas as pd
from scipy import stats as stats

np.random.seed(0)

x = np.random.randint(0, 10, 100)
s = pd.Series(x)
n = len(x)

## 標本和
print(x.sum())
print(s.sum())

## 標本平均
print(x.mean())
print(s.mean())

# 標本平均絶対偏差
print(np.abs(x - x.mean()).mean())
print(s.mad())

# (不偏)標本分散
print(x.var(ddof=1))
print(s.var())

# (不偏)標本標準偏差
print(x.std(ddof=1))
print(s.std())

# (不偏)標本標準誤差
print(x.std(ddof=1) / np.sqrt(n))
print(s.sem())

# r 次の標本積率
r = 4
print((x ** 4).mean())
print((s ** 4).mean())

# \bar{X} 周りの r 次の標本積率
r = 4
print(((x - x.mean()) ** 4).mean())
print(((s - s.mean()) ** 4).mean())

# 標本歪度
c1 = n / ((n - 1) * (n - 2))
print(c1 * (((x - x.mean()) / x.std(ddof=1)) ** 3).sum())
print(s.skew())

# 標本尖度
c1 = n * (n + 1) / ((n - 1) * (n - 2) * (n - 3))
c2 = 3 * (n - 1) ** 2 / ((n - 2) * (n - 3))
print(c1 * (((x - x.mean()) / x.std(ddof=1)) ** 4).sum() - c2)
print(s.kurt())

# 標本モード
print(stats.mode(x))
print(s.mode())

# 標本共分散
x2 = np.random.randint(0, 10, 100)
s2 = pd.Series(x2)

# 標本共分散行列
print(np.cov([x, x2], rowvar=1, ddof=1))
print([[s.cov(s), s.cov(s2)], [s2.cov(s), s2.cov(s2)]])

# 標本相関係数
print(np.corrcoef([x, x2], rowvar=1))  # 計算には不偏標本共分散を使用
print([[s.corr(s), s.corr(s2)], [s2.corr(s), s2.corr(s2)]])

# 標本メディアン
print(np.median(x))
print(s.median())

# 標本範囲
print(x.max() - x.min())
print(s.max() - s.min())

# 標本中点
print((x.max() + x.min()) / 2)
print((s.max() + s.min()) / 2)

コメント

コメントする

目次