webr v0.5.7+ 与 vite 存在兼容性问题, 暂时回退到 v0.5.6, 等待 webr 修复后再升级AI加持的在线统计分析和数据可视化软件, 立即体验: https://psychpen.leafyee.xyz
![]() |
![]() |
![]() |
|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
文档更新可能滞后于软件版本更新, 请以软件实际功能为准
如果你在学术论文中使用了 PsychPen, 请引用以下信息 (APA格式) (请注意年份和版本号区别)
v2.0.0-最新版本: 叶一杉. (2025). PsychPen: AI加持的在线统计分析和数据可视化工具 (v2.x.0) [Computer software]. GitHub. https://github.com/LeafYeeXYZ/PsychPen/tree/v2.x.0v1.9.0: 叶一杉. (2025). PsychPen: 在线统计分析和数据可视化工具 (v1.9.0) [Computer software]. GitHub. https://github.com/LeafYeeXYZ/PsychPen/tree/v1.9.0v1.0.0-v1.8.0: 叶一杉. (2024). PsychPen: 在线统计分析和数据可视化工具 (v1.x.0) [Computer software]. GitHub. https://github.com/LeafYeeXYZ/PsychPen/tree/v1.x.0PsychPen 是一个AI加持的在线统计分析和数据可视化软件. 相比于传统的心理学统计软件, PsychPen 具有以下优势:
PsychPen 有 数据、变量、绘图、统计、工具 五大主要功能模块, 以及 AI辅助分析 和 R语言运行器 (基于 WebAssembly 和 webR 项目) 两大独立辅助模块, 本文档将分别介绍它们的使用方法
数据视图包含数据导入导出功能和一些软件设置
进入 PsychPen 主页, 通过点击 点击导入数据 按钮, 选择你的数据文件 (支持 .csv, .xlsx, .dta, .parquet, .sav, .json, .numbers 等格式) 即可导入数据. 导入成功后, 你可以在数据视图中看到你的数据表格
| 导入前 | 导入后 |
|---|---|
![]() |
![]() |
导入数据后, 你可以在数据视图中查看数据表格. 点击表头可以对数据进行排序; 按住并拖动表头的竖线可以调整列宽; 按住并拖动表头单元格可以调整列的顺序. 如果在变量视图定义了数据筛选规则, 还可以点击上方漏斗图标查看当前生效的数据筛选表达式

点击左上角 导出数据 按钮, 在弹窗中输入文件名 (也可以留空) 并选择你要导出的数据格式 (支持 .csv, .xlsx, .numbers, .json), 点击 确定 即可导出数据
导出的数据是经过 定义缺失值、缺失值插值、生成标准化/中心化/离散化子变量、数据筛选 等处理后的数据, 即在数据视图实际显示的数据

点击左上角 删除数据 按钮, 在确认框中确认删除即可删除当前的数据表格. 删除数据的操作仅将数据从 PsychPen 内部移除, 不会影响到数据的原始文件. 删除后, 你可以重新导入数据 (注: 网页刷新不会使数据丢失, 必须先删除原数据才能导入新数据)

PsychPen 创新性地引入了 AI 辅助分析功能, 可以让 AI 助手基于你的数据和需求, 针对性地给出建议或直接替你操作 PsychPen 完成变量处理、统计分析和图表绘制
PsychPen 支持所有实现了 function calling 并兼容 OpenAI API 规范的大语言模型 (如 DeepSeek-V3、GPT-4o、Qwen-max), 你只需根据你所用的 AI 模型提供商的使用文档, 在右上角的 AI辅助分析设置 中点击 开启AI辅助分析 按钮, 并填写 baseUrl、apiKey、modelId 等参数, 之后点击 确认 按钮, 即可点击页面右上角的 Ask AI 按钮, 与 AI 助手进行交互

在根据2.4 AI辅助分析设置 设置好 AI 辅助分析后, 你可以点击右上角的 Ask AI 按钮, 与 AI 助手进行交互. 你可以询问它 PsychPen 的使用方法、对你的数据的见解、统计分析的建议等, 也可以直接指示它帮你操作 PsychPen 完成数据导出、变量处理、统计分析、图表绘制等操作
注: 以下所有示例操作如果使用性能更强/弱的AI模型, 可能会得到更好/差的效果
以下示例使用
qwen-plus-latest(2025.01.17更新版本) 模型

以下示例使用
qwen-plus-latest(2025.01.17更新版本) 模型

以下示例使用
deepseek-chat(deepseek-v3-0324版本) 模型

以下示例使用
qwen-plus-latest(2025.01.17更新版本) 模型

以下示例使用
qwen-plus-latest(2025.01.17更新版本) 模型
![]() |
![]() |
|---|---|
以下示例使用
qwen-plus-latest(2025.01.17更新版本) 模型

