LoginSignup
3
2

More than 5 years have passed since last update.

PythonでSPIデータを用いてt検定を行う方法

Last updated at Posted at 2018-07-17

この記事に書いてある内容は、私が所属する会社とは一切関係がありません。
また近くにコードレビューしてくれる方も、見せる人もいないのでFBなどくださるとありがたいです。

目的

社員を便宜的にハイパフォーマーとローパフォーマーに分類し、SPIの言語・非言語スコアや性格特性に有意な差があるかをPythonのscipy.stats.ttest_indを用いて調べました。

結論

ハイパフォーマーの定義によりますが、有意な差がある項目がいくつか現れました。以下のようなoutputが得られます。

Column Name: imagination, T Value=[1.46385011], P Value=[0.2394426]
Column Name: introvert, T Value=[-3.91918359], P Value=[0.02954136]
Column Name: nonverbal_score, T Value=[4.79319137], P Value=[0.01727471]
Column Name: verbal_score, T Value=[0.77459667], P Value=[0.49502535]

架空のデータセットですが、outputを見ると内向性と非言語スコアは有意な差がありそうです。

実施方法

環境

  • windows
    • 会社のpcなので詳しくは調べていません
  • Anaconda 5.2

ライブラリは以下をimportしておきます。

import numpy as np
import pandas as pd
from pandas import DataFrame, Series
import scipy.stats as stats

ダミーデータを用意する

まずは架空のデータセットを作り、ハイパフォーマー(hp)とローパフォーマー(lp)にデータフレームに分割します。

data = {
    'hp':              [0, 0, 0, 1, 1],
    'verbal_score':    [53, 54, 53, 53, 55],
    'nonverbal_score': [53, 54, 53, 60, 65],
    'imagination':     [50, 51, 51, 52, 51],
    'introvert':       [53, 50, 51, 45, 47]
}

spi_frame = DataFrame(data)

# dataframeを分割する
hp = spi_frame[spi_frame.hp == 1]
lp = spi_frame[spi_frame.hp == 0]

一列ごとにt検定を行う

ttest_result = stats.ttest_ind(hp.nonverbal_score, lp.nonverbal_score)
ttest_result

# output
Ttest_indResult(statistic=4.793191373636545, pvalue=0.017274707950747335)

全てのColumnで一度にt検定を行う

上記の方法でもt検定を行えますが、全ての結果を一列ずつt検定するのは疲れるのでfor文で一気に行います。そのコードが以下です。

for i in range(1, len(spi_frame.columns)):
    t, p = stats.ttest_ind(hp.iloc[:, [i]], lp.iloc[:, [i]])
    name = spi_frame.columns.values[i]
    print('Column Name: {}, T Value={}, P Value={}'.format(name, t, p))

# output
Column Name: imagination, T Value=[1.46385011], P Value=[0.2394426]
Column Name: introvert, T Value=[-3.91918359], P Value=[0.02954136]
Column Name: nonverbal_score, T Value=[4.79319137], P Value=[0.01727471]
Column Name: verbal_score, T Value=[0.77459667], P Value=[0.49502535]

補足

差が有意にある項目だけ知りたい場合は、if文を使ってp < 0.05とかにしておけば見やすくなります。

参考

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2