[ 基本プログラム| 拡張1 | 拡張2 | 拡張3 | 拡張4]
exp_2armed_banditでは,常に選択肢が同じ位置に呈示され好きなタイミングで選択ができるものでした。 これは実際の実験課題としては,以下のような問題が考えられます。
常に同じ選択肢を選ぶのが一番楽なので,最初はある程度試行錯誤するとしても その後は同じ選択肢をずっと選ぶという行動が起こりやすい。
選択にいくらでも時間がかけられるので参加者間で課題時間にばらつきが生じやすい。これは, データにばらつきが出る他,課題の時間に応じて謝金を決めている場合などにも問題になる。 反応時間を見る場合もこれは問題になる。
これらの問題に対処するため,以下のような方法が考えられます。
選択肢の呈示位置を左右でランダマイズする ⇒ これで,単に労力を最小化するために同じ選択を続ける人と,本当に同じ選択肢を選ぼうとしている 人を区別することができます。
反応時間に制限を設ける,反応ミスには警告メッセージを出す。
試行のはじめに固視点 (+) を表示し,その間,選択肢は消す。
ここでは,こちらで作ったexperiment (‘exp_2armed_bandit’) に以下の処理を追加します。
固視点を呈示するためには,試行のはじめに以下の処理をはさみます。
show text "+" 0 0 # -> stimulus 1に
delay 1000
clear 1 # stimulus 1 (固視点) を消す
ここではテキストで固視点を表示していますが,大きさの詳細な調整をする場合は 画像ファイルを使う方法も考えられます (拡張3参照)。
左右でランダマイズするために,以下のように1か2のいずれかが出る乱数を ふって各選択肢のx座標を決めます。
set $option_pos random 1 2 # ⇒ $option_posには1か2のいずれかが入る
if $option_pos == 1
# 緑が右,青が左
set $green_x 150
set $blue_x -150
fi
if $option_pos == 2
# 緑が左,青が右
set $green_x -150
set $blue_x 150
fi
あらかじめ決められた位置になるようランダマイズすることも可能です (拡張2参照)。
以下のように反応時間に制限を設け,反応ミスには警告メッセージを出します。
# 制限時間は2000ms
readmouse l 1 2000 range 2 3
#
# $c_pos にはクリックされたstimulusのID (2 or 3) が入る
set $c_pos bitmap-under-mouse MOUSE_X MOUSE_Y
# ....
# 【追加】2秒以内に反応がなかった場合のメッセージ ----------------
# 制限時間以内にマウス入力がなかった場合,変数STATUSはTIMEOUT (=3) となる
if STATUS == TIMEOUT
clear 2 3
set $a 0 # 反応ミス -> $a = 0とする
show text "2秒以内に選択してください!" 0 0
delay 2500
fi
これらを追加した全体のコードは以下になります。
options
mouse on # マウス入力をオン
fonts
arial 36 # 使用するテキストのフォントを設定
# 2armed_banditというtaskの1試行の流れを以下に記述
task 2armed_bandit
# 【追加】固視点の呈示 -----------------------------------
#
show text "+" 0 0 # -> stimulus 1に
delay 1000
clear 1 # stimulus 1 (固視点) を消す
#
# 【追加】選択肢の位置を決める ----------------------------
#
set $option_pos random 1 2 # ⇒ $option_posには1か2のいずれかが入る
if $option_pos == 1
# 緑が右,青が左
set $green_x 150
set $blue_x -150
fi
if $option_pos == 2
# 緑が左,青が右
set $green_x -150
set $blue_x 150
fi
#
# 選択肢の呈示 -------------------------------------------
#
# 座標x = $green_x, y = 0の位置に,幅50,高さ50の緑の正方形を呈示
show rectangle $green_x 0 50 50 0 255 0 # ⇒ stimulus 2に
# 座標x = $blue_x, y = 0の位置に,幅50,高さ50の青の正方形を呈示
show rectangle $blue_x 0 50 50 0 0 255 # ⇒ stimulus 3に
#
# マウスでの選択の読み取り -------------------------------
#
# stimulus 2 (緑の正方形),またはstimulus 3 (青の正方形)
# が左クリックされるまで待つ
# 【変更】固視点がstimulus 1となった分 stimulus IDが一つずれる
# 制限時間は2000ms
readmouse l 1 2000 range 2 3
#
# $c_pos にはクリックされたstimulusのID (2 or 3) が入る
set $c_pos bitmap-under-mouse MOUSE_X MOUSE_Y
#
# 反応時間の記録
set $decisiontime RT
#
# 【追加】2秒以内に反応がなかった場合のメッセージ ----------------
# 制限時間以内にマウス入力がなかった場合,変数STATUSはTIMEOUT (=3) となる
if STATUS == TIMEOUT
clear 2 3
set $a 0 # 反応ミス -> $a = 0とする
show text "2秒以内に選択してください!" 0 0
delay 2500
fi
#
# 【追加】どちらの選択をしたか判定 ---------------------------
#
if STATUS != TIMEOUT
if $c_pos == 2 # 青い四角を選択
set $a 1
fi
if $c_pos == 3 # 緑の四角を選択
set $a 2
fi
fi
#
# 選択の結果の決定,呈示 ---------------------------------
#
# 報酬の有無の決定のため,1から100の間の乱数を生成
set $x random 0 100
if $a == 1 # 選択肢1 (緑) を選択
show text "▲" $green_x 60
delay 500
if $x < 70 # 0.7の確率で報酬有り
show text "+10ポイント" 0 -100
set $reward 1
fi
if $x >= 70 # 0.3の確率で報酬無し
show text "+0ポイント" 0 -100
set $reward 0
fi
fi
if $a == 2 # 選択肢2 (青) を選択
show text "▲" $blue_x 60
delay 500
if $x < 30 # 0.3の確率で報酬有り
show text "+10ポイント" 0 -100
set $reward 1
fi
if $x >= 30 # 0.7の確率で報酬無し
show text "+0ポイント" 0 -100
set $reward 0
fi
fi
# 1秒待つ
delay 1000
#
# 1試行分のデータの保存-----------------------------------
# 1列目: 反応時間 (選択肢が出てからキーを押すまで)
# 2列目: 選択 (1 or 2)
# 3列目: 報酬の有無 (0 or 1)
# 4列目: 選択肢の位置 (1:緑が右, 2:緑が左) 【この列を追加】
save $decisiontime $a $reward $option_pos
block main
tasklist
# タスク2armed_banditを40試行行う
2armed_bandit 40
end