PsychoPyでDigit Span Testを作成する

 

流れ

1. PsychoPyの基礎

  • Psychopyの概要と特徴の理解
  • 3インターフェースの理解
  • PsychoPy Builderの画面構成

2. 基本的な実験作成(Digit Span Test フィードバックなし)

  • 実験概要の理解
  • 具体的な実装手順
  • データの収集と分析

3. 発展的な改修(Digit Span Test フィードバックあり)

  • カスタムコンポーネント「Code」を使用したプログラミング

4. 実験導入のTips

  • 導入方法
  • (オンライン上での実施方法)

 

 

1. PsychoPyの基礎

PsychoPyの概要

Psychopyは心理学実験作成のためのPythonベースのオープンソースソフトウェア(無料)です。視覚刺激や聴覚刺激を提示し、被験者の反応を記録することができます。

主な特徴

  • GUI(グラフィカルユーザーインターフェース)により直感的に実験を作成することが可能
  • Pythonコードによる柔軟な実験プログラミング

    Builderとコードを組み合わせることも、コードだけで作成することも可能

  • 視覚・聴覚の刺激提示と反応記録が可能
  • 公式のWebサービス(Pavlovia)によるオンライン実験への対応

    Pavloviaサービスは有料だが、他のサービスを組み合わせることで無料でも対応可能(後述)

インターフェースの概要

PsychoPyには主に3つのインターフェースがあります。

Builder

グラフィカルに操作して実験を作成するためのインターフェースです。プログラミングの知識がなくても実験を作成できます。

Coder

Pythonコードを直接記述して実験をプログラミングするためのインターフェースです。より柔軟で複雑な実験設計が可能です。

Runner

作成した実験を実行するためのインターフェースです。実験中のログやエラーメッセージを確認することができます。

 

Builderの画面構成

Routines

実験内のイベント(刺激の提示、反応の収集など)を時系列で設定する場所です。

Flow

実験全体の流れを設定する画面です。Routinesの順序や、LoopによってRoutinesの繰り返しなどを設定できる場所です。

Components

Routines内で登録するさまざまな視覚・聴覚要素(テキスト、画像、音、キー入力など)を設定する場所です。

主なコンポーネントは以下の通りです:

  • Stimli(刺激のコンポーネント)
    • Polygon: 基本的な図形を表示できます。
    • Movie: 動画ファイル(.mp4など)を再生できます。
    • Image: 画像ファイル(.png, .jpg など)を表示できます。
    • Text: 文字列を表示します。
    • Sound: 音声ファイル(.wav, .mp3など)を再生できます。
  • Responses(反応のコンポーネント)
    • Joy Buttons: ゲームパッドのボタン反応を記録できます。
    • Microphon: 被験者の音声入力を録音し、音声反応を収集できます。
    • Slider: スライド可能なバーを使って、数値や評価を選択させることができます。
    • Mouse: マウスのクリック反応を記録できます。
    • Keyboard: キーボードの入力キーを記録できます。
    • Textbox: 被験者がテキストを入力することで、自由回答を記録できます。
  • Custom(カスタムコンポーネント)
    • Code: カスタムPythonコードの実行
Components — PsychoPy v2024.2.5

 

 

2. 基本的な実験作成(Digit Span Test フィードバックなし)

実験の概要

Digit Span Test(数字順番テスト)は、記憶力や注意力を測定するために広く使われる心理学的なテストです。このテストでは、被験者に複数の数字を提示し、その数字を順番通りに答えることを求めます。

実験作成イメージ

