Python 3 で数学を。

Python 3 とライブラリで数学の問題を解いていきます。統計学や機械学習はときどき。

対応のある (対の) 2標本t検定 (両側) (Python 3, Pandas: describe(), mean(), sem(), SciPy: stats, ttest_rel(), mean(), sem())

以前、自分の他ブログで書いたものを加筆・修正して再掲。

使用するライブラリ

Pandas

SciPy

Python 3 コード

t_test_two_related1.py

#!/usr/bin/env python3


"""(docstring)
"""


# 使用したデータは『すぐできる生物統計』
#
# 対応のある (対の) 2 標本 t 検定 (両側):
# 概要:
# 9 つの池の pH について、夜明けと夕暮れに測定された 2 系列の測定結果
#
# 帰無仮説:
# pH 濃度の差の平均値が 0 である。
# つまり、池は夜明けと夕暮れで同じ濃度 pH をもつ。
#


import pandas as pd
import scipy as sp
from scipy.stats import ttest_rel, sem


def t_test_two_related1():
    """(docstring)
    """

    dat = {'夜明けpH': [4.84, 5.26, 5.03, 5.67, 5.15, 5.54, 6.01, 5.32, 5.44],
           '夕暮れpH': [4.91, 5.62, 5.19, 5.89, 5.44, 5.49, 6.12, 5.61, 5.70]}

    df = pd.DataFrame(dat)
    print(df)
    print('')
    print('要約統計量:')
    print(df.describe())
    print('')

    print('差(夕暮れpH - 夜明けpH):')
    diff = df.ix[:, '夕暮れpH'] - df.ix[:, '夜明けpH']
    print(diff)
    print('')
    # t 値の手計算
    print('t = 差の平均値 / 差の標準誤差:')
    print('pandas:')
    print(diff.mean() / diff.sem())
    print('')
    print('scipy:')
    print(sp.mean(diff) / sem(diff))
    print('')

    res = ttest_rel(df.ix[:, '夜明けpH'], df.ix[:, '夕暮れpH'])
    print(res)
    print('')
    # t 値は |t| (絶対値)
    # だから、以下、abs()を使用。

    t_statistic, p_value = res
    print('t 値: ', abs(round(t_statistic, 3)))
    print('p 値: ', round(p_value, 3))
    print('')

    if p_value < 0.05:
        print('p 値: {} < 0.05'.format(round(p_value, 3)))
        print('帰無仮説は棄却される。')
    else:
        print('p 値: {} > 0.05'.format(round(p_value, 3)))
        print('帰無仮説を棄却する証拠はない。')


if __name__ == '__main__':
    t_test_two_related1()

出力

$ python3 t_test_two_related1.py
   夕暮れpH  夜明けpH
0   4.91   4.84
1   5.62   5.26
2   5.19   5.03
3   5.89   5.67
4   5.44   5.15
5   5.49   5.54
6   6.12   6.01
7   5.61   5.32
8   5.70   5.44

要約統計量:
          夕暮れpH     夜明けpH
count  9.000000  9.000000
mean   5.552222  5.362222
std    0.358182  0.352199
min    4.910000  4.840000
25%    5.440000  5.150000
50%    5.610000  5.320000
75%    5.700000  5.540000
max    6.120000  6.010000

差(夕暮れpH - 夜明けpH):
0    0.07
1    0.36
2    0.16
3    0.22
4    0.29
5   -0.05
6    0.11
7    0.29
8    0.26
dtype: float64

t = 差の平均値 / 差の標準誤差:
pandas:
4.4042042329316615

scipy:
4.4042042329316615

Ttest_relResult(statistic=-4.404204232931662, pvalue=0.002273942233835687)

t 値:  4.404
p 値:  0.002

p 値: 0.002 < 0.05
帰無仮説は棄却される。

参考文献 (データ等を参考)

パソコンで簡単!すぐできる生物統計―統計学の考え方から統計ソフトSPSSの使い方まで

パソコンで簡単!すぐできる生物統計―統計学の考え方から統計ソフトSPSSの使い方まで