以下示例使用
deepseek-chat(deepseek-v3-0324版本) 模型
![]() |
![]() |
|---|---|
变量视图包含了一系列变量处理相关的功能
注: 变量处理的内部顺序是:
定义缺失值->缺失值插值->标准化/中心化/离散化->描述统计->数据筛选->计算变量; 变量视图所展示的信息、生成新变量所用统计量为数据筛选前的信息, 数据视图、统计视图、绘图视图所用的是数据筛选后的数据
在变量表格中, 你可以查看你导入的数据表格中的变量信息. 包括变量名、类型 (决定了能否用该变量进行一些数学运算)、缺失值情况、描述统计信息 (如均值、标准差、最大值、最小值) 等

注: PsychPen 延用 PsychLib 的计算众数的方式: 如果有多个众数, 则显示皮尔逊经验公式计算的众数 (中位数 x 3 - 均值 x 2)
通常, 在研究数据中不会直接将缺失值留空, 而是将缺失值标注为特定的值, 以便于后续的数据处理 (例如用 -1、-99、99 等值表示缺失值). 在变量视图中, 你可以点击 定义缺失值 按钮, 在此页面定义这些缺失值, 以便将它们删除或插值
在 定义缺失值 页面, 你可以选择变量 (可多选或直接选择 全部变量), 输入缺失值的值 (如果要取消定义缺失值, 可以将输入框留空), 点击 确认 按钮即可定义缺失值. 设置缺失值后, 你可以在 变量表格 中看到定义的缺失值的情况

研究中可能会因为各种原因导致数据缺失, 如果样本量较大, 直接删除缺失值是一个不错的选择; 但当实验样本比较珍贵, 或直接删除缺失值会带来误差时, 研究者往往会选择合适的插值法来将缺失值替换为有效值. 在变量视图中, 你可以点击 缺失值插值 按钮, 在此页面选择合适的插值方法, 以便将缺失值替换为有效值
在 缺失值插值 页面, 你可以选择变量 (可多选), 选择插值方法 (均值、中位数、最临近点插值、拉格朗日插值), 如果使用了后两种插值方法, 还需要选择插值参考的变量. 选择好插值方法后, 点击 确认 按钮即可进行插值. 插值处理后, 你可以在 变量表格 中看到插值的设置情况

在数据分析中, 有时需要对原始数据进行处理. 标准化是指把 x 转换为 (x - μ) / σ, 从而让数据的均值为 0, 方差为 1; 中心化是指把 x 转换为 x - μ, 从而让数据的均值为 0, 方差不变; 两种处理均不会改变数据的分布形状. 离散化是指把连续变量通过某种规则转换为离散变量, 以便于分组分析
在变量视图中, 你可以点击 中心化/标准化化/离散化 按钮, 在此页面选择变量 (可多选), 并选择一个或多个子变量; 如果选择了离散化, 你还需要选择离散化的方法 (等宽、等频、聚类分析 k-means) 和离散化的区间数. 生成子变量后, 你可以在 变量表格 和 数据 视图中看到生成的子变量
注: 生成的子变量名为
xxx_标准化、xxx_中心化、xxx_等宽离散、xxx_等频离散、xxx_聚类分析离散, 其中xxx为原变量名

数据筛选可以让你根据自己的需求, 选择性地使用满足过滤规则的数据来进行统计分析和数据可视化. 在变量视图中, 你可以点击 数据筛选 按钮, 在此页面输入过滤表达式 (见 3.7 表达式语法), 点击 确认 按钮即可生成新数据. 生成后, 你可以在 数据视图 中看到过滤后的数据 (而变量视图中的变量描述统计信息仍是过滤前数据的信息)
注意: 如果筛选所用的表达式中的任意变量为缺失值, 则该行数据会被自动过滤; 如果需要保留该行数据, 请提前进行缺失值插值

在心理学和教育学研究中, 通常需要对原始数据进行一些计算, 以得到最终用于分析的变量. 在变量视图中, 你可以点击 生成新变量 按钮, 在此页面输入计算表达式 (见 3.7 表达式语法) 和新变量名, 点击 计算 按钮并确认即可生成新变量. 生成后, 你可以在 变量表格 和 数据视图 中看到生成的新变量

