Rで一元配置分散分析(対応あり)

Rで繰り返しありの分散分析を行う方法。備忘録

======================================================
参加者  プリテスト  ポストテスト1  ポストテスト2
======================================================
参加者1    80     70          60
参加者2    30     40          50
参加者3    45     60           73
参加者4    77      89         20
参加者5    60     55          43

======================================================

仮にエクセルで上記のようなデータを作成したとします。エクセルでデータを整理した後にどのようにRで処理をしていくかをまとめます。

① エクセルのデータをcsv形式で保存(仮にdata.csvとします)(注意1参照)
② Rの作業ディレクトリに①を保存(注意2参照)
③ Rを開く

Rを開いた後は以下の手順でANOVAを実行します。

① csvデータをRに読み込む
② 各項目(プリテスト, ポストテスト1, ポストテスト2)のデータを取り出す。
③ 参加者のデータを取り出す
④ テスト結果をまとめる
⑤ 参加者データをまとめる
⑥ ANOVAを実行
⑦ 必要があれば多重比較を行う

では打ち込んでいきましょう。

#①文字列「データ」にcsvデータを読み込む

データ<-read.csv(“data.csv”,header=TRUE)

#[確認]データと打ち込むと以下のような出力が得られるはずです。

>データ

参加者  プリテスト  ポストテスト1  ポストテスト2

参加者1    80     70          60
参加者2    30     40          50
参加者3    45     60           73
参加者4    77      89         20
参加者5    60     55          43

#②文字列「プリテスト」にcsv上のプリテストのデータを読み込む

プリテスト<-データ$プリテスト

#②文字列「ポストテスト1」にcsv上のポストテスト1のデータを読み込む

ポストテスト1<-データ$ポストテスト1

#②文字列「ポストテスト2」にcsv上のポストテスト2のデータを読み込む

ポストテスト2<-データ$ポストテスト2

#③文字列「参加者」にcsv上の参加者を読み込む

参加者<-データ$参加者

#②と③が終わったらデータが入っているか確認してみましょう。

#④テストデータを一つにまとめます。

テストデータ<-c(プリテスト,ポストテスト1,ポストテスト2)
種類<-factor(c(rep(“プリテスト”,5),rep(“ポストテスト1″,5),rep(“ポストテスト2″,5)))

#⑤参加者データをまとめます。

参加者データ<-factor(rep(参加者,3))

#rep(“プリテスト”,5)の5はプリテストのデータの数が5個ありますから、5になります(参加者1〜参加者5までのデータの個数ですから、5になりますね)。100個あれば100になります。また、参加者データの中のrep(参加者,3)の3は項目数を指すと思ってもらって多分差し支えないです。項目は「プリテスト」「ポストテスト1」「ポストテスト2」の3つがありますから、3になります。これに仮に「ポストテスト3」が加わればrep(参加者,4)になります。

#⑥繰り返しありのANOVAを実行

summary(aov(テストデータ~種類+参加者データ))

#以下のような結果が返されます。

Df  Sum Sq  Mean Sq   F value   Pr(>F)

種類      2  481.6   240.80    0.6055   0.5690
参加者データ  4  1521.1     380.27    0.9561   0.4806
Residuals      8  3181.7    397.72

#⑦有意差が見られた場合、多重比較を実行します。仮にt-test with bonferroniを実行するときは

pairwise.t.test(テストデータ,種類,p.adjust.method=”bonferroni”,paired=TRUE)

でデータが得られます。(このデータでは有意差は見られないのでt検定は行いません)

注意①
Rでは、参加者の中に同じ参加者がいると同じ被験者とみなしてしまう傾向があるようです。以下の表を見てください。

======================================================
参加者  プリテスト  ポストテスト1  ポストテスト2
======================================================
太郎   80     70          60
次郎    30     40          50
花子    45     60           73
太郎   77      89         20
一郎   60     55          43

======================================================

仮に一人目の太郎さんと四人目の太郎さんは違う人だと仮定します。被験者数は5になりますね。しかし、上の⑤の参加者をまとめる段階でそのまま上の手順でデータをまとめてしまうと、一人目の太郎さんと四人目の太郎さんを同じ太郎さんと認識してしまい、被験者数が4と認識されてしまいます。

このような間違いを防ぐためには、あらかじめ被験者の名前を変更しておく必要があります。無難な方法は

======================================================
参加者  プリテスト  ポストテスト1  ポストテスト2
======================================================
参加者1    80     70          60
参加者2    30     40          50
参加者3    45     60           73
参加者4    77      89         20
参加者5    60     55          43

======================================================

のように、参加者1、参加者2….としておくとデータの重複は起こらないので大丈夫だと思います。

注意②
Macのエクセルでcsvデータを使用した場合、そのままRに読み込むと、

<94>팱<8e><31>に不正なマルチバイト文字があります

のようなエラーが返されます。そのため、こちらにあるような手法でcsvデータのエンコードを修正する必要があります。

上記の方法はANOVAを行う一つの手順に過ぎません。他にもRを使って様々な方法で分散分析を行うことができると思います。また、以上の内容は、以下の参考文献を参考にしましたが、手順の正当性、正確性については責任を持てませんので、自己責任で使用をお願いします。「こんな手順で分散分析ができるのか」くらいの参考程度にとどめておいてください。

参考文献

山田剛史・杉澤武俊・村井潤一郎(2008)『Rによるやさしい統計学』東京:オーム社

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">


Fatal error: Call to undefined function the_post_navigation() in /home/takuro-fujita/www/wp/wp-content/themes/sparkling/single.php on line 24