0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

t検定の結果がNaNの対処法

Last updated at Posted at 2023-04-13

概要

ライブラリ等で、検定を行った際の出力結果がNaNやnanと表示される時の対処法について説明します

例えば、以下のコードのようなウェルチのt検定(平均値の差の検定)を実行したとします

# 検定したい列
column = "column1" 

# グループ1とグループ2の標本データ
group1 = df1[column]
group2 = df2[column]

# ウェルチの検定を行う 等分散でない(equal_var = False), 
t, p = ttest_ind(group1, group2, equal_var=False)

# t値とp値を表示する
print("t値: ", t)
print("p値: ", p)

出力結果

t値:  nan
p値:  nan

すると、出力結果がnanと表示され、どうやらおかしいです
t値やp値は数値で表されるべき値です
今回はこれの対処法を解説します

対処法

この原因は、入力値の中にnanが含まれていることです
これが最も起こりやすく多い原因です

その場合は、先ほどのコードをこのように書き換えます

 `変更前`
# グループ1とグループ2の標本データ
group1 = df1[column]
group2 = df2[column]

`変更後`
# グループ1とグループ2の標本データ
group1 = df1[column].dropna()
group2 = df2[column].dropna()

こうすることによって、事前にnanの含まれる部分が除外され、出力結果が正しくなります

結論

  • nanが入っていると検定はできない
    • 対処法
      • 入力データからnanを取り除く(データフレームなら.dropna()をつける)

余談

ttest_indにはnan_policyというパラメータがあり、nanがあった場合の対応を指定できる

  • nan_policy = 'propagate'(デフォルト)
    • nanを返す
  • nan_policy = 'raise'
    • エラーを返す
  • nan_policy = 'omit'
    • nanを無視して計算する
    • しかし、一部使えない検定があるため注意が必要

余談は以下のサイトを参考にしました

0
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
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?