質問紙尺度の提示

質問紙尺度として今回は日本語版 BIS/BAS(高橋他, 2007)を使用します。 項目は本資料の一番最後にリストアップされています。

チュートリアルを通して,このような調査画面が完成します。

質問を一つ提示する

フランカー課題のときと同じ要領で,docs/jspsych/start/ に保存されている bis-bas.html というファイルをエディタで開いてください。 ファイルの html 部分は以下のようになっています。 フランカーのときと,読み込んでいるプラグインが変わっていることに注目してください。 なぜこの変更があるのかについては,javascript 部分を見ると理解できると思います。

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <script src="../jspsych-6.3.1/jspsych.js"></script>
    <!-- 	html-keyboard-response ではない   -->
    <script src="../jspsych-6.3.1/plugins/jspsych-survey-likert.js"></script>
    <link rel="stylesheet" href="../jspsych-6.3.1/css/jspsych.css" />
  </head>
  <body></body>
  <script>
    // ここにjavascriptコードを書いて実験を作成する
    // 基本的にはここを編集すれば良い
  </script>
</html>

javascript 部分(= <script></script> の間)は以下のようになっています。

var bis_bas = {
  type: 'survey-likert', // タイプが変わっている。
  questions: [], // 一旦省略
  scale_width: 500,
};

jsPsych.init({
  timeline: [bis_bas],
});

まず,フランカー課題の場合と異なり,typesurvey-likert が指定されています。 html 部分で読み込むプラグインが変わっていたのは,これが理由です。 jsPsych を使った実験を書く際には,コード内で登場したtypeに対応するプラグインを html ですべて読み込んでおく必要があります。

また,type の変更に伴ってその他の設定項目も変わっていて,questions, scale_width になっています。 questions に,質問項目オブジェクト{}が格納された配列を指定することで,質問項目が表示されるようになります。

質問項目オブジェクトは以下のようにします。

{
  prompt: '競争に勝ったら,私は興奮するだろう', // 質問文
	// リッカートのラベル
  labels: ['あてはまらない', 'どちらかと言えばあてはまらない', 'どちらかと言えばあてはまる', 'あてはまる'],
  required: true, // 回答が必須かどうか
},

【演習1】

  • 質問文を変えてみよう
  • 選択肢の数を 4 つ以外にしてみよう

質問文は,本ページの最下部にあります。

サンプルコードは docs/jspsych/exercise/BB01_change_item_scale.html

質問を複数提示する

questionsの配列に質問項目オブジェクトを複数入れることで,1ページに複数の質問を表示できるようになります。

var bis_bas = {
  type: 'survey-likert',
  questions: [
    {
      prompt: '競争に勝ったら,私は興奮するだろう',
      labels: ['あてはまらない', 'どちらかと言えばあてはまらない', 'どちらかと言えばあてはまる', 'あてはまる'],
      required: true,
    },
    {
      prompt: '私は,興奮や新しい刺激を切望している',
      labels: ['あてはまらない', 'どちらかと言えばあてはまらない', 'どちらかと言えばあてはまる', 'あてはまる'],
      required: true,
    },
  ],
  scale_width: 500,
};

【演習2】

  • 表示する質問をあと2つ追加する

サンプルコードは docs/jspsych/exercise/BB02_four_items.html

質問項目の配列をまとめて作る

さて,BIS/BAS の質問項目は全部で 20 項目あります。 上の方法で表示される質問を増やしていくと,フランカー課題の説明でも述べたように,コード作成の効率性やコードの可読性が下がっていきます。 個人的には,すでに4項目でうんざりです。 もし,リッカートのラベルを変更することになったら,その編集作業は発狂ものです。

今回は質問項目オブジェクトの配列を効率よく作るというのが目標になります。 フランカー課題で使ったtimeline_variables ではなく,for 文を使った方法が適しているでしょう。

for 文

for 文は同じ処理を繰り返すときに使う構文です。 for 文の使い方を知るために,以下の例を見てみましょう。

var num = 1;
for (var i = 0; i < 10; i++) {
  num = num + 1;
}

