統計量

統計量

更新日: 2021-03-31

平均 #

平均(mean, average)は、測定した数値の合計を、その数値の個数で割ったもの。

$$ \overline{x} =\frac{x_1+x_2+\cdots+x_N}{N} =\frac{1}{N} \sum^{N}{n=1} x{n} $$

と定義される。平均値を表す記号として$\overline{x}$や$\mu$がよく使用される。

Pythonではstatisticsライブラリを使用すると簡単に求めることができる。

1
2
3
4
import statistics

l = [10, 1, 3, 7, 1]
statistics.mean(l)
4.4

中央値 #

中央値(median)とはデータを小さい方から順に並べて中央に位置するデータを示します。もしデータ数が偶数であれば真ん中の平均値となる。

pythonでは下記のように求まる。

1
2
3
4
import statistics

l = [10, 1, 3, 7, 1]
statistics.median(l)
3

分散 #

分散(variance)は$\sigma^2$で表現され、

$$ \sigma^2= \frac{1}{N} \sum^N_{n=1} (x_n-\overline{x})^2 $$

と定義される。各データの値から、それらの平均$\overline{x}$を引き二乗した値の平均値となります。分散は名前の通り、平均値からの離れ具合を数値化したものである。平均値からの離れ具合であれば、平均値からの距離の平均とすれば良いのであるが計算を簡単にするために二乗しているとイメージすれば良い。

分散にはもう一つ定義されています。それが

$$ \sigma^2= \frac{1}{N-1} \sum^N_{n=1} (x_n-\overline{x})^2 $$

となります。見てわかるように初めの定義式の$\frac{1}{N}$が$\frac{1}{N-1}$に変わっています。前者を標本分散(sample variance)といい、後者を不偏分散(unbiased variance)という。

標本分散を求めるpythonプログラム

1
2
3
4
import statistics

l = [10, 1, 3, 7, 1]
statistics.pvariance(l)
12.64

不偏分散を求めます。

1
statistics.variance(l)
15.8

標準偏差 #

標準偏差は分散$\sigma^2$の平方根$\sigma$と定義されます。分散の次元は元の標本の二乗になっていたので、平方根をとって元の次元としたものです。

標準偏差を求めるpythonプログラム

1
2
3
4
import statistics

l = [10, 1, 3, 7, 1]
statistics.pstdev(l)
3.5552777669262356
1
statistics.stdev(l)
3.9749213828703582

相関係数 #

相関係数(correlation coefficient)は2種類のデータの関連の度合いを測るための数値で、

$$ r = \frac{\sum_{n=1}^{N} (x_{n}-\bar{x})(y_{n}-\bar{y}) } {\sqrt{\left( \displaystyle \sum_{n=1}^N(x_{n}-\bar{x})^2 \right) \left( \displaystyle \sum_{n=1}^N(y_{n}-\bar{y})^2 \right) }} $$

と定義されます。相関係数は通常$r$で表され、常に$-1 \leqq r \leqq 1$となる。$r$の値が正の場合は正の相関があるといい、負のときは負の相関があるという。

$r$の絶対値が大きいほど相関を強いことを示すが、「いくつ以上であれば相関があると言える」と判断できる閾値は通常、ターゲット毎に異なるので一般化することは出来ない。無相関検定を実施することで相関の有無を判断する。

pythonでは色々なライブラリを使う方法があるが何通りか紹介する。

1
2
3
4
5
6
import numpy

a = [5, 73, 29, 63, 68, 28, 45, 78, 70, 93]
b = [11, 82, 25, 61, 66, 27, 42, 88, 71, 84]

numpy.corrcoef(a, b)
array([[1.        , 0.97575106],
       [0.97575106, 1.        ]])
1
2
3
4
5
6
7
8
import numpy
import pandas as pd
a = [5, 73, 29, 63, 68, 28, 45, 78, 70, 93]
b = [11, 82, 25, 61, 66, 27, 42, 88, 71, 84]
c = [52, 73, 43, 11, 85, 91, 24, 57, 78, 96]

df = pd.DataFrame([a,b,c]).T
df.corr()

0 1 2
0 1.000000 0.975751 0.296301
1 0.975751 1.000000 0.283135
2 0.296301 0.283135 1.000000
1
2
import seaborn as sns
sns.heatmap(df.corr())
<AxesSubplot:>

svg

comments powered by Disqus