@bdelab/jscat

中文文档
5.3.2发布于 2026/05/20ISCTypeScriptCommonJS构建来源已验证近 30 天下载 5247

一个支持基于IRT的JavaScript计算机适应测试的库

中文使用文档
文档目录21 节
  1. 安装
  2. 使用量
  3. 验证
  4. 验证 theta 估计和 theta 标准错误
  5. 微额供资机构算法验证
  6. 单键更改 Cat 改为 Clowder
  7. 为什么用克洛德?
  8. 向克洛德过渡
  9. 1. 单人替代 Cat 使用量
  10. 2. 使用多Zeta刺激的Corpus
  11. 3. 添加早期停止
  12. 提前停止标准组合
  13. 1. 逻辑操作
  14. 2. 停止标准类别
  15. 组合如何运作
  16. 压缩示例
  17. 4. 管理物品搬运 additionalItemsToRemove
  18. 参考资料
  19. 许可证
  20. 贡献者
  21. 引用

Test and lint Coverage Status npm version

jsCAT: JavaScript 的计算机适应测试

一个支持基于IRT的JavaScript计算机适应测试的库

安装

您可以从 npm 安装 jsCAT

npm i @bdelab/jscat

使用量

对于已有的jsCAT用户:为使您的应用程序与更新的jsCAT版本相兼容,您需要以以下方式通过刺激:

// import jsCAT
import { Cat } from '@bdelab/jscat';

// create a Cat object with MLE estimator
const cat1 = new CAT({method: 'MLE', itemSelect: 'MFI', nStartItems: 0, theta: 0, minTheta: -6, maxTheta: 6})

// create a Cat object with EAP estimator with normal distribution
const cat2 = new CAT({method: 'eap', itemSelect: 'MFI', nStartItems: 0, theta: 0, minTheta: -6, maxTheta: 6, priorDist: 'norm', priorPar: [0, 1]})

// create a Cat object with EAP estimator with unirform distribution
const cat3 = new CAT({method: 'eap', itemSelect: 'MFI', nStartItems: 0, theta: 0, minTheta: -6, maxTheta: 6, priorDist: 'unif', priorPar: [-4, 4]})

// option 1 to input stimuli:
const zeta = {[{discrimination: 1, difficulty: 0, guessing: 0, slipping: 1}, {discrimination: 1, difficulty: 0.5, guessing: 0, slipping: 1}]}

// option 2 to input stimuli:
const zeta = {[{a: 1, b: 0, c: 0, d: 1}, {a: 1, b: 0.5, c: 0, d: 1}]}

const answer = {[1, 0]}

// update the ability estimate by adding test items 
cat.updateAbilityEstimate(zeta, answer);

const currentTheta = cat1.theta;

const currentSeMeasurement = cat1.seMeasurement;

const numItems = cat1.nItems;

// find the next available item from an input array of stimuli based on a selection method

> **Note:** For existing jsCAT users: To make your applications compatible with the updated jsCAT version, you will need to pass the stimuli in the following way:

const stimuli = [{  discrimination: 1, difficulty: -2, guessing: 0, slipping: 1, item = "item1" },{ discrimination: 1, difficulty: 3, guessing: 0, slipping: 1, item = "item2" }];

const nextItem = cat1.findNextItem(stimuli, 'MFI');

验证

验证 theta 估计和 theta 标准错误

参考软件:米尔特 (Chalmers, 2012) img.png

微额供资机构算法验证

参考软件: catR (Magis等, 2017) img_1.png

克劳德用法指南

这个 Clowder 类是管理多重的强大工具 Cat 在适应性的测试情景中处理刺激性公司。 本指南概述了整合情况 Clowder 输入应用程序,并附上关键特性的示例和解释.


单键更改 Cat 改为 Clowder

为什么用克洛德?

  • 多种CAT支助: 管理多个 Cat 同时出现实例.
  • 中央公司管理: 在整个"猫"(Cats)中处理已验证和未验证的物品.
  • 高级审判管理:动态地更新"猫"并基于可配置规则取回刺激.
  • 及早停止机制:通过整合条件自动停止试验来优化测试.

向克洛德过渡

1. 单人替代 Cat 使用量

单身 Cat 示例

const cat = new Cat({ method: 'MLE', theta: 0.5 });
const nextItem = cat.findNextItem(stimuli);

克劳德等价:

const clowder = new Clowder({
  cats: { cat1: { method: 'MLE', theta: 0.5 } },
  corpus: stimuli,
});
const nextItem = clowder.updateCatAndGetNextItem({
  catToSelect: 'cat1',
});

2. 使用多Zeta刺激的Corpus

这个 Clowder 实体支持多泽塔刺激,允许每个刺激定义多猫的参数. 使用下列工具编写文书:

