# @bdelab/jscat 中文文档

规范地址：https://npmcn.com/package/%40bdelab/jscat/

版本：5\.3\.2
npm 元数据更新时间：2026-06-25T22:39:09.928Z
中文译文更新时间：2026-11-07T19:20:19.015Z
软件包许可：ISC

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40bdelab/jscat
原文对照：https://npmcn.com/package/%40bdelab/jscat/?lang=original
项目主页：https://github.com/yeatmanlab/jsCAT#readme
源码仓库：https://github.com/yeatmanlab/jsCAT

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：618 kB，55 个文件
- 模块格式：CommonJS
- TypeScript 类型：包内自带
- 运行依赖：5 个
- 首次发布：2022-07-27T19:19:19.034Z
- 最新版本发布：2026-05-19T22:56:02.213Z
- 近 30 天下载量：5247（2026-10-08 至 2026-11-06，npm 官方下载统计）
- 已发布版本数：22（近 12 个月 1 个）

## 中文简介

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

## 安装

```sh
npm install @bdelab/jscat
```

也可以使用：`pnpm add @bdelab/jscat`、`yarn add @bdelab/jscat`、`bun add @bdelab/jscat`

## README

[![Test and lint](https://github.com/yeatmanlab/jsCAT/actions/workflows/ci.yml/badge.svg)](https://github.com/yeatmanlab/jsCAT/actions/workflows/ci.yml) [![Coverage Status](https://coveralls.io/repos/github/yeatmanlab/jsCAT/badge.svg?branch=main)](https://coveralls.io/github/yeatmanlab/jsCAT?branch=main) [![npm version](https://badge.fury.io/js/@bdelab%2Fjscat.svg)](https://badge.fury.io/js/@bdelab%2Fjscat)

# jsCAT: JavaScript 的计算机适应测试

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

## 安装

您可以从 npm 安装 jsCAT

```bash
npm i @bdelab/jscat
```

## 使用量

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

```js
// 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](https://npmcn.com/package/%40bdelab/jscat/validation/plots/jsCAT_validation_1.png)

### 微额供资机构算法验证

参考软件: catR (Magis等, 2017) ![img\_1.png](https://npmcn.com/package/%40bdelab/jscat/validation/plots/jsCAT_validation_2.png)

# 克劳德用法指南

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

* * *

## 单键更改 `Cat` 改为 `Clowder`

### 为什么用克洛德?

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

* * *

## 向克洛德过渡

### 1\. 单人替代 `Cat` 使用量

#### 单身 `Cat` 示例

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

#### 克劳德等价:

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

* * *

### 2\. 使用多Zeta刺激的Corpus

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

#### 填充默认 Zeta 参数 :

```typescript
import { fillZetaDefaults } from './corpus';

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

```

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

默认值为:

```typescript
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 值转换为不同的表达式 .

#### 验证公司:

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

#### 特定猫的过滤刺激 :

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

* * *

### 3\. 添加早期停止

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

#### 示例:在 N 项目后停止

```typescript
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`数字 :

```typescript
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` 将累积删除项目.

#### 示例使用法:

```typescript
// 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 (英语)](https://github.com/geekie/irt-js)
    

## 许可证

jsCAT 分发于 [ISC 许可证](https://npmcn.com/package/%40bdelab/jscat/LICENSE)。 。 。 .

## 贡献者

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 (中文(简体) )](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 是什么？

一个支持基于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 和提交记录判断。

