You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在jsPsych中实现primeWord与targetWord同步抽样及试次索引存储求助

jsPsych 双变量随机抽样与统一试次索引解决方案

核心思路

不要分别对primeWord和targetWord单独抽样,而是将两者配对成完整的试次单元后再整体随机,同时给每个单元分配统一的试次索引,从根源上解决配对错位和索引不一致的问题。

具体实现代码

1. 构造配对试次数组(基础配对场景)

如果你的primeWord和targetWord是一一对应的(比如第i个prime对应第i个target),可以直接循环生成配对试次并添加索引:

// 原始变量列表
const primeWords = ["苹果", "香蕉", "橙子", "葡萄"];
const targetWords = ["水果", "水果", "水果", "水果"];

// 生成带统一索引的配对试次数组
let trialList = [];
for (let i = 0; i < primeWords.length; i++) {
  trialList.push({
    prime: primeWords[i],
    target: targetWords[i],
    trial_index: i // 统一的试次索引,后续直接复用
  });
}

// 对试次数组进行无放回随机打乱
trialList = jsPsych.randomization.shuffle(trialList);

2. 构造全组合试次数组(完全独立抽样场景)

如果需要primeWord和targetWord的所有可能组合(完全独立抽样),用jsPsych.randomization.factorial生成全组合后添加索引:

const primeWords = ["苹果", "香蕉"];
const targetWords = ["水果", "食物"];

// 生成所有prime-target组合,同时随机打乱顺序
const trialList = jsPsych.randomization.factorial(
  { prime: primeWords, target: targetWords },
  { randomize_order: true, repetitions: 1 }
);

// 给每个组合添加统一试次索引
trialList.forEach((trial, idx) => {
  trial.trial_index = idx;
});

3. 用循环节点渲染试次并保存数据

无论哪种场景,都用timeline_variables遍历随机后的试次数组,在试次中引用变量并保存统一索引:

// 单个试次的结构
const primeTargetTrial = {
  type: jsPsychHtmlButtonResponse,
  stimulus: () => {
    const currentTrial = jsPsych.currentTimelineNode().trialData;
    return `<div>
              <p style="font-size:24px;">Prime: ${currentTrial.prime}</p>
              <p style="font-size:24px; margin-top:20px;">Target: ${currentTrial.target}</p>
            </div>`;
  },
  choices: ["确认"],
  data: () => {
    const currentTrial = jsPsych.currentTimelineNode().trialData;
    return {
      prime_word: currentTrial.prime,
      target_word: currentTrial.target,
      trial_index: currentTrial.trial_index // 保存统一试次索引
    };
  }
};

// 循环节点,遍历所有随机后的试次
const loopNode = {
  timeline: [primeTargetTrial],
  timeline_variables: trialList,
  randomize_order: false // 已提前打乱,此处无需重复随机
};

// 启动实验
jsPsych.run([loopNode]);

关键说明

  • 把prime和target绑定成一个试次单元,抽样时直接抽整个单元,彻底避免配对错位问题;
  • 提前给每个单元分配trial_index,保存数据时直接复用该值,保证prime和target对应同一索引;
  • 若需要无放回抽样,提前用jsPsych.randomization.shuffle打乱数组即可,无需额外配置。

内容的提问来源于stack exchange,提问作者Pablo Bernabeu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 10:54:37