実装手順

  1. プロジェクトの保存

    最初にプロジェクトを保存しておきます。

    Builderの画面から「File」→「Save as」を選択します。

 

 

 

 

  1. 実験説明テキストの表示

    Builderの画面に戻ります。

    現在、Routineエリアには、FlowにおけるRoutine「trial」が表示されている状態です。

    基本的にはFlowエリアにRoutineという実験イベントを追加し、Routineを繰り返したい場合にLoopを追加して実験を構成していきます。

 

 

 

 

 

 

  1. 実験の実行確認

    作成した実験の実行確認を行います。

    Builderまたはほかの画面で三角の実行ボタンをクリックしてください。

    ※Tips

    実行前にPilotとRunを選択できるトグルボタンがあります。

    Pilotモードではテスト実行を目的としており、全画面表示にはなりません。

    Runオードでは本番実行を目的としており、全画面表示になります。

    なおデータ記録はどちらでも行われます。

 

 

 

  1. データの確認

    実験データは、実験プロジェクトファイルと同じ階層に自動作成される「data」フォルダに格納されています。

    更新日時で降順にソートし、一番最新のExcelファイルを開きます。

    各データ項目の説明は以下の通りです。

    見出し項目説明
    sequence_1, sequence_2, sequence_3実験用のExcelファイルに登録した「sequence_X」の番号
    correct_answer実験用のExcelファイルに登録した「correct_answer」の内容
    thisN実験の中での現在の試行番号
    thisTrialN試行のカウント番号
    thisRepN試行の繰り返し回数
    textbox.textテキストボックスにユーザーが入力したテキスト
    button.numClicksボタンがクリックされた回数
    button.timesOnボタンが押された時間
    button.timesOffボタンが離された時間
    trials.thisRepNループの中での現在の繰り返し回数
    trials.thisTrialNループ内での試行番号
    trials.thisN実験全体での現在の試行番号
    trials.thisIndex試行のインデックス番号
    thisRow.t該当行のデータが出力された瞬間の時間
    notes実験に関連するメモ
    welcome.startedwelcome画面が開始された時間
    welcome_text.startedwelcome_textコンポーネントが開始された時間
    welcome_key.startedwelcome_keyコンポーネントが開始された時間
    welcome.stoppedwelcome画面が終了した時間
    welcome_key.keyswelcome画面で押されたキーの情報
    welcome_key.rtwelcome_keyコンポーネントの開始から、キー入力がされるまでの経過時間
    welcome_key.durationwelcome_keyのキー入力が押されていた時間
    trial.started試行が開始された時間
    sequence_1_text.startedシーケンス1のテキストが開始された時間
    sequence_2_text.startedシーケンス2のテキストが開始された時間
    sequence_1_text.stoppedシーケンス1のテキストが終了した時間
    sequence_2_text.stoppedシーケンス2のテキストが終了した時間
    sequence_3_text.startedシーケンス3のテキストが開始された時間
    sequence_3_text.stoppedシーケンス3のテキストが終了した時間
    textbox.startedテキストボックスコンポーネントが開始された時間
    button.startedボタンコンポーネントが開始された時間
    trial.stopped試行が終了した時間
    trials.textbox.text各試行でのテキストボックスに表示された内容
    trials.button.numClicks各試行でのボタンのクリック回数
    trials.button.timesOnボタンが押された時間(反応時間)
    trials.button.timesOffボタンが離された時間
    participant実験に参加した参加者の識別番号
    session実験セッションの識別番号
    date実験が実行された日時
    expName実験の名称
    psychopyVersion使用されたPsychoPyのバージョン
    frameRate実験中の画面のフレームレート
    expStart実験が開始された時刻

 

 

 

3. 発展的な改修(Digit Span Test フィードバックあり)

ここまでの実験内容では、入力内容の正解/不正解のフィードバックおよびデータ出力がありませんでした。

フィードバックとデータ出力を実装するためには、カスタムコンポーネントの「Code」を使用して、少しだけPythonコードを書くことで可能です。

 

改修後の実験イメージ

 

新規Routine「feedback」を作成し、「tiral」の後ろに挿入します。

Routineエリアでfeedbackが選択されていることを確認後、Componentエリアの「Custom」>「Code」を選択します。

Nameを「feedback_code」に変更し、「Begin Routine」タブを選択します。

左側のエリアに、以下のコードをコピー&ペーストします。

# 正解/不正解を示す文字列の変数
# "correct":正解
# "incorrect":不正解
answer_result = ""

# ユーザが入力したtextboxのtextから改行・TAB・スペースを削除した値と、
# 実験設定用Excel項目のcorrect_answerを文字列に変換した値を比較
# 値が一致する場合
if textbox.text.strip() == str(correct_answer):
    # 正解/不正解を示す文字列に"correct"を代入
    answer_result = "correct"
# 値が一致しない場合
else:
    # 正解/不正解を示す文字列に"incorrect"を代入
    answer_result = "incorrect"

# 正解/不正解を示す文字列の値を実験データ(CSV)に
# 'answer_result'項目として出力
trials.addData('answer_result', answer_result)

# answer_result の内容をログに出力
# コンソールに出力
print(f"Answer Result: {answer_result}")

 

次に、回答結果を画面上にテキストとして表示するため、Componentエリアから「Stimli」→「Text」をクリックします。

Basicプロパティの値を以下の通り設定しておきます。

プロパティ
Namefeedback_text
Starttime 0.0
Stopduration 1.0 ※1秒間表示
Text$answer_result ※constant→set every repeatへの変更もお願いします。

 

データを確認し、answer_result項目が追加されていればOKです。

 

 

4. 実験導入のTips

被験者を募集して実際に実験を行う場合、主に2種類の方法があります。

  1. ローカル実行:PsychoPyを被験者の使用するPCにインストールして、配布した実験プロジェクトを実行してもらう
  2. Web実行:実験プロジェクトをWeb上に公開し、被験者にWeb上で実行してもらう
方法メリットデメリット
1. ローカル実行– ネット接続が不要で、実験の安定性が高い – Webサービスへの実験ファイルのアップロード作業が不要– 被験者にPsychoPyを実行してもらう必要があり、手間がかかる – インストール環境やOSに依存する可能性がある
2. Web実行– psychopyのインストールが不要で、Webブラウザがあればどこからでも実施可能 – デバイス(Mac・Windows)ごとに実験手順を作らなくてよい– ネットワークの遅延やブラウザの互換性問題が影響する可能性がある – 公式のWebサービスは有料である

実験開催者がPC端末を用意できない場合は、Web実行を推奨します。

無料で実行できる方法は下記URL参照。

Run PsychoPy experiments online w/ GithubPages + OSF for free }}
How to self-host PsychoPy experiments for free on Github Pages and have the data sent to OSF.io

有料で実行する方法は下記URL参照。

Launch your study on Pavlovia.org — PsychoPy v2024.2.5