PsychoPyでブロックランダマイズ - 井関龍太のページ

ホーム   編集 凍結 差分 バックアップ 添付 コピー 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS

PsychoPyでブロックランダマイズ

Last-modified: 2017年05月02日 (火) 20:36:04 (567d)
Top > PsychoPyでブロックランダマイズ

ブロックごとに条件を変えて,ブロック順はランダムにしたい

いくつかの条件がある実験を実施するとき,ブロックごとに条件を変えたいことがあります。
たとえば,ブロックAでは刺激の提示時間を500 ms,ブロックBでは1,000 msにしたいなどです。
しかし,いつもブロックAを先に実施したのでは順序効果を防ぐことができません。
そこで,ブロック内での条件は一定にしながらも,ブロックの順序はランダムにするという操作をすることが考えられます。
このようなやり方をブロックランダマイズと呼ぶことがあります。

ここでは,条件ファイルを利用することによってPsychoPyで簡単にブロックランダマイズを行う方法について解説します。

サンプルの概要

最初に,サンプルのファイルをダウンロードしてください。
下のアイコンを右クリックして「対象をファイルに保存」を選んでください。
または,保存のポップアップから「ファイルを保存する」を選んでください。
プログラムはPsychoPy v.1.83.04で作成しています。

fileBlockRandom.zip

ダウンロード対象はzipフォルダになっていますので,右クリックして「すべて展開」を選び,圧縮フォルダを展開してください。
PsychoPyで作成した実験ファイル(BlockRandom.psyexp)のほかに,4つのExcelファイルが入っています。
これらは実験ファイルとリンクさせて使用する条件設定用のファイルです。
条件ファイルは実験ファイルと同じディレクトリ(同じフォルダ)に配置してください。

サンプルの内容は,注視点が500 ms提示された後に,単語か,単語にならない文字の組み合わせが提示され,キー押し反応を待つというものになっています。

disp1.png

試行の流れそのものはごく単純ですが,Loopが二重になっているのに注意してください(trialsとblocks)。

このサンプルで提示する単語を指定しているのが,hiraganaletter.xlsx,katakanaletter.xlsx,chineseletter.xlsxの3つの条件ファイルです。
ファイル名からわかるように,それぞれ,ひらがな,カタカナ,漢字の刺激が含まれています。

disp2.png

$wordは,条件ファイルの中の“word”という列を参照せよという指定を表します。
条件ファイルからの読み込みを有効にするには,”文字列”の右側のリストボックスを”繰り返し毎に更新”に設定する必要があります。

今回は,提示される刺激がひらがな,カタカナ,漢字のブロックをランダムに提示することにしましょう。
通常,条件ファイルを使う場合には,Loopの繰り返し条件のボックスに条件ファイルのファイル名を入力します。
しかし,このサンプルのtrialsという名前のLoopを開いてみると,条件ファイルの指定部分を別の条件ファイルによって指定していることがわかります(「条件ファイルが見つかりません」と表示されますが,動作上は問題ありません)。

disp3.png

具体的には,blockconditions.xlsxというファイルの中のstimlistという列を参照するよう指定しています。
blockconditions.xlsxを実際に開いてみると,このファイルのstimlistという列には,hiraganaletter.xlsx,katakanaletter.xlsx,chineseletter.xlsxという3つの条件ファイルの名前が並んでいるのがわかるでしょう(.xlsxという拡張子まで指定する必要があります)。
そして,このblockconditions.xlsxというファイルは,外側のblocksという名前のLoopで参照しています。

disp4.png

このようにすることで,まず,外側のblocksのLoopで3つの他の条件ファイルのうちのどれを使うのかがランダムに決定されます。
その後,trialsのLoopに入り,最初に選ばれたファイルの内容が実行されます(たとえば,ひらがな刺激など)。
trialsのLoopがひと通り終了すると,次に選ばれたファイルの内容が実行されます(漢字刺激など)。
このようにして,blockconditions.xlsxで指定したファイルがすべて読み出されるまで実験が続きます。
実際にサンプルを動かして,実行のたびにブロックの順序が変わることを確かめてみてください。

カスタマイズの方針

このように,条件ファイルによって条件ファイルを指定することで,PsychoPyではBuilderだけでもかなり複雑な実験を作ることができます。
今回は,ブロックの順序もランダム,ブロック内での刺激の提示順序もランダムにしましたが,この構成を変更することもできます。
たとえば,3種類の文章A,B,Cを参加者ごとにランダムな順番で提示する実験を計画しているとしましょう。
それぞれの文章を構成する文は一文ずつに区切って,一文を一画面ずつ順に表示していくものとします。
すると,どの文章が出てくるかという順序はランダムになってほしいけれども,文章内の文の順序はランダムになってしまっては困ることに気がつきます(順序通りに提示されないとふつうに理解するのは難しくなります)。
このような場合,入れ子になっているLoopの種類をそれぞれ適切なものに変更し直せば期待通りの動作を実現できます。
具体的には,文章の種類を指定する上位のLoopは種類を“random”,文章の内容を指定する下位のLoopは種類を“sequential”にすれば,文章の順序はランダム,文章内での文の順序は固定順(ファイルで指定した順)にできます。

また,trialsのLoopの後に休憩のRoutineを入れて,ここまでをblocksのLoopに含めるようにすれば,ブロック終了ごとに休憩をするといったプログラムも作れます。
もちろん,テキスト刺激だけでなく,画像ファイルを指定したり提示時間を指定したりと,条件ファイルで指定できる内容であればあらゆる条件をブロックランダマイズできると思います。
うっかりすると複雑になりすぎてしまうので,最終的にどんな構成のプログラムを作りたいかをよく考えて,RoutineとLoopの構造を決めてください。

TrackBack(0) | 外部リンク元 | このエントリーをはてなブックマークに追加

添付ファイル: filedisp4.png 203件 [詳細]   filedisp3.png 192件 [詳細]   filedisp2.png 246件 [詳細]   filedisp1.png 231件 [詳細]   fileBlockRandom.zip 276件 [詳細]