inquisitで刺激セットのカウンターバランス

需要があるかわかりませんが,inquisitで参加者IDによって取ってくる刺激セットを変える方法です。 刺激セットが2つあって,参加者IDが奇数の場合はセット1,偶数の場合はセット2にする例です。 偶数か奇数かということは,参加者IDを2で割って,余りが1か0かで場合分けします。1であれば奇数,0であれば偶数ということですね。

まず,set1.txtとset2.txtとして読み込みたいinquisitのスクリプトをファイルとして保存し,メインのスクリプトと同じフォルダに入れておいてください。例えば,以下のような感じです。

set1.txt

セット1
<item studyItems>
/ 1 = "リンゴ"
/ 2 = "ミカン"
</item>

set2.txt

セット2
<item studyItems>
/ 1 = "トマト"
/ 2 = "レタス"
</item>

メインのスクリプトには以下のように記述をしておきます。mod(x, y)はxをyで割った時の余りを計算する関数です。script.subjectidはinquisitで参加者IDを表す表現です。

参加者番号が奇数:セット1
<include>
/ precondition = [mod(script.subjectid, 2) == 1]
/ file = "set1.txt"
</include>

参加者番号が偶数:セット2
<include>
/ precondition = [mod(script.subjectid, 2) == 0]
/ file = "set2.txt"
</include>

刺激セットが4つある場合は,mod(scripit.subjectid, 4)として4つの条件わけをすればOKです。

この方法を使えば,参加者IDによって一部だけ別のスクリプトを走らせられるので,刺激セットのカウンターバランス以外にも利用できるかと思います。

dplyrのfilterでいずれかの値に当てはまる行を抽出したい

前田先生によるデータハンドリング入門←を見ればOKですが,メモ代わりにまとめておきます。 dplyrのfilterを使うことである列で特定の条件に合致するものが含まれる「行」を抜き出すことができます。 dplyrを使う中で以下の事態を考えます。

「特定の値(具体的にはID)が複数あり,その値たちが含まれる行(いずれかの値に当てはまる行)を抽出したい」

より具体的には,実験データのうち,除外事項に当てはまる参加者のIDを特定しており,そのデータを取り除きたいという場合です。 例えば,N=10のデータで参加者番号が1〜10で割り当てられている中で,1, 2, 4, 6, 5, 10の参加者のデータを抽出したいという場合です。参照元を見ればわかりますが,文字列でも可能です。

データセットはsleepを使います。睡眠時間のデータでIDが個人番号として当てられています。

#sleepのデータセットを利用
dat <- sleep
#IDがいずれかの値に一致する行を抽出
dat <- dat %>% dplyr::filter((ID %in% c(1, 2, 4, 6, 5, 10)))

逆に,いずれかの値に一致する行を除外したい場合は以下です。

#sleepのデータセットを利用
dat <- sleep
#IDがいずれかの値に一致する行を抽出
dat <- dat %>% dplyr::filter((!ID %in% c(1, 2, 4, 6, 5, 10)))

なお,ここまで書いておいてなんですが,データ分析を行う場合には,当該IDを除外するかどうかの識別する列を作成し,そこに除外するかどうか(0 or 1)を指定しておく方が無難かもしれません。

Rで相関テーブル

Rで無相関検定を行った相関テーブル

Rで相関テーブルを作る場合には,corrplotパッケージが便利です。corrplotパッケージでは,相関の値を○や□の大きさで視覚的に表現したり,色(負の相関:青〜正の相関:赤)で表現したりすることができます。多数の相関関係を視覚的に把握するには便利ですが,やはり相関の値自体も表示したいし,なによりも無相関検定の結果も併せて見たいわけです。しかし,corrplotパッケージでは相関の値(r)と無相関検定結果(p値)を同時に出しにくいのが難点でした。

そこで,corrplotで(1)無相関検定の結果を表示しつつ,(2)色による相関の方向性を表現し,(3)相関の値を表示することを目指します。工夫としては,有意ではない相関には黒い×がデフォルトではつくのですが,そうすると値が見にくいので薄いグレーの×に変更している点です。

必要なパッケージは以下です。インストールした上で実行してください。

  • Hmisc
  • corrplot
#必要なパッケージを読み込む
library(Hmisc)
library(corrplot)

#データ読み込み(mtcarsを使用)
dat <- mtcars

#rcorrで相関分析(matrixで読み込む必要がある)
corrTable <- rcorr(as.matrix(dat))
#相関の値を格納
r_mat <- corrTable$r
#p-valueを格納
p_mat <- corrTable$P

#相関テーブルの色を指定
col <- colorRampPalette(c("#4477AA", "#77AADD", "#FFFFFF", "#EE9988", "#BB4444"))
#相関テーブルを作成(有意水準はsig.levelで設定)
corrplot (r_mat, method = "color", col = col(200), diag = FALSE, order = "alphabet", addCoef.col = "black", p.mat = p_mat, sig.level = 0.05, pch.col = "gray")

こんな感じの相関テーブルができます。この相関テーブルは有意水準5%にしてあるので,有意ではない相関(p > .05の相関)には薄いグレーの×がついています。ただし,相関は一種の効果量なので有意かどうかだけで判断しないように注意する必要があります。

f:id:cognition:20181025125054p:plain

参考元:Correlation tests, correlation matrix, and corresponding visualization methods in R