OpenSesame videos
Python videos
Supported by Supported by

Cats, dogs, and capybaras (猫と犬とカピバラ)

概要

このチュートリアルでは、実験参加者が犬、猫、またはカピバラの画像を注視する単純なマルチ感覚統合タスク(multisensory integration task: この実験では視覚・聴覚間のクロスモーダル作用)を作成します。画像が提示している間、猫の鳴き声(meow)もしくは犬の鳴き声(bark)が再生されます。参加者は画面上のボタンをクリックすることによって、呈示されている画像が犬であるか猫であるか応答します。カピバラの画像が呈示されているときは、何も応答してはいけません: キャッチ試行(catch trial)

ここで2つの仮説が挙げられます:

  • 参加者は、犬の鳴き声が鳴ったときに犬を識別するのが速く、猫の鳴き声が再生されるときに猫の識別が早くなる。言い換えれば、多感覚の統合効果(multisensory congruency effect)が引き起こされる。
  • 参加者がカピバラの画像を見た場合には、犬の鳴き声が聞こえたときには犬を選択し、猫の鳴き声では猫を選択する可能性が高くなる。つまり、呈示される聴覚刺激によってFalse Alarmが偏る。

チュートリアル

ステップ 1: OpenSesameのダウンロードと起動

OpenSesameは、Windows、Linux、Mac OS、Android(Runtimeのみ)で使用できます。このチュートリアルはOpenSesame 3.2.X用に作られており、デフォルトであるPython 2.7ベースもしくは、Python 3.5ベースの両バージョンで使用することができます。OpenSesameのダウンロード:

最初にOpenSesameを起動すると実験テンプレートの選択、もしくは最近使用した実験ファイルを開くことができます(Figure 1)。

/pages/jp/img/capybara/start-up.png

Figure 1. OpenSesameの起動画面

Extended template (拡張テンプレート)では、試行ベースの実験を作成するのに適しています。しかしながら、今回のチュートリアルではゼロから実験を作成します。そのため、ここではもうすでに読み込まれている'default template (デフォルトテンプレート)'を使用します(Figure 2)。なので、読み込み時に開かれた'Get started!'タブと'Welcome!'タブを閉じておいてください。

/pages/jp/img/capybara/default-template.png

Figure 2. Overview area(概要エリア)に表示されている'Default template(デフォルトテンプレート)'の構造

補足1: 基礎

OpenSesameの実験はitemの組み合わせで成り立っています。 itemは視覚刺激の呈示( sketchpad item)、キー入力の記録( keyboard_response item)などのように、実験に必要な機能のブロックです。itemには自由につけられる名前と種類が存在します。例えば、keyboard_response itemが2つあり、それぞれt1_responset2_responseの名称であるとき、itemの種類とitemの名称を明確に区別するためにここでは、種類は this_style 、名称として this style と表記します。

実験に構造を与えるためには、 loopsequence という2つの itemが特に重要です。 loopsequence を組み合わせて実験を組み立てる方法を理解することが、おそらくOpenSesameを使って作業する上で最も難しい部分なので、まずはこれを克服しましょう。

loop はほとんどの場合、独立変数を定義する際に使用します。 loop では、各列が変数に対応する表を作成できます。各行は、各試行に対応しています。具体的に理解するため、以下の block_loop について考えてみましょう(このチュートリアルとは関係ありません):

/pages/jp/img/capybara/loop-table.png

Figure 3. ループテーブルで定義される変数の例 (この例はチュートリアルで作成した実験とは関係ありません)

この block_loop では trial_sequence が4回実行されます。 soa が 100 で target が 'F' の場合、 soa が 100 で target が 'H' の場合、 soa が 1000 で …。デフォルトでは実行される列の順番はランダムですが、順次実行を選択することもできます。

sequence 順次実行される一連のitemで構成されます。原型的な sequencetrial_sequence で1試行に対応します。例えば、一般的な trial_sequence には視覚刺激を提示する sketchpad、キー応答の記録を行う keyboard_response、そして変数をログファイルに格納する logger が使用されることが多いです。

/pages/jp/img/capybara/example-sequence.png

Figure 4. 1試行の流れとして使用される sequence の例 (この例はチュートリアルで作成した実験とは関係ありません)

