第4章は統計を扱います。今回も「シロート統計学」のハルさんとコラボレーションすることとなりました。シロート統計学はEZRを使った統計分析をわかりやすく解説されています。第4章はシロート統計学で使われていたEZRをRで行うとどうなるのか?といった視点で進めていきます。今回使うデータもハルさんのサイトと同じものを使わせでいただく事になりました。それぞれ見比べることで参考にしてみてください!今回はFriedman(フリードマン)検定を紹介しますまずFriedman(フリードマン)検定についてはハルさんのサイトをご参照ください。1.準備〜4.データの読み込みまでは【4-1】Rでt検定を行う方法と全く同じ流れになります。1〜4まででわからない部分があれば確認してみてください。第4章は毎回ExcelデータをダウンロードしてRを使うのでプロジェクトで管理して行うことを勧めています。ここではR練習というプロジェクトを作り、Excelファイルを入れるためのdataフォルダを作っています。これを前提に次から進めていきます。次にRのコードを書くためのスクリプトファイルを作ります。3.データのダウンロード今回もハルさんのサイトのデータを使わせていただきます。デモデータ(Friedman検定)この章ではRを使ってダウンロードしています。リンクのアドレスをコピーdestfileは保存場所と保存のファイル名を指定します。実際のコードは以下になります。"の中)とdestfileのdata/以降を変更するだけでOKです。destfile)dataフォルダにダウンロードできたことを確認します。4.データの読み込みデータを読み込みます。今回は【4-0】第4章を進めていく上での準備で行った方法で進めます。Fileでデータを確認します。データが入っているセルを確認します。Datasetでデータを取り込みます。Sheet,Rangeを指定します。Name:ハルさんのサイトではgripでしたがgrip_friedmanとします(大文字・小文字は別物とされます)Sheet:このExcelは1つしかデータがないのでDefaultのままでOKRange:先ほど確認したB2:D32(実は今回のように表以外に余計なものがなければ空欄でもOK)Importボタンを押す前に右にあるコードをコピーしスクリプトファイルに貼り付けることも忘れずに行います。read_excel("data/demo-friedman-rank-sum-test.xlsx")View(grip_friedman)データが正しく入っていることを確認します。これでデータの取り込みは完成です。Friedman検定は繰り返しのデータ(被験者内要因)なのでデータを横につなげています。5.Friedman検定を行う(wideデータの場合)ハルさんのサイトでは早速Friedman検定を行っていますのでこちらも早速行います。今回はwideデータなのでまずwideデータの場合を紹介します。Friedman検定はfriedman.test関数を使います。friedman.test(cbind(繰り返しデータのある列))friedman.test(cbind(grip_friedman$W0,grip_friedman$W1,grip_friedman$W2))EZRと同じ結果が出ました。6.Friedman検定を行う(longデータの場合)次にlongデータでFriedman検定を行う方法も紹介します。○○)Friedman検定は対応のあるデータになります。今回は30人がW0,W1,W2の3回データを取っているので3*30=90データあります。そのため作るlongデータは上記のイメージになります。gripとしてますが自分がわかれば好きな名前を付けてOKです。W2の3つgrip:今回測定した握力のデータwideデータをlongデータに変えるにはgather関数、もしくはpivot_longer関数を使います。gather関数に関しては【2-5】Rでデータを集計するのに便利なlongデータとgather関数で紹介しています。データの扱いはtidyverseパッケージに含まれていますので。library関数でtidyverseパッケージを読み込みます。今回はgrip_friedman_longという名前にします。ポイントはもともとのExcelデータにidにあたる列がないことです。そこでrowid_to_column関数を使います。""の中身が列名になります。これで準備が整いました。longデータでFriedan検定を行う場合は改めてこうなります。grip_friedman_long)もちろん結果は同じです。7.多重比較を行うFriedman検定で多重比較を行いたいのですがwideデータだとEZR専用のパッケージでしかできません。そのためRで行うにはlongデータで行う必要があります。longデータで多重比較を行うにはpairwise.wilcox.test関数を使います。U検定を行いその結果を元にp値の調整を行います。FALSEを入れています。FALSE)EZRとほぼ同じ結果になりました。8.どうしてもwideデータのままなら手計算が必要wideデータのまま多重比較を行う方法がEZRのパッケージしかありません。そのためどうしてもwideデータのまま行うにはwilcox.test関数、もしくはcoinパッケージのwilcox_test関数を使い、1つずつ組み合わせを行い、BonferroniやHolm、Hochbergそれぞれの方法で自分でp値を直接計算することになります。この方法は統計ERさんの記事に詳しく紹介されています。Bonferroni、Holm、Hochbergって何をしてるの?という疑問も解決するかもしれません。仕組みがわかればp値に2とか3とかかけるだけなので意外と単純です。8.まとめ今回はFriedman検定を紹介しました。Rで行う場合はwideデータで分析するかlongで分析するかをあらかじめイメージしていた方がその後の解析もスムーズかもしれません。記事一覧はこちらになります。