在计算变量和数据筛选中, 你可以使用 PsychPen 内置的表达式语法来生成新变量或进行筛选数据. 表达式中, 你可以使用 :::变量名::: 来引用其他变量的值, 并通过 + - * / 等运算符进行计算、通过 > < >= <= 等运算符进行判断. 下面是一些常见的表达式语法示例:
( :::题目1::: + :::题目2::: + :::题目3::: + :::题目4::: + :::题目5::: ) / 5( :::题目1::: + ( 6 - :::题目2::: ) + :::题目3::: + ( 6 - :::题目4::: ) + :::题目5::: ) / 5( :::题目1::: ** 2 ) + ( Math.sqrt( :::题目2::: ) ) + ( Math.abs( :::题目3::: - :::题目4::: ) )( :::题目1::: - mean(:::题目1:::) ) / std(:::题目1:::) (仅为演示, 实际使用时推荐直接使用标准化/中心化/离散化功能)高 / 低: :::分数::: >= mean(:::分数:::) ? '高' : '低'a 大于变量 b 的数据: :::a::: > :::b:::a 大于均值的数据: :::a::: > mean(:::a:::)a 大于均值且小于中位数的数据: ( :::a::: > mean(:::a:::) ) && ( :::a::: < q2(:::a:::) )实际上, PsychPen 的表达式语法在将变量替换为其数值后, 就是一个
JavaScript表达式, 所以你可以使用JavaScript的数学函数和逻辑运算符来进行计算和判断
| 符号 | 含义 |
|---|---|
:::变量名::: |
引用其他变量的值, 会在计算时替换为指定变量的值 |
min(:::变量名:::) |
引用变量的最小值, 只适用于等距或等比数据, 注意: 小括号和 ::: 之间不要有空格 |
max(:::变量名:::) |
引用变量的最大值, 只适用于等距或等比数据, 注意: 小括号和 ::: 之间不要有空格 |
mean(:::变量名:::) |
引用变量的均值, 只适用于等距或等比数据, 注意: 小括号和 ::: 之间不要有空格 |
mode(:::变量名:::) |
引用变量的众数, 只适用于等距或等比数据, 注意: 小括号和 ::: 之间不要有空格 |
q1(:::变量名:::) |
引用变量的 25% 分位数, 只适用于等距或等比数据, 注意: 小括号和 ::: 之间不要有空格 |
q2(:::变量名:::) |
引用变量的 50% 分位数 (中位数), 只适用于等距或等比数据, 注意: 小括号和 ::: 之间不要有空格 |
q3(:::变量名:::) |
引用变量的 75% 分位数, 只适用于等距或等比数据, 注意: 小括号和 ::: 之间不要有空格 |
std(:::变量名:::) |
引用变量的标准差, 只适用于等距或等比数据, 注意: 小括号和 ::: 之间不要有空格 |
| 符号 | 含义 |
|---|---|
() |
小括号, 用于明确运算顺序; 注意: 没有中括号和大括号, 请都使用小括号 |
+ |
同数学中的加号 |
- |
同数学中的减号 |
* |
同数学中的乘号 |
/ |
同数学中的除号 |
** |
同数学中的乘方 |
% |
取余数 |
Math.abs() |
同数学中的绝对值, 如 Math.abs( :::a::: - :::b::: ) 表示变量 a 和 b 的差的绝对值 |
Math.sqrt() |
同数学中的平方根, 如 Math.sqrt( :::a::: ) 表示变量 a 的平方根 |
更多数学函数请参考 MDN Web Docs
| 符号 | 含义 |
|---|---|
() |
小括号, 用于明确运算顺序; 注意: 没有中括号和大括号, 请都使用小括号 |
> |
大于, 如 :::a::: > :::b::: |
< |
小于, 如 :::a::: < :::b::: |
>= |
大于等于, 如 :::a::: >= :::b::: |
<= |
小于等于, 如 :::a::: <= :::b::: |
== |
等于, 如 :::a::: == :::b::: |
!= |
不等于, 如 :::a::: != :::b::: |
&& |
逻辑与 (且), 如 ( :::a::: > :::b::: ) && ( :::a::: < :::c::: ) |
\|\| |
逻辑或 (或), 如 ( :::a::: > :::b::: ) \|\| ( :::a::: < :::c::: ) |
! |
逻辑非 (非), 如 !( :::a::: > :::b::: ) 相当于 :::a::: <= :::b::: |
? : |
三元运算符, 如 :::a::: > :::b::: ? 'a大于b' : 'a小于等于b' |
注意: 如果您熟悉
JavaScript, 您可能会想使用===和!==, 但为了避免一些潜在的问题, 我们建议您使用==和!=
在绘图视图中, 你可以在页面左上角选择你要绘制的图表类型, 进入对应的图表绘制页面

在基础折线图页面中, 你可以选择你要进行绘图的变量的类型 (被试内变量/被试间变量). 如果是被试内变量, 你需要选择你要进行绘图的变量 (即X轴上的不同值); 如果是被试间变量, 你需要选择你要进行检验的数据变量 (Y轴数据) 和分组变量 (X轴上的不同值). 点击 生成 按钮即可生成图片, 生成后, 点击 保存图片 按钮可以保存图片
此外, 你还可以自定义 X 轴和 Y 轴的标签、选择折线图显示的统计量、是否启用折线平滑、是否显示数据标签
| 被试内变量 | 被试间变量 |
|---|---|
![]() |
![]() |
在平行折线图页面中, 你可以选择你要进行绘图的变量, 每个选择的变量都是 X 轴上的一条竖线. 每个数据都会成为连接这些竖线的一条横向折线. 点击 生成 按钮即可生成图片, 生成后, 点击 保存图片 按钮可以保存图片
此外, 你还可以自定义每个变量的标签、折线的宽度和颜色

在堆叠折线图页面中, 你可以选择你要进行绘图的变量的类型 (被试内变量/被试间变量). 如果是被试内变量, 你需要选择你要进行绘图的变量 (即X轴上的不同值); 如果是被试间变量, 你需要选择你要进行检验的数据变量
$ claude mcp add PsychPen \
-- python -m otcore.mcp_server <graph>