また loopsequence を階層的に組み合わせることによって、試行用のブロック、練習用フェーズ、実験フェーズを作成することができます。例えば trial_sequenceblock_loop によって呼びだされ、これらは1試行のブロックに対応します。1階層上に上がると、 block_sequencepractice_loop によって呼び出され、これらは実験の練習フェーズに対応します。

ステップ 2: block_loop と trial_sequence を追加する

デフォルトのテンプレートには getting_started という名称の notepadwelcome という名称の sketchpad、そして experiment という名称の sequence があります。getting_startedwelcome は今回は必要ないので、取り除きましょう。削除するにはこれらの項目で右クリックをし、'Delete' を選択します。experiment は実験が開始した時に始めに呼び出されるitemであるため削除しないでください。

今回の実験は非常に単純な構造です。階層の最上部には block_loop という名称の loop があります。block_loop は独立変数を定義するitemです(詳しくは補足1をご覧ください)。loop を実験に追加するには、ツールバーから loop アイコンを 概要エリアにある experiment の上までドラッグしてください。

loop には別のアイテムを追加する必要があります。一般的には(今回の実験でも) sequence を使用します。sequence をツールバーから 概要エリアの new_loop にドラッグし、追加してください。 OpenSesame が sequence アイテムを loop の中に入れるか、後に挿入するかを尋ねるので、今回は'Insert into new_loop (new_loop内に挿入)'を選択してください。

デフォルトでは new_sequencenew_loopnew_sequence_2 のように名前が付きます。これらの名前はわかりやすいものではないので、名前を変更することをおすすめします。 項目名は、英数字および/またはアンダースコアで構成されている必要があります。名称を変更するには、概要エリアでアイテムをダブルクリックしてください。ここでは、new_sequencetrial_sequence と変更し、このシーケンスが1試行に対応することを名前からも示します。 加えて、new_loopblock_loop に変更し、試行のブロックに対応させます。

概要エリア(overview area)は Figure 5 のようになっているはずです。

/pages/jp/img/capybara/step3.png

Figure 5. ステップ2終了時のOverview Area

補足3: 未使用アイテム

ヒント — 削除されたアイテムはUnused Items bin(未使用アイテム)に移動されます。Unused Items のタブにある 'Permanently delete unused items (ゴミ箱を空にする)'を選択することで、ゴミ箱を空にすることができます。削除されたアイテムは sequence もしくは loop アイテムにドラッグすること再び使用することができます。

ステップ 3: 画像や音声ファイルのインポート

本実験では、猫、犬、カピバラの画像を使用します。加えて猫の鳴き声や犬の鳴き声の音声ファイルも使用します。実験に必要なファイルはすべてここからダウンロードできます:

stimuli.zip をダウンロードした後適当な場所(例えばデスクトップ)にzipファイルを展開してください。次に、OpenSesameのメインツールバーにある'Show file pool (ファイルプールを表示)' ボタンをクリックしてください。(もしくは: Menu →View → Show file pool) これにより、(デフォルトでは)ウィンドウの右側にファイルプールが表示されます。刺激をファイルプールに追加する最も簡単な方法は、デスクトップ(またはファイルを展開した場所)からファイルプールに刺激を直接ドラッグしてください。もしくは、ファイルプールの「+」ボタンをクリックし、表示されるファイル選択ダイアログを使用してファイルを追加することもできます。ファイルプールは実験に自動的に保存されます。

すべての刺激を追加すると、ファイルプールは Figure 6 のようになります。

/pages/jp/img/capybara/step4.png

Figure 6. ステップ3終了時のファイルプール

ステップ 4: 実験変数を block_loop で定義

概念上は、3×2の実験条件を持つ実験デザインであり、3種類の視覚刺激(猫、犬、カピバラ)と2種類の音響刺激(猫の鳴き声と犬の吠え声)の組み合わせから構成されています。しかしながら、刺激の種類ごとに5つの刺激を使用するため、(5種類の猫の鳴き声、5種類のカピバラ写真など) 技術的にこの実験は5×5×3×2の実験デザインとして扱う方が理にかなっています。

OpenSesameは複数要素を参照する実験デザインの生成に非常に優れています。まず、概要エリアにある block_loop をクリックすることで、 block_loop を開いてください。次に、Full-Factorial Design (完全実施要因) ボタンをクリックしてください。これによって、完全実施要因の生成に対応したウィザードが開き、非常に簡単に設計をすることができます。すべての列は実験変数(つまり因子)に対応し、最初の行は変数の名前を表しています。下の行にはすべての値(例: level)が含まれています。 今回の場合、5×5×3×2の設計は Figure 7 のように指定することで指定することができます。

