例えば顔を使った実験をするとき、女性には女性顔、男性には男性顔を呈示したいという場合があるかと思います。他にも,参加者に何らかの属性質問に回答してもらい、その回答に応じて呈示する刺激を変えたいということもありますよね。

そんなときの対処法として、一例をご紹介します。

以下の例では、女性には女性顔、男性には男性顔の刺激リストを呈示したい場合を想定して説明していきます。

まずは刺激を設定します。

	var male_stim = [
		'<center><img src ="img/m_1.png", width=200/></center>',
		'<center><img src ="img/m_2.png", width=200/></center>',
		'<center><img src ="img/m_3.png", width=200/></center>',
	];

	var female_stim = [
		'<center><img src ="img/f_1.png" width=200/></center>',
		'<center><img src ="img/f_2.png" width=200/></center>',
		'<center><img src ="img/f_3.png" width=200/></center>',
	];

次に性別を答えてもらいます。選択肢(mf)はあらかじめ”男性、”女性”、”その他・答えたくない”の3種類を設定してあります。今回は、”その他”を選択した場合は女性の刺激リストが出るようにします。

さらに、課題中に呈示する刺激リストとして、face_stimという刺激リストを新たに設定します。2行目の"face_stim=male_stim;"がそれにあたります。色々試した結果、varをつけずに変数を設定し、中身に仮で刺激リストを代入しておくと、うまくいったのでこうしています。おそらく、グローバル変数として宣言しないとfunctionの中で新しく刺激リストを代入しても変化しなかったりするためだと思います。

プラグインは、"html-button-response"を使ってます。on_finish以下で参加者の選択をデータファイルに追加する命令を書いているのですが、この時にどの選択肢を選んだかによって顔刺激リスト(face_stim)に割り当てる刺激リストを指定します。参加者が性別を選択すると、選択肢によってface_stimの中身が決められた刺激リストに上書きされ、性別に合わせた刺激リストが出来上がります。

var mf = ["男性","女性","その他・答えたくない"];
face_stim = male_stim; 
var gender = {
		type: 'html-button-response',
		stimulus: "<center>あなたの性別を選択してください</center>",
		choices: mf,
		timing_post_trial:0,
		is_html: true,
		on_finish:function (s){
			if (s.button_pressed == 0){
				face_stim = male_stim;
				jsPsych.data.addDataToLastTrial({SubjectInfo: "男性"});
			}else if(s.button_pressed == 1){
				face_stim = female_stim;
				jsPsych.data.addDataToLastTrial({SubjectInfo: "女性"});
			}else {
				face_stim = female_stim;
				jsPsych.data.addDataToLastTrial({SubjectInfo: "その他・答えたくない"});
		}
		}
	};

※動作確認はjsPsych6.0.3という古いバージョンでやっています。