填充默认 Zeta 参数 :

import { fillZetaDefaults } from './corpus';

const filledStimuli = stimuli.map((stim) => fillZetaDefaults(stim));

这是什么 fillZetaDefaults? 吗? 职能 fillZetaDefaults 确保每个刺激物都有Zeta参数。 如果缺少任何参数,它会以默认的Zeta值填充.

默认值为:

export const defaultZeta = (desiredFormat: 'symbolic' | 'semantic' = 'symbolic'): Zeta => {
  const defaultZeta: Zeta = {
    a: 1,
    b: 0,
    c: 0,
    d: 1,
  };

  return convertZeta(defaultZeta, desiredFormat);
};

  • 如果未指定想要的Format, 它默认为“ symbolic ” .
  • 这确保了不同刺激之间的一致性,并避免了遗漏Zeta参数的错误.
  • 您可以通过“ 语义” 来将默认 Zeta 值转换为不同的表达式 .

验证公司:

import { checkNoDuplicateCatNames } from './corpus';
checkNoDuplicateCatNames(corpus);

特定猫的过滤刺激 :

import { filterItemsByCatParameterAvailability } from './corpus';
const { available, missing } = filterItemsByCatParameterAvailability(corpus, 'cat1');

3. 添加早期停止

整合早期停止机制以优化测试过程.

示例:在 N 项目后停止

import { StopAfterNItems } from './stopping';

const earlyStopping = new StopAfterNItems({
  requiredItems: { cat1: 2 },
});

const clowder = new Clowder({
  cats: { cat1: { method: 'MLE', theta: 0.5 } },
  corpus: stimuli,
  earlyStopping: earlyStopping,
});

提前停止标准组合

为了澄清可供早期停用的现有组合, 以下是您可以使用的选项的细分:

1. 逻辑操作

使用下列逻辑操作之一,可以合并多个停止标准:

  • and: 需要满足所有条件才能触发早停.
  • or: 任何一项条件的满足都会引发早停.
  • only:只考虑特定条件(需要指定评价的猫).

2. 停止标准类别

您可以配置不同类型的停止标准:

  • StopAfterNItems: 在指定项目数后停止进程.
  • StopOnSEMeasurementPlateau: 如果计量的标准误差(SE)对于特定数量的项目保持稳定(在定义的可容忍度范围内),则停止.
  • StopIfSEMeasurementBelowThreshold:如果SE测量值低于设定阈值,则停止.

组合如何运作

可以将这些标准与不同的逻辑操作相混合并匹配,给你一系列的配置,以便及早停止. 例如:

  • 使用 and 两者 StopAfterNItems 财务报告和审定财务报表 StopIfSEMeasurementBelowThreshold 意味着只有在两个条件都得到满足的情况下才会停止.
  • 使用 or 与 StopOnSEMeasurementPlateau 财务报告和审定财务报表 StopAfterNItems 如果符合任一条件,则允许提前停止.

压缩示例

以下是一个完整的例子,说明如何配置和使用 Clowder数字 :

import { Clowder } from './clowder';
import { createMultiZetaStimulus, createZetaCatMap } from './utils';
import { StopAfterNItems } from './stopping';

// Define the Cats
const catConfigs = {
  cat1: { method: 'MLE', theta: 0.5 }, // Cat1 uses Maximum Likelihood Estimation
  cat2: { method: 'EAP', theta: -1.0 }, // Cat2 uses Expected A Posteriori
};

// Define the corpus
const corpus = [
  createMultiZetaStimulus('item1', [
    createZetaCatMap(['cat1'], { a: 1, b: 0.5, c: 0.2, d: 0.8 }),
    createZetaCatMap(['cat2'], { a: 2, b: 0.7, c: 0.3, d: 0.9 }),
  ]),
  createMultiZetaStimulus('item2', [createZetaCatMap(['cat1'], { a: 1.5, b: 0.4, c: 0.1, d: 0.85 })]),
  createMultiZetaStimulus('item3', [createZetaCatMap(['cat2'], { a: 2.5, b: 0.6, c: 0.25, d: 0.95 })]),
  createMultiZetaStimulus('item4', []), // Unvalidated item
];

// Optional: Add an early stopping strategy
const earlyStopping = new StopAfterNItems({
  requiredItems: { cat1: 2, cat2: 2 },
});

// Initialize the Clowder
const clowder = new Clowder({
  cats: catConfigs,
  corpus: corpus,
  earlyStopping: earlyStopping,
});

// Running Trials
const nextItem = clowder.updateCatAndGetNextItem({
  catToSelect: 'cat1',
  catsToUpdate: ['cat1', 'cat2'], // Update responses for both Cats
  items: [clowder.corpus[0]], // Previously seen item
  answers: [1], // Response for the previously seen item
  additionalItemsToRemove: [clowder.corpus[3]], // Optional: Remove items without updating ability estimates
});