/pages/jp/img/capybara/loop-wizard.png

Figure 7. ループウィザードによって完全実施要因の生成に対応

'Ok'を押すことで、それぞれの実験変数名を持つ4つの列からなる loop table が生成されていることが確認できると思います。ここには150試行(=5×5×3×2)のユニークな試行があることを示しています。loop table は Figure 8 のようになります。

/pages/jp/img/capybara/step5.png

Figure 8. ステップ4終了時の loop table

ステップ 5: 実験シーケンスにアイテムを追加

このステップではまだ空っぽである trial_sequence を開き、アイテムを追加していきます。 trial_sequence の基本は以下のようになります:

  1. sketchpad: 画面中央に固視点を 500 ms 表示
  2. sampler: 動物の鳴き声を再生
  3. sketchpad: 動物の画像を呈示
  4. mouse_response: 参加者のマウス応答を記録
  5. logger: ファイルに結果や変数を記録

これらのアイテムを追加するには、一つ一つツールバーからアイテムを trial_sequence に追加します。誤って間違った場所にアイテムを追加した場合は、ドラッグアンドドロップで並べ替えることができます。すべてのアイテムが正しい順序になったら、それぞれに分かりやすい名前を付けます。概要エリアは Figure 9 のようになります。

/pages/jp/img/capybara/step6.png

Figure 9. ステップ5終了時の概要エリア

ステップ 6: 固視点の定義

概要エリアにある fixation_dot をクリックしてください。これにより、視覚刺激をデザインするための描画ボードが開きます。中心固視点を描画するには、まず十字アイコンをクリックし、次に表示の中心、つまり位置(0, 0)をクリックします。

加えて固視点が表示される時間も指定する必要があります。これを行うにはduration(呈示時間)を「keypress」から495 ms に変更し、最終的に500 ms の呈示時間になるように指定します(説明については、細く4を参照してください)。

fixation_dot アイテムは Figure 10 のようになります。

/pages/jp/img/capybara/step7.png

Figure 10. ステップ6終了時の fixation_dot アイテム

補足4: 正しい呈示時間を指定する

呈示時間を500 ms にしたい場合に 495と指定するのはなぜでしょうか。この理由は、実際の呈示時間は、常にモニタのリフレッシュレートと互換性のある値に切り上げられるためです。複雑に思えるかもしれませんが、ほとんどの場合、以下の経験則に従えば十分です:

  1. モニターのリフレッシュレートを考慮して、呈示時間を選択。例えば、モニターのリフレッシュレートが60 Hzの場合、すべてのフレームは16.7 ms(= 1000 ms / 60 Hz)続くことを意味します。したがって、60 Hzモニターでは16.7 msの倍数である、33.3 ms、50.3 ms、100 msなどの呈示時間を常に選択する必要があります。
  2. sketchpad のduration(呈示時間)フィールドには、目的の呈示時間よりも数ミリ秒短い時間を指定します。したがって、sketchpad を 50 ms 間表示したい場合は、45 ms を選択します。1000 ms の場合は、995 ms を選択します。

実験タイミングの詳細については、次を参照してください:

ステップ 7: 動物の鳴き声(音響刺激)の定義

animal_sound を開いてください。 sampler アイテムにはいくつかのオプションがありますが、最も重要なものは再生すべきサウンドファイルです。browse(参照) ボタンをクリックしファイルプール選択ダイアログを開き、オーディオファイルを選択してください。ここでは例えば bark1.ogg

もちろん、同じサウンドを何度も繰り返し再生することが目的ではありません。ステップ5の block_loop で定義した変数 soundsound_nr に基づいてオーディオファイルを選択します。このためには、変数に依存する文字列の部分を角括弧で囲んだ変数の名前で置き換えます。具体的には、'bark1.ogg' は変数 'sound' の値を 'bark' に置き換え、'sound_nr' の値を '1' に置き換えたいので '[sound][sound_nr].ogg' となります。

また、sampler の再生時間を変更する必要もあります。 デフォルトでは、duration(再生時間)は 'sound' です。これは音声ファイルの再生が終了するまで実験が一時停止することを示しています。duration(再生時間)を0に変更します。これは、音声が0 ms間だけ再生されることを意味するのではなく、音声がバックグラウンドで引き続き再生される間に、実験がすぐに次のアイテムに進むことを意味します。これでアイテム animal_soundFigure 11 のようになるはずです。

