python PR

【pythonで統計学】ウィルコクソン符号付き順位検定〜サンプルコード付き〜

python ウィルコクソン符号付き順位検定
記事内に商品プロモーションを含む場合があります

pythonの大きな特徴の一つとして、統計学を扱うことができる、というものがあります

pythonを学び始めた方の中にも、

「ビッグデータの統計を出来るようになりたい」

「pythonを統計ソフトとして扱いたい」

と思っている方もいるのではないでしょうか?

しかし、ネット上にはarray型にしたデータを用意して統計を…

という情報が多く、csvやExcelファイルから読み込んで、pythonで統計処理を行う方法については記載されていません

そこで、この記事ではcsvファイルから読み込んだ任意の列を統計にかける方法について、解説していきたいと思います

今回、pythonで統計をかけるのは「ウィルコクソン符号付き順位検定」と呼ばれるものです

実際のサンプルコードをもとに解説をしていきます

pythonで統計学を学ぶ流れは以下の記事を参考にしてください

python 統計学
pythonで統計学を学ぶメリット〜実際の学習手順を紹介〜近年、データサイエンティストの需要が高まってきていますが、データサイエンティスト必須能力として、「プログラミング言語」「統計学」が挙げられています。pythonで統計学を扱えれば、データサイエンティストとしての道も開けるでしょう。今回はpythonで統計学を学ぶメリットや実際にどのように学習していくべきかを解説していきたいと思います。...

ウィルコクソン符号付き順位検定とは

ウィルコクソン符号付き順位検定はノンパラメトリック検定の一種で、2つのデータに対応がある場合に用います

ノンパラメトリック検定で2つのデータに対応がない場合には、「マンホイットニーのU検定(ウィルコクソンの順位和検定)」を用います

python マンホイットニーのU検定
【pythonで統計学】マンホイットニーのU検定を実施する~サンプルコード多め~pythonを学び始めた方の中には統計ソフトとしての使い方もできるから、という方もいるのではないでしょうか? 実際に私はその一人ですが、pythonを使った統計学のサンプルコードを置いているサイトって少ない気がするんですよね なので、今回はexcelやcsvから読み込んだデータをどのようにマンホイットニーのU検定にかけるかの説明をしていきたいと思います。サンプルコードは多めです...

ウィルコクソン符号付き順位検定では、得られたデータを順位化して、統計的推定をおこないます

ウィルコクソン符号付き順位検定の仮説は以下のようになっています

  • 帰無仮説H0:「母代表値に差はない」
  • 対立仮説H1:「母代表値に差がある」

検定統計量が定めた有意水準以下の場合には、帰無仮説が棄却されることになります

ウィルコクソン符号付き順位検定は「前」「後」の比較

ウィルコクソン符号付き順位検定は、対応のある2つのデータを比較する場合に用います
では、対応のあるデータとはどういったものでしょうか?

例えば、高血圧で服薬しているAさんがいた場合に、

服薬し始めるx月y日と服薬開始2週間後のx月y+2週日で、血圧を比較したい場合や、

ダイエット開始日と1ヶ月後の体重を比較したい場合など、

同一人物から2回以上データを測定した場合に、対応のある検定手法を用います

ウィルコクソン符号付き順位検定をかける手順

ウィルコクソン符号付き順位検定をかける手順として、

  • 2群は対応している
  • 正規性がない

というのが前提になります

正規性の検定については、以下の記事で詳しく解説していますので、参考にしてみてください

python 正規性の検定
【pythonで統計学】正規性の検定(シャピロウィルク検定etc)のかけ方~サンプルコード付き~t検定などの統計手法をかける場合には、まずそのデータが正規分布しているかを調べなくてはいけません。正規性を確認する方法の一つに、ヒストグラムを書いて目視で確認する、という方法がありますが、これだけでは正確ではありません。 そこで、「Q-Qプロット」や「シャピロウィルク検定」「コルモゴロフスミルノフ検定」などを使用して、正規性を確認していきます。 実際に統計をかける場合には、csvやexcelデータなどを読み込んで、統計にかけることが多いと思います。そこで今回は、pythonを使ってcsvから取り込んだデータで正規性の検定を行う方法について、解説していきたいと思います。...

pythonでウィルコクソン符号付き順位検定をかけてみる

pythonでウィルコクソン符号付き順位検定をかける場合には、scipyのstats.wilcoxonを使用します

scipy.stats.wilcoxon(x、 y = None、 zero_method = 'wilcox'、 correction = False、 alternative = 'two-sided'、 mode = 'auto')

上記のコードでウィルコクソン符号付き検定をかけることができます

私は以下のようにコードを書いています

from scipy import stats
stats.wilcoxon(A, B, alternative='two-sided')

このような表記でもウィルコクソン符号付き順位検定をかけることができます
「alternative」は両側検定か片側検定かです

alternative=’two-sided’で両側検定、

alternative=’greater’もしくは’less’で片側検定になります

ウィルコクソン符号付き検定のxとyについて

ウィルコクソンの符号付き検定は対応のある2つのデータを比較する検定手法のため、
x,yの値は入力する必要があります

しかし、yの値を指定しない場合には、xの値にxとyの値の差を入力する必要があります

コードにすればすぐかもしれませんが、余計な作業を増やす必要はないので、x,yの値を入力すればOKです

csvから取り込んだデータを2群に分ける

ではcsvから読み込んだデータを2群に分けていきます

import pandas as pd 
import os 
import csv
from scipy import stats

