Python3(pandas, Scipy)で、平均、標準偏差、標準誤差、一標本t検定(両側)。stats.ttest_1samp()

Python3コード

#!/usr/bin/env python3


"""(docstring)
"""


# 使用したデータは『すぐできる生物統計』
#
# 統計学のテストで25人の学生の点数(単位はパーセント)がある。
# これらの点数について、平均値、標準偏差、標準誤差を算定。
# 学生の平均成績は58%と期待される。
# 一標本t検定を実行。
#
# 帰無仮説
# 平均点数が58%である。


# import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import scipy as sp
from scipy import stats


def main():
    """(docstring)
    """

    # matplotlib
    # macOSやOS Xで文字化けするなら。
    # font = {'family' : 'Osaka'}

    # 統計学テストの25人の学生の点数
    dat = {'点数': [58, 65, 62, 73, 70, 42, 56, 53, 59, 56, 60, 64, 63,
                    78, 90, 31, 65, 58, 59, 21, 49, 51, 58, 62, 56]}

    df = pd.DataFrame(dat)
    print(df)
    print('')

    # 平均、標準偏差、その他
    print(df.describe())
    print('')

    # 標準誤差
    print(df.sem())
    print('')

    # 一標本t検定 (第2引数は帰無仮説の値)。
    # scipy.stats.ttest_1samp()
    res = sp.stats.ttest_1samp(df.ix[:, '点数'], 58)
    print(res)
    print('')

    # p値だけ取得したい場合
    # _, で回避して、pvalueだけ代入する。
    # _, p_value = sp.stats.ttest_1samp(df.ix[:, '点数'], 58)

    # p値の少数を第3位まで丸める。
    p_value = round(res[1], 3)

    # 帰無仮説が棄却されるかどうか判定。
    if p_value < 0.05:
        print('{0} {1} {2}'.format('p値', p_value, '< 0.05'))
        print('平均点数が58%であるという帰無仮説は棄却される。')
    else:
        print('{0} {1} {2}'.format('p値', p_value, '> 0.05'))
        print('平均点数が58%であるという帰無仮説は棄却されない。')

if __name__ == '__main__':
    main()

出力

    点数
0   58
1   65
2   62
3   73
4   70
5   42
6   56
7   53
8   59
9   56
10  60
11  64
12  63
13  78
14  90
15  31
16  65
17  58
18  59
19  21
20  49
21  51
22  58
23  62
24  56

              点数
count  25.000000
mean   58.360000
std    13.704865
min    21.000000
25%    56.000000
50%    59.000000
75%    64.000000
max    90.000000

点数    2.740973
dtype: float64

Ttest_1sampResult(statistic=0.13134021812539395, pvalue=0.89660098629493934)

p値 0.897 > 0.05
平均点数が58%であるという帰無仮説は棄却されない。

参考文献

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

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