目次
相加平均
相加平均は、普段よく耳にする”平均”のことで算術平均とも言います。例えば、国語のテストで、生徒の点数の総和を取り、それを生徒の数で割ると平均が出ます。これを少し、かっこよく数学的な感じで式にまとめてみます。
標本
標本は、統計の対象となるデータの集まりから取り出した一部のデータのことです。国語のテストの例で言えば、生徒個人個人の点数が標本となります。
\(\displaystyle x = \{ {x_{1}}, {x_{1}}, \cdots , {x_{n}} \} \)
相加平均
相加平均は、標本の総和を標本数で除算することで求められます。
\(\displaystyle \mu = \frac{{x_{1}} + {x_{1}} + \cdots + {x_{n}}}{n} \)
上記の式は\(\displaystyle \sum\)で、綺麗にまとめることができる。\(\displaystyle \sum\)の部分は、\(\displaystyle {x} \)の\(\displaystyle {i} \)が\(\displaystyle {1} \)から\(\displaystyle {n} \)まであり、その総和を求めるということ。そこに、\(\displaystyle \frac{1}{n} \)を掛ける、つまり\(\displaystyle {n} \)で除算する。
\(\displaystyle \mu = \frac{1}{n} \sum_{i=1}^{n}x_i\)
Pythonで相加平均を求める
今回は、10人分の生徒の点数の相加平均を求めてみる。
# 標本 : 点数を配列に入れるだけ
x = [95, 56, 74, 80, 67, 66, 59, 89, 75, 48]
# 標本の数 : 配列の要素の数が標本の数
n = len(x)
# 相加平均
avg = 0
# 総和を算出 : for文で標本を展開しsumに足していく
for i in range(n):
avg += x[i]
# 相加平均 : 標本数で割って相加平均を算出
avg /= n
print(avg)
numpyを使うと1行で平均を求めることができる。
import numpy as np
# 標本
x = [95, 56, 74, 80, 67, 66, 59, 89, 75, 48]
avg = np.array(x).mean()
print(avg)
分散
分散は、データのばらつき具合を表す指標です。標本のそれぞれのデータと相加平均との差の2乗を取り、その平均を求める。相加平均から離れたデータが多ければ多いほど、分散の値は大きくなる。標本のそれぞれのデータと相加平均との差を2乗する理由は、差を取った時に値が負数になる可能性があり、これを含めて総和すると正数と負数で打ち消し合ってしまうため、ばらつき具合がわからなくなってしまうからです。
\(\displaystyle \sum\)の部分は、\(\displaystyle {x} \)の\(\displaystyle {i} \)が\(\displaystyle {1} \)から\(\displaystyle {n} \)まであり、括弧内のでは標本の値(\(\displaystyle x_i \))と相加平均(\(\displaystyle \mu \))との差の2乗を求め、その総和を求めている。そこに、\(\displaystyle \frac{1}{n} \)を掛ける、つまり\(\displaystyle {n} \)で除算する。
\(\displaystyle s^2 = \frac{1}{n} \sum_{i=1}^{n} (x_i – \mu)^2 \)
標準偏差
標準偏差は、データがどのくらい散らばっているかを表す指標です。一般的には、データの9割が標準偏差の約2倍の範囲に収まります。標準偏差は、分散の平方根を取った値です。
\(\displaystyle \sigma = \sqrt{ \frac{1}{n} \sum_{i=1}^{n} (x_i – \mu)^2} \)
Pythonで標準偏差を求める
相加平均を求めた時のデータの標準偏差を求める。
import numpy as np
# 標本
x = [95, 56, 74, 80, 67, 66, 59, 89, 75, 48]
# 相加平均
avg = np.array(x).mean()
# 分散
v = 0.0
# 標本数
n = len(x)
# 相加平均と標本の値の差を取り2乗し足していく
for i in range(n):
v += (x[i] -avg) ** 2
# 標本数で除算
v /= n
# 平方根を取る
s = np.sqrt(v)
print(s)
これもnumpyを使うと1行で標準偏差を求めることができる。
import numpy as np
# 標本
x = [95, 56, 74, 80, 67, 66, 59, 89, 75, 48]
# 標準偏差
s = np.std(x)
print(s)
因みにpandasでも標準偏差を求めることができる。ddof(Delta Degrees of Freedom : デルタ自由度)は、0とする。
import pandas as pd
# 標本
x = pd.DataFrame([95, 56, 74, 80, 67, 66, 59, 89, 75, 48])
# 標準偏差
s = x.std(ddof=0)
print(s)
標本標準偏差
標準標本偏差もデータのばらつきを表す指標だが、これまでと違うのは全てのデータを使わず、一部をサンプル(標本)として分析するということ。一般に、母集団から一部のデータだけを抽出すると、標準偏差は母集団より小さくなる。
\(\displaystyle {\sigma \geq s} \)
分数は分母が小さくなると数として大きくなる傾向がある。そのため、標準偏差のように標本数\(\displaystyle {n} \)で除算せず、\(\displaystyle {n – 1} \)を除算する。
標本平均
これまでは\(\displaystyle {\mu} \)で表していたが、母集団ではなく一部の標本であることを明示的に表現するために\(\displaystyle {\bar{x}} \)とする。
\(\displaystyle \bar{x} = \frac{1}{n} \sum_{i=1}^{n}x_i\)
標本標準偏差
これまでは\(\displaystyle {\sigma} \)で表していたが、標本標準偏差であることを明示的に表現するために\(\displaystyle {s^2} \)とする。標準偏差のように標本数\(\displaystyle {n} \)で除算せず、\(\displaystyle {n – 1} \)を除算する。
\(\displaystyle s^2 = \sqrt{ \frac{1}{n-1} \sum_{i=1}^{n} (x_i – \bar{x})^2} \)
Pythonで標本標準偏差を求める
相加平均を求めた時のデータの標本標準偏差を求める。
import numpy as np
# 標本
x = [95, 56, 74, 80, 67, 66, 59, 89, 75, 48]
# 相加平均
avg = np.array(x).mean()
# 分散
v = 0.0
# 標本数
n = len(x)
# 相加平均と標本の値の差を取り2乗し足していく
for i in range(n):
v += (x[i] -avg) ** 2
# 標本数で除算
v /= n - 1
# 平方根を取る
s = np.sqrt(v)
print(s)
numpyで標本標準偏差を求める際は、”ddof”を使う。”ddof”が0の場合は\(\displaystyle {n} \)となり、1の場合は\(\displaystyle {n-1} \)となる。また、母集団からランダムの一部のデータを抽出する。
import numpy as np
# 標本
x = [95, 56, 74, 80, 67, 66, 59, 89, 75, 48]
# 抽出する標本数
n = 8
# 標本データからnの数だけランダムに抽出する。
x2 = np.random.choice(x, n)
# 標本標準偏差
s = np.std(x, ddof=1)
print(s)
pandasの場合も、”ddof”を1とする。
import pandas as pd
# 標本
x = pd.DataFrame([95, 56, 74, 80, 67, 66, 59, 89, 75, 48])
# 標本
x = [95, 56, 74, 80, 67, 66, 59, 89, 75, 48]
# 抽出する標本数
n = 8
# 標本データからnの数だけランダムに抽出する。
x2 = np.random.choice(x, n)
# 標準偏差
s = x2.std(ddof=1)
print(s)
記事を読んでいただきありがとうございました。