for ([初期化式]; [条件式]; [加算式]) で何回繰り返すかを設定します。 上の例では,それぞれ,

  • 初期化式:繰り返しを制御するためのカウンター用変数 i0 からスタートさせる
  • 条件式: i が 10 未満の間だけ {} 内の処理を繰り返す(i < 10
  • 加算式: {} 内の処理が終わったら i に 1 を足す(i++

となっています。 これによって,ここでは num = num + 1 という処理を 10 回繰り返しています。

本題

それでは,for 文を使って質問項目の配列を作っていきます。 for 文で扱いやすくするように,事前に 質問文が列挙された配列 items を作成しています。 ここでは省略していますが,20 個の質問文を全部入れます。 また,for 文内の処理を見やすくするために,リッカートのラベルのための配列を scale という変数として事前に宣言しています。

var scale = ['あてはまらない', 'どちらかと言えばあてはまらない', 'どちらかと言えばあてはまる', 'あてはまる'];
var items = [
  'たとえ何かよくないことが私の身に起ころうとしていても,怖くなったり神経質になったりすることはほとんどない',
  '私は,欲しいものを手に入れるためには格別に努力する',
  // 中略
  '競争に勝ったら,私は興奮するだろう',
  '私は,間違いを犯すことを心配している',
];

var questions = []; // 空の配列
for (var i = 0; i < items.length; i++) {
  questions.push({ prompt: items[i], labels: scale, required: true });
} // 質問オブジェクトを一つずつ追加

var bis_bas = {
  type: 'survey-likert',
  questions: questions, // 完成したquestions配列をここで指定
  randomize_question_order: true, // 質問文の順番をランダム化する
  scale_width: 500,
};

for 文を詳しく見ていきましょう。 この例では,一つ前の例から条件式の部分が変更されています。

  • 条件式: i が質問項目の配列(items)の要素数より小さい間だけ {} 内の処理を繰り返す(i < items.length

つまり, 今回の例では,i = 19 のときまで処理を繰り返すことになります。 i の初期値が 0 なので,0 ~ 19 の計 20 回処理が繰り返されます。

{} 内で行っている処理では,質問項目オブジェクトを .push() で 事前に作っておいた空のquestions 配列に追加しています。

追加する質問項目オブジェクトですが,prompt: の部分に items[i] とあります。 これは,質問文配列itemsi 番目の質問文をとるということをしています。 ifor の繰り返しごとに 1 ずつ足されていくので,初期値の i = 0 番目から 19 番目まで質問文が順番に取り出されることになります。 0 番目は奇妙に見えますが,javascript では,日常的な数え方とは異なり,配列の最初の要素は 0 番目となっています 1。 したがって,0 番目から 19 番目まで順番に取り出していくことで,20 個の質問文が取り出せるわけです。

これで,最初は空だった questions 配列に 20 個の質問項目オブジェクトが格納されます。

【演習3】

  • 他の質問紙尺度でも練習してみよう(TWS 内では扱いません)
Warning

なお,jsPsych では選択肢に割り当てられる得点が,左から順に 0, 1, 2, …となっています。通常,質問紙の得点は 1 から振っていくと思うので,分析の際は各項目の得点に 1 を足すようにしてください。

日本語版 BIS/BAS の項目(4件法)

  1. たとえ何かよくないことが私の身に起ころうとしていても,怖くなったり神経質になったりすることはほとんどない
  2. 私は,欲しいものを手に入れるためには格別に努力する
  3. 何かがうまくいっているときは,それを続けることがとても楽しいと思う
  4. 面白そうだと思えば,私はいつも何か新しいものを試したいと考えている
  5. 私は,欲しいものを手に入れたとき,興奮し,活気づけられる
  6. 非難されたり怒られたりすると,私はかなり傷つく
  7. 欲しいものがあると,私はたいていそれを手に入れるために全力を挙げる
  8. 楽しいかもしれないから,というだけの理由で何かをすることがよくある
  9. 欲しいものを手に入れるチャンスを見つけると,すぐに動き出す
  10. 誰かが私のことを怒っていると考えたり,知ったりすると,私はかなり心配になったり動揺したりする
  11. 何か好きなことをするチャンスをみつけると,私はすぐに興奮する
  12. 私はしばしば時のはずみで行動する
  13. 何かよくないことが起ころうとしていると考えると,私はたいていくよくよ悩む
  14. よいことが私の身に起こると,そのことは,私に強い影響を与える
  15. 何か重要なことをあまりうまくできなかったと考えると不安になる
  16. 私は,興奮や新しい刺激を切望している
  17. 私は,何かを追い求めているときには徹底的にやる
  18. 私は,友達と比べると不安の種はとても少ない
  19. 競争に勝ったら,私は興奮するだろう
  20. 私は,間違いを犯すことを心配している

執筆者: 西山慧

  1. なお,R では最初の要素は 1 番目です。Python は 0 番目です。