/pages/jp/img/capybara/step8.png

Figure 11. ステップ7終了時の animal_sound アイテム

補足5: 変数

変数使用の詳細については、以下を参照してください:

ステップ 8: 動物の画像(視覚刺激)の定義

animal_picture を開いてください。風景画像のようなアイコンボタンをクリックして画像ツールを選択します。次に、ディスプレイの中央(0, 0)をクリックし、表示されるファイルプールダイアログで、capybara1.png を選択します。カピバラの横目が、ディスプレイの中央からあなたを見つめていると思います。しかし、もちろん、同じカピバラを毎試行見せたい訳ではありません。代わりに、表示される画像を block_loop で定義した変数 animalpic_nr に依存させます(ステップ 4)。

animal_sound で用いた方法と同じ技を使うことができますが、画像では動作が少し異なります。まず、カピバラを右クリックし、'Edit script (スクリプトの編集)' を選択します。これにより、カピバラ画像に対応するOpenSesameスクリプトの行を編集することができます:

draw image center=1 file="capybara1.png" scale=1 show_if=always x=0 y=0 z_index=0

次に画像ファイルの名前を 'capybara.png' から '[animal][pic_nr].png' に変更します:

draw image center=1 file="[animal][pic_nr].png" scale=1 show_if=always x=0 y=0 z_index=0

'Ok' をクリックして変更を適用します。カピバラが消え、プレースホルダ画像に置き換えられ、OpenSesameは変数を使って定義されているため、オブジェクトが表示されていないと警告を出すかと思います。ですが実験中には表示されるため、心配する必要はありません。

