歪度とは

確率分布の左右対称性を表す指標。

確率変数 $X$ の期待値を $\mu$、標準偏差を $\sigma$ として、

\[E\left( \left( \cfrac{X - \mu}{\sigma} \right)^3 \right) = \cfrac{1}{n} \displaystyle \sum_{i=1}^{n} \left( \cfrac{X_i - \mu}{\sigma} \right)^3\]

で定義される。$X$ を標準化した確率変数

\[Z \equiv \cfrac{X - \mu}{\sigma}\]

を導入すれば、$Z$ の3次のモーメントの形で表現することもできる:

\[E(Z^3) = M'''_Z(0)\]

cf. モーメント母関数

解釈

$\left( \cfrac{X - \mu}{\sigma} \right)^3$ の値は、

  • $X$ が平均値よりも大きければ大きいほど、絶対値の大きな正の値を取る
  • $X$ が平均値よりも小さければ小さいほど、絶対値の大きな負の値を取る

平均値からの遠さを3乗することで、平均値から遠いデータが指標に与える寄与率を高くしている。 これにより、

  • 平均値から正の方向に大きく離れたデータが多い → 歪度は絶対値の大きな正の値に
  • 平均値から負の方向に大きく離れたデータが多い → 歪度は絶対値の大きな負の値に

後述の具体例のように、正の方向に裾野が長いと歪度は正になる。

具体例

$\mathrm{skew} \gt 0$ $\mathrm{skew} \lt 0$ $\mathrm{skew} = 0$
Figure_1 Figure_2 Figure_3

(描画に使った Python コード)

import numpy as np
import scipy
import math
from matplotlib import pyplot as plt

def plot_beta(a, b, n, dx):
    # ベータ分布に従う乱数の生成
	x = np.random.beta(a, b, n)
	# 統計量の計算
	ave = np.average(x)
	skew = scipy.stats.skew(x)
	x_max, x_min = np.max(x), np.min(x)
	# 度数分布表の描画
	n_bins = int((x_max - x_min) / dx)
	plt.title(r'Beta Distribution ($\alpha = {}, \beta = {}$), skew = {:.4f}'.format(a, b, skew))
	plt.hist(x, bins=n_bins, density=True)
	plt.axvline(ave, color='red', label='average = {:.4f}'.format(ave))
	# ベータ関数の描画
	B = math.gamma(a) * math.gamma(b) / math.gamma(a + b)
	x_beta = np.linspace(x_min, x_max, 1000)
	beta = x_beta**(a-1) * (1-x_beta)**(b-1) / B
	plt.plot(x_beta, beta)
	plt.legend()
	plt.show()

plot_beta(2, 7, 10000, 0.01)
plot_beta(7, 2, 10000, 0.01)
plot_beta(7, 7, 10000, 0.01)