Up

統計量

 

平均値、分散などの1変量統計量、中央値、四分位数などの順序統計量、相関係数、共分散などの2変量統計量を求めるPythonスクリプト例を以下のように用意した。

PythonスクリプトをJupyter Notebook用にまとめたものを圧縮ファイルStats.zipとした。ダウンロード・解凍して自由に利用されたい。

 

1変量統計量

 

日本気象協会のウェブサイトで横浜市の10日間最高気温予測を調べると、表A.1のようであった。

 

A.1 横浜市の10日間最高気温予測より(日本気象協会ウェブサイト:2019.10.28

1029

30

31

111

2

3

4

5

6

7

温度

16

23

22

24

22

20

18

19

20

19

 

平均値、分散、標準偏差を求めるスクリプトを次のように作成した。

import numpy as np

 

data = [16, 23, 22, 24, 22, 20, 18, 19, 20, 19]

 

m = np.mean(data)

v = np.var(data)

sd = np.std(data)

print('平均値   = ', m)

print('分散     = ', v)

print('標準偏差 = ', sd)

 

実行すると、以下の出力を得る。

平均値   =  20.3

分散     =  5.41

標準偏差 =  2.3259406699226015

 

 

順序統計量

 

上の表A.1のデータの中央値、四分位数、最小値、最大値を得るスクリプトを、次のように作成した。

import numpy as np

 

data = [16, 23, 22, 24, 22, 20, 18, 19, 20, 19]

 

v_min = np.amin(data)

q1 = np.percentile(data, 25)

med = np.median(data)

q3 = np.percentile(data, 75)

v_max = np.amax(data)

print('順序統計量 = ', np.sort(data))

print('最小値       = ', v_min)

print('第1四分位数 = ', q1)

print('中央値       = ', med)

print('第3四分位数 = ', q3)

print('最大値       = ', v_max)

 

上のスクリプトを実行すると、以下の出力を得る。

順序統計量 =  [16 18 19 19 20 20 22 22 23 24]

最小値       =  16

第1四分位数 =  19.0

中央値       =  20.0

第3四分位数 =  22.0

最大値       =  24

 

まず、並べ換えられたものが順序統計量として出力され、その後、最小値、第1四分位数、中央値、第3四分位数、最大値が出力されている。

 

2変量統計量

 

2教科、Sub. ASub. B、のスコアが表F.1のようであるとする。

F.1 2教科[Sub.A, Sub.B]のスコア

[79, 72]    [77, 70]    [74, 75]    [53, 44]    [76, 52]

[68, 60]    [96, 96]    [85, 71]    [74, 49]    [93, 80]

[54, 55]    [86, 70]    [89, 96]    [87, 87]    [81, 81]

[84, 85]    [78, 64]    [76, 53]    [54, 57]    [75, 60]

 

F.1の2教科のスコアの相関係数、共分散を求めるプログラムを、次のように用意した。

import numpy as np

 

data = [

        [79, 72], [77, 70], [74, 75], [53, 44], [76, 52],

        [68, 60], [96, 96], [85, 71], [74, 49], [93, 80],

        [54, 55], [86, 70], [89, 96], [87, 87], [81, 81],

        [84, 85], [78, 64], [76, 53], [54, 57], [75, 60]

        ]

 

A = []

B = []

for v in data:

    A.append(v[0])

    B.append(v[1])

 

r = np.corrcoef(A, B)

 

print(r)

print('相関係数 = ', r[0][1])

 

C = np.cov(A, B)

print(C)

print('推定共分散 = ', C[0][1])

n = len(data)

C1 = C * (n-1) / n

print('標本共分散 = ', C1[0][1])

 

リストABに対応する順番に値を設定して、相関行列を算出する関数を

r = np.corrcoef(A, B)

と呼び出している。この関数は、相関行列を返すので、相関係数は行列の成分r[0][1]の値として得られる。

共分散も同様であるが、次の関数呼び出し

C = np.cov(A, B)

では、共分散行列は分母を「データ数―1」で割ったもの、したがって分散は不偏分散が算出されるので、次のように

n = len(data)

C1 = C * (n-1) / n

標本数で調整すれば標本分散が得られる。

上のスクリプトを実行すると、以下の出力が得られる。

[[1.         0.77718556]

 [0.77718556 1.        ]]

相関係数 =  0.7771855633037875

[[148.15526316 144.78157895]

 [144.78157895 234.23947368]]

推定共分散 =  144.7815789473684

標本共分散 =  137.54249999999996

 

疑似相関

2変量の相関係数から変量の影響を単回帰モデルで除いた相関係数、すなわち偏相関係数は次式で与えられる。

ここで、の相関係数、の相関係数である。

偏相関係数を求めるスクリプトを次のように用意した。

Rxy = float(input('r_xy = '))

Rxz = float(input('r_xz = '))

Ryz = float(input('r_yz = '))

 

Rxy_z = (Rxy - Rxz * Ryz) / (((1 - Rxz**2) * (1 - Ryz**2)) ** 0.5)

 

print('\nr_xy.z = ', Rxy_z)

 

上のスクリプトを実行すると、相関係数の値を変数r_xyr_xzr_yzの値として入力が求められる。3つの相関係数を入力すると、偏相関係数の値がr_xy.zの値として出力される。実行例を以下に示す。

r_xy = 0.45

r_xz = 0.8

r_yz = 0.75

 

r_xy.z =  -0.3779644730092275

 

 

Up