左側のコラムにある「+」の部分をクリックすることで,刺激画面のパーツを作成することが出来ます。例えば,各試行における「注視点」「刺激画面」「ブランク画面(ISI)」はこのコラムにパーツを追加することで作成していきます。また,「1つの試行としてグループ化する」,「試行を繰り返す」,「教示画面を作る」といった様々なことが,この「+」をクリックすることで行われます。
最後は,右側の大きな領域です。ここでは,「刺激をどこに呈示するか?」,「どのような色にするか?」,「何ms呈示するか?」,「反応キーをどうするか?」といった,各画面での設定を行うことができます。
それでは,まず「空白の画面」を作成してみましょう。
これで,「空白の画面を配置する」という作業が出来ました。「lab.js Builder」ではこのように画面を追加することによって実験を作成していきます。
では,このまま実行すると何が起こるのかを見てみましょう。「実験プログラムを実行する」には左上の青色の実行ボタンをクリックします。実行すると,新たに何も表示されていない空白のウィンドウが開き,そのまま停止すると思います。それでは,ウィンドウを閉じてください。
最初のステップはこれで終了です。
実験では,各試行は複数の画面で構成されています。一般的には,次の試行までのインターバル(ブランク画面:post_trial_gap)が含まれています。
刺激画面「stimulus」では,中央の記号が「<(left)」なら「f」キー,「>(right)」なら「j」キーを押すようにします。
ここまで入力を行い,左上の再生マークを押して実験プログラムを実行すると,「<<<<<」が呈示されます。「fキー(left)」か「jキー(right)」を押すと,ブランク画面が呈示されて実験プログラムが終了します。
ここまで「stimulus」,「post_trial_gap」の2つの画面を作成してきました。これらを1つにまとめた「シーケンス(Sequence)」を設定します。
Sequenceは「フォルダ」のようなものです。作成した3つの画面を「trial」の下に加えると1つの試行が完成します。 最終的には以下のようになっていれば完成です。少しわかりにくいですが少し右側にずれています。
「0. 空白画面を呈示する」から「2. 複数画面を作成する」までのサンプルコードです(右クリックして保存してください)。
それぞれの試行で呈示される刺激が変わるようにします。
「trial2」で呈示する刺激を「>>>>>」に変えてみましょう。
ここまで作成したプログラムを実行してみると2試行分が呈示されます。
上記の応用で4試行分を作成しましょう。「stimulus」の内容を以下のようにそれぞれ割り当てて作成してみてください。
以下のように4試行分が作成できます。
4試行分を作成すると,左側のコラムが縦に長くなり,視認性が悪くなってきました。そこで,各シーケンスを短縮表示してみましょう。
なお,展開する時には,格納の際と同様に「▼」ボタンを押して,「Expand」を選択します。
次は上記の4試行の順番をランダムにします。
これで「trial1」〜「trial4」までの順番をランダムにすることが出来ました。
「0. 空白画面を呈示する」から「3. 異なる刺激で複数試行実施する」までのサンプルコードです(右クリックして保存してください)。
一つ前のセクションで「Sequence」コンポーネントを用いて複数試行を作成する方法を説明しました。ただ,試行数が4試行程度であればよいですが,例えば100試行分を作成するとなると大変です。
これを回避する方法として「Loop」コンポーネントを設定してみましょう。
これで,複数の試行を加える前の状態に戻りました。
以下のコードを使用して先に進めていただいてもかまいません(右クリックして保存してから,lab.js Builderで開いてください)。
典型的な実験では,1試行で終わることは少なく,数十回,数百回と試行が繰り返されます。このような試行の繰り返しを作るのが「Loop」です。これは,次の章で説明する条件の設定とも密接に関わっています。では,「Loop」を作成していきましょう。
このタイトルは任意の名前で構いません。例えば,同じ課題を別のブロックに分けて実施する場合には,「Block 1」「Block 2」としても良いかもしれません。また,記憶課題のように学習フェイズとテストフェイズがある場合は「Presentation」と「Test」のように名前をつけても良いと思います。
ループを有効にするためには,先ほど作成したシーケンスをループの中に移動する必要があります。
名前は,「resp」と「stim」にしましょう。中央の矢印の向きは「resp」で指定し,それに対応する刺激を「stim」で描きます。
これで,ループ側の設定は終わりです。しかし,このまま実行しても呈示される刺激は変化しません。「stimulus」の画面で設定をする必要があります。
Loopではparametersという変数を設定することができます。各parameterにはそれぞれ値(value)を割り当てることができます。Loopコンポーネントは,その中に含まれる(ネストされている)コンポーネントを一定回数繰り返しますが,繰り返しごとにparametersに割り当てた各値を変更して実施されます。変更ルールはいくつか選べますが,デフォルトではすべての値をランダムな順で実施します。このように,Loopコンポーネントを利用することで,一部だけを変更した試行を繰り返すことができます。
実験で毎試行,色や文字を変えるためには「変数」を指定し,そこの中身を試行ごとに変える必要があります。変数とは「x」や「y」のようなものです。例えば,「x=2」とすれば,xの中身は2になりますが「x=4」とすれば,xの中身は4となります。「lab.js」では変数は「placeholders」と呼ばれています。
lab.jsでは「parameters.XXXX」という書き方の変数を使用します。今回の場合は「parameters.resp」が「反応」に関する変数で,中身(値)は「left」か「right」かのどちらかです。「parameters.stim」が文字に関する変数で,中身は「<<<<<」,「>>>>>」,「<<><<」,「>><>>」のどれかです。いずれも「Loop」で指定したパラメータがそのまま変数の中身になります。
では,変数の中身(値)を表示するように変更していきましょう。
${ parameters.stim }
実験プログラムを実行すると,表示される矢印「→→←→→」が試行ごとに変化します。
lab.js Builderではデフォルトの設定で,条件がランダムに呈示されるようになっています。Sampleの「In random order」の部分です。
「fixation」ディスプレイでは,キー入力はせず,「500ms」経過したら自動的に次の画面に切り替わるようにしたいと思います。
「0. 空白画面を呈示する」から「4. Loopを設定する」までのサンプルコードは以下です。
刺激の繰り返し数を「10回」にしましょう。
実験プログラムを保存するためには,左上のメニューの「フロッピー」のアイコン(左から2つ目のアイコン)をクリックします(詳しくはこちら)。
以下のようなダイアログが表示され,「.json」拡張子のファイルを保存することができます。
作成した実験ファイルをBuilderに読み込む場合には,「フロッピー」アイコンの横の「▼」をクリックし,メニューの中から「Open」をクリックします。ファイルを指定するダイアログが開くので,保存した「json」ファイルを指定してください。
以上で,フランカー課題の基本的な部分は完成です。
以下はここまでのサンプルコードです(右クリックして保存してください)。
これでフランカー課題は完成です。実際にデータを収集する場合にはインフォームドコンセントの取得,教示画面,終了画面などが必要になります。
以下のリンクをクリックすると「フランカー課題」のデモを体験できます。なお,フランカー課題に加えて,Tipsで紹介している教示画面と終了画面とフィードバックを追加してあります。
以下のファイルを右クリックでダウンロードしてください。このファイルをBuilderで読み込めば,完成した状態の実験プログラムを確認することが出来ます。
執筆者: 大杉尚之