[ 基本プログラム| 拡張1 | 拡張2 | 拡張3 | 拡張4]


exp_2armed_banditでは,常に選択肢が同じ位置に呈示され好きなタイミングで選択ができるものでした。 これは実際の実験課題としては,以下のような問題が考えられます。

これらの問題に対処するため,以下のような方法が考えられます。

exp_2armed_bandit_ext1

ここでは,こちらで作った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