いっかくのデータサイエンティストをいく

1からプログラミングとデータサイエンスを独習したい

【統計学】等分散の検定(RとPython)

教科書有斐閣統計学」P60のJリーグの表をもとに、同書P327の分散の検定を行います。 単純に2群の分散が同じかどうか確かめる検定です。平均の検定でも帰無仮説を棄却できず、分散の検定でも帰無仮説を棄却できない場合は同じ分布の可能性があります。

Rで実装

こちらは等分散の検定です。

#勝数
wins  <- c(22, 20, 20, 18, 17, 18, 13, 13, 13, 13, 13, 13, 13, 12, 12, 5, 6, 4)
#得点
score <- c(67, 84, 80, 60, 68, 62, 51, 47, 49, 50, 57, 43, 56, 46, 42, 32, 44, 38)

#基本統計量の確認
summary(wins)
#Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
#4.00   12.25   13.00   13.61   17.75   22.00 
summary(score)
#Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
#32.00   44.50   50.50   54.22   61.50   84.00 

#等分散の検定
var.test (wins, score)

結果 f:id:imakoto0323:20180620145808p:plain

Pythonで実装

こちらは分散比の検定です。2つの分散を比にしただけで同じものです。

import pandas as pd
import numpy as np
from scipy import stats

df = pd.DataFrame({ 
                   'score':[67, 84, 80, 60, 68, 62, 51, 47, 49, 50, 57, 43, 56, 46, 42, 32, 44, 38],
                   'wins':[22, 20, 20, 18, 17, 18, 13, 13, 13, 13, 13, 13, 13, 12, 12, 5, 6, 4]
                   })
#検定統計量
F = np.var(df['wins']) / np.var(df['score'])
print(F)
#0.13076279692204754

#自由度
df1 = len(df['wins'])-1
df2 = len(df['score'])-1

alpha = 0.05 #有意水準
p_value = stats.f.cdf(F, df1, df2)
print(p_value)
#6.013715874740121e-05

#帰無仮説を棄却できるか
p_value < alpha
#Out[15]: True

結果

P値も0.05を下回るので帰無仮説を棄却できる。 つまり勝点と得点の分散は等しくない。