読者です 読者をやめる 読者になる 読者になる

CUBE SUGAR CONTAINER

技術系のこと書きます。

統計: 変動係数で値のバラつきを比べる

まず初めに、次のようなヒストグラムがあったとする。

f:id:momijiame:20160902215826p:plain

このヒストグラムには、青色と緑色のふたつのグループが含まれている。 それぞれのグループは、平均値や度数が異なるようだ。 果たして、それぞれのグループはどちらの方が値のバラつきが大きいのだろうか?

標準偏差だけでは比較できない

通常、データセットの値のバラつきは分散や標準偏差、四分位数といった統計量で表される。 しかし、これらの統計量は、平均値や単位などが異なると単純に比較することはできない。

例えば、あるカブトムシの大きさの標準偏差が 1 cm で、あるクジラの大きさの標準偏差が 1 m だとしよう。 クジラの方が標準偏差にして 100 倍の大きさがある。 しかし、だからといってクジラの方がバラつきも大きいとは限らない。 元々、その生物がだいたいどれくらいの大きさなのかが分からなければ判断がつかない。

先ほどの例であれば、カブトムシがだいたい 10 cm で標準偏差が 1 cm なのと、クジラがだいたい 20 m で標準偏差が 1 m だとしたら? なんとなくカブトムシの方が値のバラつきが大きそうだ、というのが感覚的にも分かる。

変動係数を使う

こういったときは、両者を比較するのに変動係数という統計量を使う。 なんだか大仰な名前がついてるけど、これは単に標準偏差を平均値で割ったもの。 先ほど、感覚的にバラつきの大小を思い浮かべたときは、暗にこの値を比較していたはず。

変動係数の定義としては、こう

C.V. = \frac{\sigma}{\mu}

\sigma は母集団の標準偏差で、\mu は母集団の平均値を表している。

あるいは、対象が標本であれば標準偏差を s で、平均値を \bar{x} で表す。

C.V. = \frac{s}{\bar{x}}

統計の世界では、記号を使い分けることでその意味を伝える。 母集団が、鍋の中に入っているたくさんのスープだとしよう。 標本は、そのスープを味見するためにスプーンですくった一杯を表している。

変動係数で比べてみる

さて、話を変動係数に戻そう。 変動係数の定義通りに、標準偏差を平均値で割ると結果はどうなるだろうか。 これは、無名数といって単位がなくなる。 異なる単位のものを比べるには、この操作が必要になる。

先ほどのカブトムシとクジラの例で計算してみよう。 カブトムシは平均 10 cm で標準偏差が 1 cm だとすると変動係数は 1 / 10 = 0.1 になる。 クジラは平均 20m で標準偏差が 1 m なので変動係数は 1 / 20 = 0.05 だ。 変動係数は値が大きい方がバラつきが大きいことを表している。 感覚的にカブトムシの方がバラつきが大きそうだということを、数値の上でも確かめることができた。

最初に紹介したヒストグラムは?

最初に紹介したヒストグラムの母数 (パラメータ) は、実は次のようになっていた

    • 平均値: 66
    • 標準偏差: 20
    • 度数: 370000
    • 平均値: 122
    • 標準偏差: 41
    • 度数: 520000

ただし、変動係数の定義からすると度数は必要ない。

両方の変動係数を計算すると、まず青は次のようになる

C.V. = \frac{\sigma}{\mu} = \frac{20}{66} \fallingdotseq 0.303

続いて緑

C.V. = \frac{\sigma}{\mu} = \frac{41}{122} \fallingdotseq 0.336

青と緑を比較すると、緑の方が大きい

0.303 \lt 0.336

ということで、緑の方がバラついていることが分かった。

まとめ

異なる平均値や単位をもったデータセットのバラつきを比べるときには変動係数を使おう。

おまけ (その一)

最初のヒストグラムを書くのに使った Python のプログラムは次の通り。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import numpy as np

from matplotlib import pyplot as plt


def main():
    x1 = np.random.normal(66, 20, 370000)
    x2 = np.random.normal(122, 41, 520000)

    plt.hist(x1, 100, alpha=0.5)
    plt.hist(x2, 100, alpha=0.5)

    plt.grid()
    plt.show()


if __name__ == '__main__':
    main()

実行には matplotlib が必要なので pip でインストールする。

$ pip install matplotlib

使った環境は次の通り。

$ sw_vers
ProductName:    Mac OS X
ProductVersion: 10.11.6
BuildVersion:   15G31
$ python --version
Python 3.5.2

おまけ (その二)

ヒストグラムを生成するのに使った母数 (パラメータ) は大学入試センターの資料を使った。 具体的には、青が数学I/数学Aを、緑が英語の内容を、キリの良い数字で使っている。

www.dnc.ac.jp

ただし、実際のデータには最高値があるが、今回のヒストグラムにはない。