Skip to content

Commit a18b42b

Browse files
committed
feat: 计算Omega系数现在可以在本地进行
1 parent 907351c commit a18b42b

21 files changed

+86
-337
lines changed

README.md

Lines changed: 2 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,6 @@
2727
- [2 数据视图](#2-数据视图)
2828
- [2.1 数据导入](#21-数据导入)
2929
- [2.2 数据预览/导出/删除](#22-数据预览导出删除)
30-
- [2.3 R语言服务器设置](#23-r语言服务器设置)
31-
- [2.3.1 直接拉取镜像运行R语言服务端 (推荐)](#231-直接拉取镜像运行r语言服务端-推荐)
32-
- [2.3.2 本地构建和运行R语言服务端镜像](#232-本地构建和运行r语言服务端镜像)
33-
- [2.3.3 直接运行R脚本启动R语言服务器](#233-直接运行r脚本启动r语言服务器)
3430
- [2.4 AI辅助分析设置](#24-ai辅助分析设置)
3531
- [2.5 AI助手使用示例](#25-ai助手使用示例)
3632
- [2.5.1 让AI助手操作数据导出](#251-让ai助手操作数据导出)
@@ -116,7 +112,7 @@ PsychPen 是一个AI加持的在线统计分析和数据可视化软件. 相比
116112
- **功能丰富**: 具有统计分布动态抽样演示、统计量与P值转换、交互式3D图表、词云图等独特功能
117113
- **开源免费**: PsychPen 是开源项目, 你可以在遵守开源协议的前提下自由使用、修改、分发, 也欢迎你参与到项目的开发中
118114

119-
PsychPen 有 `数据``变量``绘图``统计``工具` 五大主要功能模块, 以及 `AI辅助分析``R语言服务器` 两大独立辅助模块, 本文档将分别介绍它们的使用方法
115+
PsychPen 有 `数据``变量``绘图``统计``工具` 五大主要功能模块, 以及 `AI辅助分析``R语言运行器` (基于 `WebAssembly``webR` 项目) 两大独立辅助模块, 本文档将分别介绍它们的使用方法
120116

121117
## 2 数据视图
122118

@@ -146,66 +142,6 @@ PsychPen 有 `数据`、`变量`、`绘图`、`统计`、`工具` 五大主要
146142

147143
![](readme/data-5.png)
148144

149-
### 2.3 R语言服务器设置
150-
151-
**注: 本节内容需要一些编程基础, 不设置R语言服务器不会影响 PsychPen 的正常使用**
152-
153-
由于 `JavaScript` 的相关统计库较少, 作者基于 `Docker``R` 开发了一个简单的服务端, 用于为 PsychPen 提供执行 `R` 脚本的接口 (当前仅用于计算信度 Omega 系数). 在部署R语言服务器 (见下文) 后, 你可以在右上角点击 `R语言服务器设置` 按钮, 在此页面点击 `开启R语言服务器`, 输入服务端地址和密码, 即可使用相关高级统计分析功能
154-
155-
![](readme/data-6.png)
156-
157-
你可以使用以下三种方式之一部署R语言服务端:
158-
159-
> 请注意, `Safari` 浏览器可能会阻止 `localhost` 的请求, 在本地部署服务端时, 如果遇到 `CORS` 问题, 请使用 `Chrome` 浏览器
160-
161-
#### 2.3.1 直接拉取镜像运行R语言服务端 (推荐)
162-
163-
```bash
164-
# 如果你的电脑是 arm64 架构
165-
docker run -d -p 8000:8000 leafyee/psych-pen-api:v1.0.1-arm64 # 密码默认为 psychpen
166-
# 如果你的电脑是 amd64 架构
167-
docker run -d -p 8000:8000 leafyee/psych-pen-api:v1.0.1-amd64 # 密码默认为 psychpen
168-
169-
# 访问接口
170-
curl http://localhost:8000/execute -X POST -d '{"password": "psychpen", "code": "1 + 1"}'
171-
172-
# 如果你想自定义密码
173-
docker run -d -p 8000:8000 -e PSYCH_PEN_API_PASSWORD=xxx leafyee/psych-pen-api:v1.0.1-arm64
174-
```
175-
176-
#### 2.3.2 本地构建和运行R语言服务端镜像
177-
178-
```bash
179-
# 进入服务端目录
180-
cd ./server
181-
# 构建镜像
182-
docker build -t psych-pen-api . # 构建为当前架构的镜像
183-
docker build --platform linux/arm64 -t psych-pen-api . # 构建为 linux/arm64 架构的镜像
184-
docker build --platform linux/amd64 -t psych-pen-api . # 构建为 linux/amd64 架构的镜像
185-
# 运行容器
186-
docker run -d -p 8000:8000 psych-pen-api
187-
188-
# 访问接口
189-
curl http://localhost:8000/execute -X POST -d '{"password": "xxx", "code": "1 + 1"}'
190-
191-
# 如果你想自定义密码
192-
docker run -d -p 8000:8000 -e PSYCH_PEN_API_PASSWORD=xxx psych-pen-api
193-
```
194-
195-
#### 2.3.3 直接运行R脚本启动R语言服务器
196-
197-
```bash
198-
# 进入服务端目录
199-
cd ./server
200-
# 安装依赖
201-
R -e "install.packages('plumber')"
202-
# 运行服务
203-
R -e "library(plumber);pr <- plumb('api.R');pr$run(host='0.0.0.0', port=8000)"
204-
205-
# 访问接口
206-
curl http://localhost:8000/execute -X POST -d '{"password": "xxx", "code": "1 + 1"}'
207-
```
208-
209145
### 2.4 AI辅助分析设置
210146

211147
PsychPen 创新性地引入了 AI 辅助分析功能, 可以让 AI 助手基于你的数据和需求, 针对性地给出建议或直接替你操作 PsychPen 完成变量处理、统计分析和图表绘制
@@ -660,12 +596,10 @@ Pearson 相关检验用于检验两组数据之间的线性相关性. 在 Pearso
660596

661597
#### 5.6.3 同质性信度
662598

663-
如果各个题目是测量同一心理特质, 则各个题目得分间相关越高则信度越好; 同质性信度即是各个题目与总分的相关系数, 常用 alpha 系数表示 (应用中, alpha 的值至少要大于0.5, 最好能大于0.7), 近期也有越来越多的研究使用 omega 系数. 在本页面中, 你可以选择量表的所有题目, 点击 `计算` 按钮即可进行同质性信度检验
599+
如果各个题目是测量同一心理特质, 则各个题目得分间相关越高则信度越好; 同质性信度即是各个题目与总分的相关系数, 常用 alpha 系数表示 (应用中, alpha 的值至少要大于0.5, 最好能大于0.7), 近期也有越来越多的研究使用 omega 系数. 在本页面中, 你可以选择量表的所有题目, 点击 `计算` 按钮即可进行同质性信度检验, 可以同时计算 alpha 系数和 omega 系数.
664600

665601
你还可以选择分组变量, 以便对不同分组的数据进行信度检验
666602

667-
如果需要计算 omega 系数, 请先在数据视图的 `R语言服务器` 设置中启用 `R语言服务器` 功能
668-
669603
![](readme/stat-14.png)
670604

671605
### 5.7 中介效应分析

README_FOR_AI.md

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
## 项目简介
88

9-
PsychPen 是一个AI加持的在线统计分析和数据可视化软件, 有 `数据``变量``绘图``统计``工具` 五大主要功能模块, 以及 `AI辅助分析``R语言服务器` 两大独立辅助模块. 相比于传统的心理学统计软件, PsychPen 具有无需下载安装、跨平台、初学者友好、与AI深度集成、功能丰富、开源免费等优势
9+
PsychPen 是一个AI加持的在线统计分析和数据可视化软件, 有 `数据``变量``绘图``统计``工具` 五大主要功能模块, 以及 `AI辅助分析``R语言运行器` (基于 `WebAssembly``webR` 项目) 两大独立辅助模块. 相比于传统的心理学统计软件, PsychPen 具有无需下载安装、跨平台、初学者友好、与AI深度集成、功能丰富、开源免费等优势
1010

1111
> 注: 本应用的所有显著性标注 \* 均表示 P < 0.05, \*\* 表示 P < 0.01, \*\*\* 表示 P < 0.001
1212
@@ -18,8 +18,6 @@ PsychPen 是一个AI加持的在线统计分析和数据可视化软件, 有 `
1818

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

21-
此外, 由于 `JavaScript` 的相关统计库较少, 作者基于 `Docker` 开发了一个的R语言服务器, 用于为 PsychPen 提供执行 `R` 脚本的接口. 也可以在数据视图的右上角设置 (详见完整文档).
22-
2321
## 变量视图
2422

2523
变量视图包含了一系列变量处理相关的功能

biome.json

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"$schema": "https://biomejs.dev/schemas/2.1.2/schema.json",
2+
"$schema": "https://biomejs.dev/schemas/2.2.0/schema.json",
33
"vcs": {
44
"enabled": true,
55
"clientKind": "git",
@@ -12,26 +12,24 @@
1212
"recommended": true,
1313
"complexity": {
1414
"noForEach": "error",
15-
"useWhile": "error"
15+
"useWhile": "error",
16+
"noImportantStyles": "off"
1617
},
1718
"correctness": {
1819
"useExhaustiveDependencies": "error",
1920
"useHookAtTopLevel": "error",
2021
"useImportExtensions": "error",
22+
"noGlobalDirnameFilename": "error",
23+
"noNestedComponentDefinitions": "error",
24+
"noSolidDestructuredProps": "error",
25+
"noProcessGlobal": "error",
26+
"noReactPropAssignments": "error",
27+
"useUniqueElementIds": "error",
2128
"useJsxKeyInIterable": "error"
2229
},
2330
"nursery": {
24-
"noDestructuredProps": "error",
25-
"noGlobalDirnameFilename": "error",
2631
"noImportCycles": "error",
27-
"noNestedComponentDefinitions": "error",
28-
"noProcessGlobal": "error",
29-
"noReactPropAssign": "error",
30-
"noUselessEscapeInString": "error",
31-
"useAdjacentGetterSetter": "error",
32-
"useConsistentObjectDefinition": "error",
33-
"useExhaustiveSwitchCases": "error",
34-
"useUniqueElementIds": "error"
32+
"useExhaustiveSwitchCases": "error"
3533
},
3634
"performance": {
3735
"useTopLevelRegex": "error"
@@ -41,11 +39,14 @@
4139
"noParameterAssign": "error",
4240
"useBlockStatements": "error",
4341
"useSelfClosingElements": "error",
42+
"useGroupedAccessorPairs": "error",
43+
"useConsistentObjectDefinitions": "error",
4444
"useSingleVarDeclarator": "error",
4545
"useNumberNamespace": "error"
4646
},
4747
"suspicious": {
48-
"noVar": "error"
48+
"noVar": "error",
49+
"noUnknownAtRules": "off"
4950
}
5051
}
5152
},

bun.lockb

25.6 KB
Binary file not shown.

package.json

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@
3636
"@psych/sheet": "npm:@jsr/psych__sheet",
3737
"ag-grid-community": "^33.3.2",
3838
"ag-grid-react": "^33.3.2",
39-
"antd": "^5.26.7",
40-
"bowser": "^2.11.0",
39+
"antd": "^5.27.0",
40+
"bowser": "^2.12.0",
4141
"echarts": "^6.0.0",
4242
"echarts-gl": "^2.0.9",
4343
"echarts-stat": "^1.2.0",
@@ -49,25 +49,26 @@
4949
"marked": "^15.0.12",
5050
"marked-katex-extension": "^5.1.5",
5151
"ml-kmeans": "^6.0.0",
52-
"openai": "^5.12.0",
52+
"openai": "^5.12.2",
5353
"react": "^19.1.1",
5454
"react-dom": "^19.1.1",
5555
"react-error-boundary": "^6.0.0",
56+
"webr": "^0.5.4",
5657
"zod": "^3.25.76",
5758
"zustand": "^5.0.7"
5859
},
5960
"devDependencies": {
60-
"@biomejs/biome": "^2.1.3",
61-
"@tailwindcss/vite": "^4.1.11",
62-
"@types/bun": "^1.2.19",
63-
"@types/react": "^19.1.9",
61+
"@biomejs/biome": "^2.2.0",
62+
"@tailwindcss/vite": "^4.1.12",
63+
"@types/bun": "^1.2.20",
64+
"@types/react": "^19.1.10",
6465
"@types/react-dom": "^19.1.7",
6566
"@vitejs/plugin-react": "^4.7.0",
6667
"babel-plugin-react-compiler": "19.1.0-rc.2",
6768
"commit-and-tag-version": "^12.5.2",
68-
"tailwindcss": "^4.1.11",
69+
"tailwindcss": "^4.1.12",
6970
"typescript": "^5.9.2",
70-
"vite": "^7.0.6"
71+
"vite": "^7.1.2"
7172
},
7273
"commit-and-tag-version": {
7374
"types": [

readme/data-6.png

-127 KB
Binary file not shown.

server/Dockerfile

Lines changed: 0 additions & 20 deletions
This file was deleted.

server/api.R

Lines changed: 0 additions & 55 deletions
This file was deleted.

src/components/data/ConfigR.tsx

Lines changed: 0 additions & 59 deletions
This file was deleted.

src/components/data/PreviewData.tsx

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import {
2-
CloudServerOutlined,
32
CommentOutlined,
43
DeleteOutlined,
54
FilterOutlined,
@@ -19,7 +18,6 @@ import { sleep } from '../../lib/utils.ts'
1918
import type { DataRow } from '../../types.ts'
2019
import { Expression } from '../widgets/Expression.tsx'
2120
import { ConfigAI } from './ConfigAI.tsx'
22-
import { ConfigR } from './ConfigR.tsx'
2321

2422
/** 可导出的文件类型 */
2523
const EXPORT_FILE_TYPES = Object.values(ExportTypes)
@@ -178,20 +176,6 @@ export function PreviewData() {
178176
>
179177
<Button icon={<CommentOutlined />}>AI辅助分析设置</Button>
180178
</Popover>
181-
<Popover
182-
title={
183-
<span>
184-
R语言服务器设置{' '}
185-
<Popover content='详见使用文档或询问 AI 助手'>
186-
<InfoCircleOutlined />
187-
</Popover>
188-
</span>
189-
}
190-
trigger={['click', 'hover']}
191-
content={<ConfigR />}
192-
>
193-
<Button icon={<CloudServerOutlined />}>R语言服务器设置</Button>
194-
</Popover>
195179
</div>
196180
</div>
197181
{/* 数据表格 */}

0 commit comments

Comments
 (0)