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

概要

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

キーワード

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

母集団

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

標本

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

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

X1,X2,,XniidX X_1, X_2, \cdots, X_n \overset{iid}{\sim} X

と表す。

統計量

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

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

順序統計量

X1,X2,,XnX_1, X_2, \cdots, X_n を母集団確率変数 XX からの大きさ nn の標本としたとき、これを小さい順に並べたものを

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

つまり、

X(1)=X1,X2,,Xnの中で1番目に小さい値=min(X1,X2,,Xn)X(2)=X1,X2,,Xnの中で2番目に小さい値X(n)=X1,X2,,Xnの中でn番目に小さい値=max(X1,X2,,Xn) \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(X1,X2,,Xn)=i=1nXi T(X_1, X_2, \cdots, X_n) = \sum_{i = 1}^n X_i
  • 標本平均 (sample mean)
T(X1,X2,,Xn)=Xˉ=1ni=1nXi 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(X1,X2,,Xn)=1ni=1nXiXˉ T(X_1, X_2, \cdots, X_n) = \frac{1}{n} \sum_{i = 1}^n |X_i – \bar{X}|
  • (不偏)標本分散 (sample variance)
T(X1,X2,,Xn)=s2=1n1i=1n(XiXˉ)2 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(X1,X2,,Xn)=s=1n1i=1n(XiXˉ)2 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(X1,X2,,Xn)=sn T(X_1, X_2, \cdots, X_n) = \frac{s}{\sqrt{n}}
  • rr 次の標本積率 (r-th sample moment)
T(X1,X2,,Xn)=Mr=1ni=1nXir T(X_1, X_2, \cdots, X_n) = M_r = \frac{1}{n} \sum_{i = 1}^n X_i^r
  • Xˉ\bar{X} 周りの rr 次の標本積率 (r-th sample moment about Xˉ\bar{X})
T(X1,X2,,Xn)=1ni=1n(XiXˉ)r T(X_1, X_2, \cdots, X_n) = \frac{1}{n} \sum_{i = 1}^n (X_i – \bar{X})^r
  • (不偏)標本歪度 (sample skew)
T(X1,X2,,Xn)=n(n1)(n2)i=1n(XiXˉs)3 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(X1,X2,,Xn)=n(n+1)(n1)(n2)(n3)i=1n(XiXˉs)43(n1)2(n2)(n3) 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(X1,X2,,Xn)=最も頻繁におこる値 T(X_1, X_2, \cdots, X_n) = 最も頻繁におこる値
  • (不偏)標本共分散 (sample covariance)
T(X1,X2,,Xn)=sXY=1n1i=1n(XiXˉ)(YiYˉ) 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(X1,X2,,Xn)=rXY=sXYsXsY T(X_1, X_2, \cdots, X_n) = r_{XY} = \frac{s_{XY}}{\sqrt{s_X} \sqrt{s_Y}}
  • 標準メディアン (sample median)
T(X1,X2,,Xn)=X~={X(k)n=2k1X(k)+X(k+1)2n=2k 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(X1,X2,,Xn)=R=X(n)X(1) T(X_1, X_2, \cdots, X_n) = R = X_{(n)} – X_{(1)}
  • 標本中点 (sample midpoint)
T(X1,X2,,Xn)=X(1)+X(n)2 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 Xˉ\bar{X} pandas.DataFrame.mean pandas.Series.mean numpy.mean
標本平均絶対偏差 sample mean absolute deviation / MAD   pandas.DataFrame.mad pandas.Series.mad  
(不偏)標本分散 sample variance / VAR s2s^2 pandas.DataFrame.var pandas.Series.var numpy.var(ddof=1)
(不偏)標本標準偏差 sample standard deviation / STD ss pandas.DataFrame.std pandas.Series.std numpy.std(ddof=1)
(不偏)標本標準誤差 sample standard error of mean / SEM   pandas.DataFrame.sem pandas.Series.sem  
rr 次の標本積率 r-th sample moment MrM_r      
Xˉ\bar{X} 周りの rr 次の標本積率 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 sXYs_{XY}  pandas.DataFrame.cov pandas.Series.cov numpy.cov
標本相関係数 sample correlation coefficient / CORR rXYr_{XY} pandas.DataFrame.corr pandas.Series.corr numpy.corrcoef
標準メディアン sample median X~\tilde{X} pandas.DataFrame.median pandas.Series.median numpy.median
標本範囲 sample range RR      
標本中点 sample midpoint        
最小   X(1)X_{(1)} pandas.DataFrame.min pandas.Series.min numpy.min
最大   X(n)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)

コメント

コメントする