console.log('Next item to present:', nextItem);

// Check stopping condition
if (clowder.earlyStopping?.earlyStop) {
  console.log('Early stopping triggered:', clowder.stoppingReason);
}

4. 管理物品搬运 additionalItemsToRemove

这个 additionalItemsToRemove 参数允许您在不更新能力估计的情况下删除剩余实体中的物品。 这有助于排除不应再次提出的项目(例如,由于其他原因被跳过、标出或排除在外的项目).

关键特征 :

  • 不影响能力估计: 项目在 additionalItemsToRemove 但不帮助更新 Cat 的能力.
  • 不添加到已看到的项目: 这些项目没有在 seenItems 阵列.
  • 累计清除: 多次通话 updateCatAndGetNextItem 与 additionalItemsToRemove 将累积删除项目.

示例使用法:

// Remove items that were skipped or flagged without updating ability estimates
const nextItem = clowder.updateCatAndGetNextItem({
  catToSelect: 'cat1',
  catsToUpdate: ['cat1'],
  items: [clowder.corpus[0]], // Item that was presented and answered
  answers: [1],
  additionalItemsToRemove: [clowder.corpus[2], clowder.corpus[3]], // Items to exclude without updating ability
});

// After this call:
// - clowder.corpus[0] is in seenItems and was used to update cat1's ability
// - clowder.corpus[2] and clowder.corpus[3] are removed from remainingItems but NOT in seenItems
// - Only clowder.corpus[1] and any other items remain available for selection

通过整合 Clowder,你的应用可以高效地管理适应性的测试情景,并进行强力的试验和刺激处理,多CAT配置,以及停止条件以确保最佳性能.

参考资料

  • Chalmers, R. P. (2012年) (英语). mirt:R环境的多维项响应理论包. 统计软件杂志.

  • 马吉斯, D., & Barrada, J. R. (2017). 计算机化适应性测试与R:最近更新的包 catR. 统计软件学报, 76, 1-19.

  • Lucas Duailibe, irt-js, (2019), GitHub 寄存器, https://github.com/geekie/irt-js (英语)

许可证

jsCAT 分发于 ISC 许可证。 。 。 .

贡献者

jsCAT由Wanjing Anya Ma, Emily Judith Arteaga Garcia, Jason D. Yetman和Adam Richie-Halford提供.

引用

若您在网络应用中使用 jsCAT , 请引用 : 马, W. A., Richie-Halford, A., Burkhardt, A. K., 卡诺普卡, K., C., C., Domingue, B. W., & Yeatman, J. D. (2025). 注重成果的年度报告-CAT:利用计算机化适应性测试快速在线评估阅读能力。 行为研究方法, 57(1), 1-17. https://doi.org/10.3758/s13428-024-02578-y (中文(简体) )

@article{ma2025roar, 标题: " 通过计算机化的适应测试快速在线评估阅读能力 " , 作者:马、万京·安亚和里奇-哈尔福德、亚当和布尔克哈特、艾米克和卡诺普卡、克林特和乔、克莱门汀和多明格、本杰明·W和叶特曼、杰森·D}, 《行为研究方法》, volume57}, 号码qq1], -17页), {\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}我还没说完呢 {\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}, 出版社 \fn微软雅黑Springer} {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢

版本与发布记录

@bdelab/jscat 共发布 22 个版本,首次发布于 2022/07/28;过去 12 个月发布了 1 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
5.3.2latest2026/05/205 个月前
5.2.32025/09/301.1 年前
5.2.22025/09/171.1 年前
5.2.12025/08/201.2 年前
5.1.02025/07/151.3 年前
5.0.12025/06/271.4 年前

关于 @bdelab/jscat 的常见问题

@bdelab/jscat 是什么?

一个支持基于IRT的JavaScript计算机适应测试的库

如何安装 @bdelab/jscat?

在项目目录运行 npm install @bdelab/jscat,或使用 pnpm add / yarn add / bun add。

@bdelab/jscat 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@bdelab/jscat 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@bdelab/jscat 可以商用吗?

@bdelab/jscat 使用 ISC 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@bdelab/jscat 的下载量有多少?

根据 npm 官方下载统计,@bdelab/jscat 在 2026/10/08 – 2026/11/06 这 30 天内被下载 5,247 次,日均约 175 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@bdelab/jscat 还在维护吗?

最新版本 5.3.2 发布于 2026/05/20(5 个月前);至今共发布 22 个版本,其中过去 12 个月发布了 1 个;首次发布于 2022/07/28。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。