def MannWhitneyUtest():
    type = [("all file","*")]    # 読み取るファイルをcsvに絞り込む。
    file_path_stastics = filedialog.askopenfilename(filetypes = type, initialdir = os.getcwd ())  
    stasticsdata = pd.read_csv(file_path_stastics, engine="python",index_col=None)

    print(stasticsdata)
    A_list=stasticsdata.iloc[:,2]
    A=list(A_list)
    B_list=stasticsdata.iloc[:,3]
    B=list(B_list)
    
    result=stats.wilcoxon(A, B, alternative='two-sided')
IDGroupA_Group_Sitting heightB_Group_Sitting height
No.1A6868
No.2A7272
No.3A8989
No.4A6868
No.5A7575
No.6A7777
No.7B7373
No.8B8183
No.9B7573
No.10B7775
No.11B7372
No.12B8380
No.13B6971

上記のようなcsvデータが読み取ります

# 読み取るファイル形式を絞る(今回の場合は全てのファイル)    
type = [("all file","*")]    
#ファイル参照画面を開いて、ファイルを選択する
file_path_stastics = filedialog.askopenfilename(filetypes = type, initialdir = os.getcwd ())  
#選択したcsvファイルを読み込み、インデックスはNone(なし)とする
stasticsdata = pd.read_csv(file_path_stastics, engine="python",index_col=None)
#stasticsdataの中身を確認する
print(stasticsdata)

この状態で「stasticsdata」にcsvデータが読み込まれます

マンホイットニーのU検定用データ
今回のcsvのデータとは異なりますが、読み込めていると、上記のように表出されるはずです
これだとA群とB群の指定がまだできていないため、統計をかけたい値をA群・B群に指定していきます

#2列目をA群として読み込む
A_list=stasticsdata.iloc[:,2]
#読み込んだ2列目をリスト形式にする
A=list(A_list)
#3列目をB群として読み込む
B_list=stasticsdata.iloc[:,3]
#読み込んだ3列目をリスト形式にする
B=list(B_list)

#ウィルコクソン符号付き順位検定をかける(両側検定)
result=stats.wilcoxon(A, B, alternative='two-sided')

上記のコードで好きな列をA群・B群に指定することができます

pythonではcsv1列目のデータが「0」として表現されるので、0からのスタートになります

ilocを使えば列番号で指定して、取り出すことができます

>>>pandasで任意の列・行の値を取得する方法(…coming soon…)

IDGroupA_Group_Sitting heightB_Group_Sitting height
No.1A6868
No.2A7272
No.3A8989
No.4A6868
No.5A7575
No.6A7777
No.7B7373
No.8B8183
No.9B7573
No.10B7775
No.11B7372
No.12B8380
No.13B6971

python列の数え方
あとは実行すれば検定結果が表示されるはずです

私はGUIで作成しているので、検定結果をリストボックスに表示させています

listbox1.insert(tk.END,"p=%.5f" %(result.pvalue))

まとめ

今回はウィルコクソン符号付き順位検定について解説をしました

pythonを使えば簡単に統計をかけることができます

統計をかけること自体は簡単に行えますが、群の設定やcsvから取り込んだデータの処理などがややめんどくさいかもしれません

しかし、一度作ってしまえば、他の統計をかけるときも

stats.xxxxxx()

xのところだけを変えるのみで済むので、スムーズに作ることができると思います

さらにGUIにしてしまえば、自分だけではなく、pythonの入っていないパソコンでも使うことができます

ぜひ参考にしてみてください

私がpythonを学ぶのに参考にした書籍は以下です

スクールに通わずにpythonを学習するためには?

Python学習を進めていく上で、

「ひとまず何かしらの書籍に目を通したい」「webで調べても全くわからない」という状況が何度も何度でも出てくるかと思います。

そういう時に便利なのが、kindleとテラテイルです。

Kindleはご存知の通り、電子書籍です。

Kindleには多くのpython学習本が用意されており、無料で読むことができます。(たまに有料もあります)

ひとまずどういった書籍があるのか?もしものために、書籍に目を通しておこう

という場合には、kindleの利用がおすすめです。

kindleでpythonの書籍を無料で読んでみる

おすすめプログラミングスクール

DMMWEBCAMP
  • WEBCAMPはコスパ最強
  • WEBCAMPは初心者に優しい充実したサポート付き
  • 16週間プランを選択して、返金してもらおう
WEBCAMPの公式ページはこちら WEBCAMPの口コミ・評価はこちら
テックアカデミー  
  • テックアカデミーは費用対効果抜群
  • テックアカデミーのサポートは個人の能力に応じつつ、python初心者に優しい
  • まずは無料体験でテックアカデミーを知ってから受講を決める
テックアカデミーの公式ページはこちら テックアカデミーの口コミ・評価はこちら
キカガク
  • 多種多様なスキルコース
  • 初心者から専門家まで対象
  • 給付金利用で費用を抑えられる
キカガクの公式ページはこちら キカガクの口コミ・評価はこちら
Aidemy Premium
  • 完全オンラインで、時間や場所に縛られず学習したい
  • マンツーマン学習サポートにより実践に近い経験をしたい
  • 未経験から機械学習エンジニアになりたい
Aidemy Premiumの公式ページはこちら Aidemy Premiumの口コミ・評価はこちら
My Agile Privacy
This website uses technical and profiling cookies. Clicking on "Accept" authorises all profiling cookies. Clicking on "Refuse" or the X will refuse all profiling cookies. By clicking on "Customise" you can select which profiling cookies to activate.