Chapter 12

【質問紙尺度】for文

snishiyama
snishiyama
2021.09.24に更新

はじめに

本章では,jsPsych を用いて質問紙尺度を提示する方法を解説します。具体的には,このような調査画面が完成します。質問紙尺度用のコードを効率的に作成する方法としてfor文についても紹介します。for文は JavaScript に限らず様々な言語で利用される文法なので,この章で慣れておくと今後何かしらのプログラミングを行う際にも役立つでしょう。質問紙尺度として今回は日本語版 BIS/BAS(高橋他, 2007)[1]を使用しています。特に深い理由はありません。項目は本資料の一番最後にリストアップされています。

質問を一つ提示する

まず質問項目を一つ提示するところから始めていきます。以下のコードをコピペしたファイルをbis-bas.htmlという名前で保存してください。

bis-bas.html
<!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>
    var bis_bas = {
      type: 'survey-likert',
      questions: [
        {
          prompt: '競争に勝ったら,私は興奮するだろう',
          labels: ['あてはまらない', 'どちらかと言えばあてはまらない', 'どちらかと言えばあてはまる', 'あてはまる'],
          required: true,
        },
      ],
      scale_width: 500,
    };

    jsPsych.init({
      timeline: [bis_bas],
    });
  </script>
</html>

まず<head></head>の部分でjspsych-survey-likert.jsというプラグインを読み込んでいます。

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

var bis_bas = {
  type: 'survey-likert',
  questions: [], // 一旦省略
  scale_width: 500,
};

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

まず,フランカー課題の場合と異なり,typesurvey-likert が指定されています。それに伴ってその他の設定項目も変わっていて,questions, scale_width になっています。questions に,質問項目オブジェクト{}が格納された配列を指定することで,質問項目が表示されるようになります。

質問項目オブジェクトは,これまで扱ってきた試行変数と同様に,{設定名: 具体的な値}というふうにして質問項目の設定を指定します。

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

演習1

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

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

演習 1 のコード例
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <script src="../jspsych-6.3.1/jspsych.js"></script>
    <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>
    var bis_bas = {
      type: 'survey-likert',
      questions: [
        {
          prompt: '私は,興奮や新しい刺激を切望している', // ここで質問文を変更
          labels: ['あてはまらない', 'どちらかと言えばあてはまらない', 'どちらでもない', 'どちらかと言えばあてはまる', 'あてはまる'], // scale を変更
          required: true,
        },
      ],
      scale_width: 500,
    };

    jsPsych.init({
      timeline: [bis_bas],
    });
  </script>
</html>

質問を複数提示する

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

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

演習2

  • 表示する質問をあと2つ追加する
演習 2 のコード例
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <script src="../jspsych-6.3.1/jspsych.js"></script>
    <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>
    // 日本語版BIS/BAS尺度については次の文献を参照。高橋他 (2007). Grayの気質モデル. パーソナリティ研究, 15(3), 276–289. https://doi.org/10.2132/personality.15.276
    var bis_bas = {
      type: 'survey-likert',
      questions: [
        {
          prompt: '競争に勝ったら,私は興奮するだろう',
          labels: ['あてはまらない', 'どちらかと言えばあてはまらない', 'どちらかと言えばあてはまる', 'あてはまる'],
          required: true,
        },
        {
          prompt: '私は,興奮や新しい刺激を切望している',
          labels: ['あてはまらない', 'どちらかと言えばあてはまらない', 'どちらかと言えばあてはまる', 'あてはまる'],
          required: true,
        },
        {
          prompt: '非難されたり怒られたりすると,私はかなり傷つく',
          labels: ['あてはまらない', 'どちらかと言えばあてはまらない', 'どちらかと言えばあてはまる', 'あてはまる'],
          required: true,
        },
        {
          prompt: '私はしばしば時のはずみで行動する',
          labels: ['あてはまらない', 'どちらかと言えばあてはまらない', 'どちらかと言えばあてはまる', 'あてはまる'],
          required: true,
        },
      ],
      scale_width: 500,
    };

    jsPsych.init({
      timeline: [bis_bas],
    });
  </script>
</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 番目となっています [2]。したがって,0 番目から 19 番目まで順番に取り出していくことで,20 個の質問文が取り出せるわけです。

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

演習3

  • 他の質問紙尺度でも練習してみよう

おわりに

本章では,jsPsych を用いた質問紙尺度の提示方法を紹介しました。for文はプログラミング言語の基本かつ便利なので覚えておきましょう。

ただ,残念ながら,jsPsych で収集した質問紙尺度の回答データは分析の際の下処理が面倒です。それを解説する章の原稿はすでにある程度出来上がってはいます。なるべく早いうちに追加する予定です。

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

  1. たとえ何かよくないことが私の身に起ころうとしていても,怖くなったり神経質になったりすることはほとんどない
  2. 私は,欲しいものを手に入れるためには格別に努力する
  3. 何かがうまくいっているときは,それを続けることがとても楽しいと思う
  4. 面白そうだと思えば,私はいつも何か新しいものを試したいと考えている
  5. 私は,欲しいものを手に入れたとき,興奮し,活気づけられる
  6. 非難されたり怒られたりすると,私はかなり傷つく
  7. 欲しいものがあると,私はたいていそれを手に入れるために全力を挙げる
  8. 楽しいかもしれないから,というだけの理由で何かをすることがよくある
  9. 欲しいものを手に入れるチャンスを見つけると,すぐに動き出す
  10. 誰かが私のことを怒っていると考えたり,知ったりすると,私はかなり心配になったり動揺したりする
  11. 何か好きなことをするチャンスをみつけると,私はすぐに興奮する
  12. 私はしばしば時のはずみで行動する
  13. 何かよくないことが起ころうとしていると考えると,私はたいていくよくよ悩む
  14. よいことが私の身に起こると,そのことは,私に強い影響を与える
  15. 何か重要なことをあまりうまくできなかったと考えると不安になる
  16. 私は,興奮や新しい刺激を切望している
  17. 私は,何かを追い求めているときには徹底的にやる
  18. 私は,友達と比べると不安の種はとても少ない
  19. 競争に勝ったら,私は興奮するだろう
  20. 私は,間違いを犯すことを心配している
脚注
  1. 高橋 雄介・山形 伸二・木島 伸彦・繁桝 算男・大野 裕・安藤 寿康 (2007). Gray の気質モデル. パーソナリティ研究, 15(3), 276–289. https://doi.org/10.2132/personality.15.276 ↩︎

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