さらに、応答用に2つの円を追加します:

  • 画面の左側に 'dog' という名前の円が一つ。(参加者に応答のルールを思い出させるために、'dog' を含むテキストを円の上に追加することができます。
  • 画面の右側に 'cat' という名前の円が一つ。(参加者に応答のルールを思い出させるために、'cat' を含むテキストを円の上に追加することができます。

これらの円をマウス応答における regions of interest (ROI: 関心のある領域) として使用します。具体的には、それぞれの円に名前を指定しているため、mouse_response アイテムは、クリックした座標がこれらの円のいずれかに含まれるかどうかをチェックすることができます。ステップ9で詳しく説明します。

最後に、'Duration (呈示時間)' のフィールドを'0'に設定します。これは、画像が 0 ms間表示されることを意味するものではなく、実験がすぐに次のアイテム(response)に進むことを意味します。response は参加者の応答を待つアイテムであるため、画面上の表示は変更されず、応答があるまで画像は表示され続けます。

/pages/jp/img/capybara/step9.png

Figure 12. ステップ8終了時の animal_picture sketchpad アイテム

補足6: 画像フォーマット

ヒント -- OpenSesameは多種多様な画像フォーマットを扱うことができます。しかし、いくつかの(非標準的な) .bmp フォーマットはトラブルを引き起こすことが知られています。.bmp イメージが表示されない場合は、.png のような別のフォーマットを使うことを選択肢に入れてください。[GIMP] などのフリーツールで簡単に画像の変換をすることができます。

ステップ 9: 応答を定義する

mouse_response アイテムを開いてください。mouse_response アイテムは単一のマウス入力(クリックもしくはリリース)を記録します。以下のようにいくつかのオプションが存在します。

  • Correct response (正しい応答) — マウスボタンが正しい応答であることを示すことができます。ただし、あくまで参加者がクリックした場所に基づいて応答が正しいかどうかを判断し、どのボタンがクリックされたかには基づいていません。そこで今回はこのフィールドを空のままにします。
  • Allowed responses (可能な応答) はセミコロンで区切られた受け付けるマウス入力を指定します。ここでは 'left_button' とします。
  • Timeout (タイムアウト) は応答が 'None' に設定されるまでの時間を示し、実験は続行されます。今回の実験ではタイムアウトが重要です。なぜなら、参加者はカピバラを見たときに応答しない選択肢もあるからです。ここではタイムアウトを2000に設定しましょう。
  • Linked sketchpad (リンクされたスケッチパッド) ではROIとして使用されるべき sketchpad を指定します。そのため、animal_picture を選択します。これによって、'cat' という名前の要素をクリックすると、変数 cursor_roi が自動的に 'cat' に設定されます。
  • Visible mouse cursor (マウスカーソルを表示) - マウス応答の記録中にマウスカーソルを表示する必要があるか選択します。これを有効にして、参加者がクリックする場所を確認できるようにする必要があります。
  • Flush pending mouse clicks (保留中の入力をFlush) は新しいマウスクリック応答だけを受け入れるべきであることを示します。これは有効にしていることが望ましいです。(デフォルトですでに有効)

/pages/jp/img/capybara/step10.png

Figure 13. ステップ9終了時の mouse_response mouse_response アイテム

ステップ 10: ロガーを定義する

loggerの設定をする必要はなく、デフォルト設定で問題ありません。ですが何はともあれ設定内容を見てみましょう。概要エリアで logger をクリックして開きます。'Log all variables (recommended) : すべての変数をログに記録する(推奨)' オプションが選択されていることがわかります。これは、OpenSesameがすべての変数を自動的にログに記録することを意味します。

補足8: データのチェックは怠らないように

全てにおいて大切なこと — 必要な変数がすべての実験に記録されているかどうか常に3回はチェックしてください。これを確認する最善の方法は、実験を実行し、結果のログファイルを調べることです。

ステップ 11: 完成! (それともまだ未完成?)

これで、実験を一通り、実行できるはずです。ですがまだ改善の余地があり、以下の一例(追加課題?)を盛り込むことによってより良い実験を作成することができます。ここまでで基本的な部分は全て終わりです。

メインツールバーにある 'Run fullscreen (フルスクリーンで実行)' (Control+R) ボタンをクリックし、パイロット実験を行って見てください。

補足11: Quick run (クイックラン)

ヒント — オレンジ色の 'Run in window (ウィンドウ内で実行)' ボタンをクリックすることでクイックランが行え、ログファイルの保存方法などを尋ねないため、さらに高速に実行されます(テスト目的でのみ使用される機能です)。

追加課題

以下の追加課題は自分自身で解決するためのものです。これらの課題の解答例は、experiment file にありますが、学習のために自分の力で解決することをおすすめします!

易しい: 実験説明画面と終了画面を追加する

  • sketchpadform_text_display によって文字を呈示することができます。
  • 端的な実験説明が望ましいです。

易しい: 得られたデータ(変数)を見る

  • 実験を1回実行します。block_loop のRepeat値を1未満に設定することで、試行回数を減らすことができます。
  • Excel、LibreOffice、またはJASPなどでデータファイルを開く。

普通: 試行ごとにフィードバックを行う

  • これを行うには、事前に正しい応答を定義しておく必要があります。(下記参照)
  • フィードバックを提供する上でさり気なく有用な方法は、間違った応答の後に赤い点を短く呈示し、正しい応答の後に緑の点を呈示することです。
  • Run If 構文を使用する。

普通: 参加者間のカウンターバランスを行う

  • 変数 subject_parity は 'even' もしくは 'odd' の値を取ります。
  • 参加者番号が偶数および奇数の参加者には、それぞれ異なる動物画像の sketchpadmouse_response アイテムを使用する。

普通: 同じ動物の画像は繰り返し表示しない

  • Advanced loop operations (高度なループ操作) 機能を使用すると、ランダム操作における制約を指定できます。

難しい: 応答が正しかったかどうか判定する

  • この課題は inline_script を要求します。
  • 変数 correct に不正解の時には 0 、正しい応答の時に 1 を指定する
  • タイムアウトが発生した場合、変数 response は string型の 'None' である。
  • それ以外の場合、変数 cursor_roi には、クリックされたすべての要素名がセミコロンで区切られたリストとして含まれています。複数の要素をクリックすることは可能です。たとえば、動物の画像と応答用の円が重なっている場合。

難しい: 試行を複数のブロックに分割する

  • sketchpad を trial_sequence の最後に追加し、参加者に小休止を促す。
  • Run If 構文を使用し、その sketchpad を15試行おきに実行する。
  • 剰余演算 (%) と変数 count_trial_sequence を使用します。

レファレンス

Mathôt, S., Schreij, D., & Theeuwes, J. (2012). OpenSesame: An open-source, graphical experiment builder for the social sciences. Behavior Research Methods, 44(2), 314–324. doi:10.3758/s13428-011-0168-7

Supported by Supported by