MATLAB で Stroop のような反応時間タスクを作成しましたが、パイロットの結果を見ると、コードに何か問題がある可能性があります (一致効果は予想よりもはるかに大きい)。RT を間違って記録している可能性があるので、次の設定で問題ないかどうか誰か助けてもらえますか?
任意の試行で、2 つのイベントが発生します (固視交差に続く): 最初に、ターゲット刺激が最大 3 秒間 (または応答まで) 提示され、次に参加者はボタンを押して次の試行を開始する必要があります。両方のボタン押下 (ターゲット ボタンと試行開始ボタン) の RT が記録されます。これが私のコードです:
Screen('DrawTexture', mainwin, Target);
Screen('Flip', mainwin);
timeStart = GetSecs;keyIsDown=0; correct=0; rt=0;
while 1 & (GetSecs - timeStart) < 3
[keyIsDown, secs, keyCode] = KbCheck;
FlushEvents('keyDown');
if keyIsDown
nKeys = sum(keyCode);
if nKeys==1
if keyCode(Left)||keyCode(Right)||keyCode(Down)||keyCode(Up)
rt = 1000.*(GetSecs-timeStart);
keypressed=find(keyCode);
Screen('Flip', mainwin);
if ... [I removed some irrelevant ERROR feedback related code here]...
elseif keyCode(escKey)
ShowCursor; fclose(outfile); Screen('CloseAll'); return
end
keyIsDown=0; keyCode=0;
end
else
keypressed = 0; %the resp column in output is 0 if no button is pressed
end
end
if keypressed == 0 %indicates timeout errors
DrawFormattedText(mainwin, 'TOO SLOW', 'center', 'center', errorcol);
Screen('Flip', mainwin);
WaitSecs(1);
end
Screen('DrawTexture', mainwin, press5);
Screen('Flip', mainwin);
keyIsDown=0; timeSt = GetSecs;
while 1
[keyIsDown, secs, keyCode] = KbCheck;
if keyIsDown
if keyCode(MoveOn)
pause_rt = 1000.*(secs - timeSt);
break ;
elseif keyCode(escKey)
ShowCursor;
fclose(outfile);
Screen('CloseAll');
return;
end
end
end
私の質問: コマンド GetSecs は呼び出されるたびに時間を取得しますよね? したがって、GetSecs - timeStart は RT を計算する適切な方法ですが、secs - timeSt (2 番目の刺激で見られるように) も同様です。2 つの方法はほとんど同じです (GetSecs を使用すると、timeStart は RT を少し過大評価する可能性があります)、それは正しいですか?
ここで心配なのは、NEXT トライアルのターゲットの RT 推定値が、PREVIOUS トライアルの 2 回目のボタン押下 RT の影響を受ける可能性があることです。その証拠はありますか?