| name | ace |
| description |
数据分析王牌 Skill。用于统计分析、方差分析、ANOVA、回归分析、实证分析、
DID双重差分、中介效应、调节效应、稳健性检验、工具变量、内生性、
问卷分析、SERVQUAL、Likert量表、信度检验、效度检验、因子分析、
卡方检验、描述性统计、交叉分析、相关分析、非参数检验、
正态性检验、方差齐性、效应量、ROC曲线、ICC、SEM结构方程、
机器学习、随机森林、RandomForest、XGBoost、SVM、分类模型、
预测模型、超参调优、GridSearch、Optuna、特征重要性、SHAP、
交叉验证、混淆矩阵、学习曲线、Pipeline、模型评估、
数据清洗、SPSS格式、三线表、Word报告、论文格式修改、
图表绘制、matplotlib、学术绘图、配色方案。
触发词:分析数据、做方差分析、问卷分析、清洗数据、格式修改、画图、
出报告、实证分析、回归、相关分析、信度、效度、随机森林、
机器学习、建模、调参、预测、分类、特征重要性
|
Ace — 数据分析王牌
一站式覆盖实证分析全套、统计检验、问卷分析、论文格式、学术绘图。
0.0 工作区整洁规则
- 在用户项目目录内执行
ace 任务时,所有新建分析脚本、清洗脚本、绘图脚本、临时验证脚本,默认统一放入项目内的 scripts/ 文件夹,不要直接散落在主目录。
- 若任务较大或包含多个子任务,允许在
scripts/ 下继续分支,例如:
scripts/eda/
scripts/regression/
scripts/2026-04-16_rice_quality/
- 若项目本身已经存在集中管理脚本的目录,则优先复用该目录并继续分层;若没有,则主动创建
scripts/。
- 主目录应尽量只保留数据、文稿、最终交付物和必要配置文件,避免被一次性脚本、临时调试文件污染。
- 本 Skill 自带的模板脚本仍位于 Skill 包内的
scripts/,而针对当前用户任务新生成的脚本应放在用户项目自己的集中脚本目录中。
0. 附带代码模板
-
scripts/precheck.py:环境、文件、依赖与输入前置检查
-
scripts/check_assumptions.py:正态性、方差齐性、VIF 等前置检验
-
scripts/questionnaire_pipeline.py:问卷全套流水线(清洗、描述、信度、KMO/Bartlett、EFA)
-
scripts/anova_pipeline.py:方差分析、LSD、多重比较、结果输出
-
scripts/generate_spss_syntax.py:SPSS 语法生成
-
scripts/three_line_table.py:三线表输出
-
scripts/merge_report.py:结果合并与报告装配
-
scripts/verify_report.py:报告一致性核查
-
code_library/descriptive.py / correlation.py / ttest.py / anova.py:基础统计函数
-
code_library/regression.py / did.py / mediation.py:实证分析核心函数
-
code_library/survey.py:问卷信效度、EFA、AVE/CR
-
code_library/ml_pipeline.py:机器学习基线与调参代码库
-
code_library/plot_bindent.py:学术绘图初始化、字体、配色与图模板
-
code_library/report_builder.py / word_utils.py:Word 报告写作与格式辅助
使用原则:
scripts/ 优先用于可直接运行的流水线与检查脚本
code_library/ 优先用于按需 import 的函数与片段库
- 优先复用这些入口并按任务改参数,不要每次从零重写
0.1 模板引擎与报告模板预设
-
_ace_templates/engine.py:模板装配入口,用于按预设生成结构化交付
-
_ace_templates/text_library/blocks.py:标准分析文字块库,适合问卷、信效度、相关、回归、中介等段落复用
-
_ace_templates/text_library/word_engine.py:Word 段落与格式写入辅助
-
_ace_templates/format_presets/:报告格式预设
report_delivery.json:客户交付报告
spss_mimic.json:SPSS 风格输出
thesis_songti.json:论文宋体风格
thesis_strict.json:更严格的论文格式
compact_mini.json:轻量简版
-
_ace_templates/templates/:场景化流水线模板
A1_questionnaire
A2_questionnaire_mediation
B1_cross_section
C1_anova
D1_medical
-
使用原则:
- 若任务需要“脚本 + Word 报告 + 固定格式预设”一体化交付,优先考虑
_ace_templates
- 若只是常规单次统计分析,优先复用
scripts/ 与 code_library/,避免过度模板化
0.1.1 Word 默认格式规范
- 对中文论文、分析报告、提纲、三线表配套说明等 Word 输出,默认优先使用
_ace_templates/format_presets/thesis_strict.json。
- 若用户明确要求更常见的毕业论文宋体版式,可退回
thesis_songti.json。
- 若输出内容需要直接插入现有论文的某一章/某一节,默认进入“论文章节嵌入模式”:
- 标题层级优先继承目标论文原有编号,例如
4.5、4.5.1、4.5.2
- 不保留独立报告味较重的总标题与小节标题,如
问卷数据分析报告、补充分析、开放题结果归纳
- 小节名称优先改写为能直接放入论文正文的口径,如
受访者基本情况与包裹感认知、核心情感量表检验、情感需求总结
- 默认规范如下:
- 中文标题与各级标题:
黑体、黑色、加粗
- 正文中文:
宋体
- 正文英文与数字:
Times New Roman
- 任何位置的英文和数字都必须使用
Times New Roman,包括标题中的英文、表头英文、图例、年份角标、括号中的英文单位、处理缩写(CK、GA、BR、MeJA、6-BA)和显著性字母。
- 正文:首行缩进
2 字符,1.5 倍行距,段前段后 0
- 表题:黑体;表内文字:宋体 + Times New Roman
- 禁止依赖 Word 主题字体或系统默认东亚字体,避免出现
MS Gothic、彩色标题或模板化样式污染正式文稿。
- 若用户提供学校模板、期刊模板或既有格式文件,则以用户模板优先覆盖此默认规范。
0.1.2 图表与三线表默认规范
- 正式论文图片文件本体默认不放图题,图题统一写在 Word 正文中。
- 坐标轴名称必须完整;有单位的指标必须显式写单位。
- 单指标主图默认优先使用原始均值 ± 误差;效应总览图可用相对 CK 变化百分比;综合评价图可用标准化指数。
- 中文科研图中英混排字体的稳定做法(2026-04-22 侯芳芳项目验证):
- 目标是中文用宋体,英文、数字、单位、图例、刻度、显著性标记、公式变量用 Times New Roman 正体;不要默认斜体。
- Matplotlib 直接输出 PNG 时,中英混排标签容易被单一字体吞掉;更稳流程是先输出 SVG,并设置
svg.fonttype='none',再用 svg_font_splitter.py 将中文与英文/数字拆成不同字体,最后再从修正后的 SVG 渲染 PNG。
- 若用 Chrome/Edge headless 渲染 SVG 为 PNG,必须按 SVG 原始尺寸设置截图窗口,并通过很小的
right_extra、bottom_extra 控制保留范围;不要一次性大幅扩边,也不要让截图裁掉边框、图例或坐标轴。
- 对
K_L、K_N、K_N/K_L 这类光氮分布参数,优先保证 Times New Roman 正体和大写下标 L/N;避免 mathtext 默认字体导致 DejaVu 或斜体。若使用 mathtext,必须显式设置 custom Times New Roman;若仍不稳,改用普通文本/分段绘制。
- 售后微调图件时只改用户点名的问题;若需要连带改导出方式、布局、字体方案或其它元素,必须先说明并等用户确认。
- 图例默认放在不遮挡数据的位置,优先右上角或左上角;必要时应主动调大 Y 轴范围。
- 柱状图若存在多处理比较,默认优先使用字母显著性分组,不只保留误差线。
- Word 中正式表格默认使用三线表,不使用
Table Grid 式网格表。
- 需要 Word 输出时,优先复用
scripts/three_line_table.py 或等价三线表逻辑,不要临时生成普通网格表。
- 若未被用户明确要求增加分隔线,三线表默认只保留顶线、表头下横线和底线,不额外添加中间横线、虚线或分块线。
- Word 中表格默认整体居中;若表后需要说明,表注必须紧跟对应表格下方,不得挪到正文末尾或下一张表之后。
- 对描述统计表、样本特征表、单因素比较表等分组表,默认将“变量”和“类别/组别”拆成不同列,不把变量名与类别值混在同一列;变量名默认只在该变量首行出现,后续类别行留空或按用户提供模板排版。
- 若交付的是“单一核心因变量”的单因素分析表,默认优先采用
变量 | 组别 | 例数 | 因变量均值±标准差 | t/F | P 的纵向分组样式;统计量与 P 值仅在该变量首行显示,后续组别行留空,默认对齐参考常见医学论文表格格式。
- Word 表格的“默认居中”不仅指表格对象整体居中,也指表头与单元格文字默认居中;除非用户明确要求左对齐,不要只把表框居中而把表内文字保留左对齐。
- 客户版 Word 报告中,表格、表注、结果分析之间默认顺序为:表格 → 表注 → 空一行 → 结果分析。
- 若用户明确说明“该内容要直接放到论文正文/某一章某一节”,或用户提供的论文原稿本身采用“先文后表”结构,则默认顺序应切换为:结果分析 → 表题 → 表格 → 表注。
- 论文章节嵌入模式下,表题默认采用论文口径,优先使用:
表4.1 ……分析表
表4.2 ……检验表
表4.3 ……比较分析表
- 避免使用工作底稿或独立报告味较重的命名,例如
描述统计与载荷结果、补充分析结果、开放题结果归纳
- 图表中英混排时必须逐元素指定字体:中文用
宋体/黑体,英文和数字用 Times New Roman;不得依赖系统自动回退或主题字体。
- 若交付对象是客户或外部收件人,Word/PDF 正文默认禁止出现“给内部看的元说明”,例如“本次参考截图/文献”“变量按当前字段重建”“以下为说明”“本轮修正了”等过程性文字。
- 客户版分析交付正文默认只保留:标题、表格/图、表注、结果分析、必要统计口径与直接结论;方法来源、截图参考、核查说明、版本差异等内容应写入核查日志、脚本注释或项目记录,不进入客户正文。
0.1.3 客户版交付成品自动核查清单
适用于 兼职/ 下所有需要交付 Word 报告、论文式分析说明、正式统计表或客户可见结果文档的任务。只要用户没有明确要求保留过程说明,交付前必须回看最终成品文件,而不是只检查生成脚本。
- 客户可见正文、表题、表注、文件名中默认不得出现过程化/内部化措辞,包括但不限于:
客户、本轮、当前设定、本报告、过程说明、交付、模拟、内部看的、用于本科论文、论文写作而言、按客户要求、结果整理。确需说明数据版本或模拟属性时,应放入核查日志、项目记录或单独说明文件,不混入正式正文。
- 客户可见标题、文件名、SPS/SPV/SAV/Excel/Word 成品名默认不得带内部单号、接单号、文件夹编号或我们自己的项目追踪号,例如
050201-120、042102-240、157_、XX_ 这类前缀。内部编号只允许出现在项目文件夹、progress、核查日志或内部文件清单中,不进入客户可见成品。
- 标题、文件名和表格说明默认使用研究主题或指标名称,不使用
本科论文、最终版、模拟调整版、核查版、内部单号等标签作为客户可见主标题。推荐命名如 统计分析报告.docx、问卷数据分析报告.docx、SPSS分析结果.spv、结果提取表.xlsx;若需区分主题,可写 生涯适应力影响机制分析报告.docx。
- 当客户要求“过程文件/过程结果”打包时,默认按客户可见最小集处理,不把整个项目文件夹打包。Stata/实证类任务默认包含:最终稿件、Stata 输出结果表(通常为脚本整理导出的 Excel,如
第四章实证结果.xlsx)、Stata 数据文件(整理后面板 .dta 与各表对应 .dta)。若需放脚本,只放纯数据整理、统计分析、诊断模型脚本;不得放生成 Word/PDF 报告的脚本、日志、核查日志、说明草稿、后台复现包、临时文件或含个人绝对路径的信息,除非用户明确要求。
- 样本量、频数、题项数、自由度等计数型数值默认显示为整数;百分比通常保留 2 位小数;系数、均值、标准差、Cronbach's α、KMO、CR、AVE、载荷、VIF 通常保留 3 位小数;
p 值使用 <0.001 或 3 位小数,星号必须与 p 值一致。
- 分组表、样本特征表、描述统计分块表中,重复的变量名默认只显示第一行,后续行留空;不得把同一变量名在每个类别行机械重复。
- Word 成品必须核查 A4 页面、页边距、标题黑色、正文黑色、表格整体居中、表内文字居中、单元格段前段后为 0、首行/左右缩进为 0;三线表默认只保留顶线、表头下横线和底线。
- 问卷/量表结果需核查信效度指标是否相互协调:Cronbach's α 与 CR 不应明显背离,AVE、因子载荷、KMO、Bartlett、CR 之间不能出现数学或统计逻辑矛盾;不能只把某个指标调到达标而破坏其他指标。
- 回归、中介、调节等模型结果需核查
N、变量方向、显著性、置信区间、VIF 与正文结论一致;不得出现表格支持、正文不支持或星号与 p 值不一致。
- 导出后必须用
python-docx、openpyxl、XML 检查或人工打开成品之一核对最终 .docx/.xlsx。如果目标文件被 Word 锁定,另存为清晰命名的修订文件,并在回复中说明实际成品路径。
0.2 多 Agent 分析编排
- 默认策略:条件式多 Agent,不是所有任务一开始都并行;优先遵循当前项目或全局 AGENTS.md 的多 Agent 规则。
- 触发条件:存在 2 个及以上彼此独立的子任务;或数据分析任务预计同时产出脚本、表格、报告、核查记录等多个成果;或用户明确要求多 Agent / 三省六部模式。
- 暂不并行:单文件小改、一次性问答、简单润色、几分钟可完成的小修复、强串行依赖任务,以及根因尚未定位的疑难 bug。
- 执行原则:主 Agent 先做最小必要理解和任务拆分;子 Agent 只接收边界清晰、可独立交付的检索、审查、测试或局部实现任务;多个 Worker 的写入范围必须互不重叠;派发后主 Agent 继续推进关键路径,仅在被结果卡住时等待。
一、何时触发
-
统计/实证:方差分析、ANOVA、回归、DID、中介效应、前后测
-
检验/诊断:正态性、方差齐性、相关分析、非参数检验
-
问卷/调研:Likert、SERVQUAL、信度、效度、因子分析
-
机器学习:随机森林、XGBoost、SVM、调参、特征重要性、SHAP
-
格式/输出:论文格式、三线表、页眉页码、Word报告
-
绘图:matplotlib、配色、DID系数图、误差棒、热力图、混淆矩阵、学习曲线
二、前置检验模块(任何分析前必做)
2.1 正态性检验
from scipy import stats
stat, p = stats.shapiro(data)
stat, p = stats.kstest(data, 'norm', args=(data.mean(), data.std()))
2.2 方差齐性检验
stat, p = stats.levene(group1, group2)
stat, p = stats.bartlett(group1, group2)
2.3 多重共线性诊断(回归前)
from statsmodels.stats.outliers_influence import variance_inflation_factor
vif = pd.DataFrame({
'Variable': X.columns,
'VIF': [variance_inflation_factor(X.values, i) for i in range(X.shape[1])]
})
5.6.1 AMOS 原生图自动输出(本机已验证)
- 适用场景:
- 客户明确要求 AMOS 原生风格 的测量模型图 / 路径图
- 不能接受 Python / matplotlib / draw.io 仿图
- 允许使用本机已安装的
IBM SPSS Amos 29
- 重要边界:
- 分析结果本身不是默认“顺手自动出 AMOS 图”。如果主分析最初不是在 AMOS 里跑的,而是 Python / SPSS / 其他流程跑的,则需要单独重建一份 AMOS 模型文件再导出图。
- 这条链路的核心是:先有
.amw,再让 AMOS CLI 自动计算与导出,而不是指望普通统计脚本自动附带一张 AMOS 图。
- 本机已确认可用组件:
C:\Program Files\IBM\SPSS\Amos\29\AmosGraphicsCLI.exe
C:\Program Files\IBM\SPSS\Amos\29\AmosFileManagerCLI.exe
C:\Program Files\IBM\SPSS\Amos\29\R\Amos.R
C:\Program Files\IBM\SPSS\Amos\29\Documentation\Programming Reference.pdf
- 官方
R\Amos.R 已明确暴露命令行参数思路:
-model <path-to-amw>
-plugin CalculateEstimatesAndExit.vb
- 本机实测结论:
- 直接让
CLI 跑自定义 .vb/.dll 插件并不稳定,不应作为默认主路线。
- 更稳的默认路线 是:
- 先程序化生成
.amw
- 再调用
AmosGraphicsCLI.exe -model <amw> -plugin CalculateEstimatesAndExit.vb
- 等待
AMOS 自动生成输出文件
- 若路径图已进入剪贴板,再由 PowerShell 把剪贴板中的图像落盘为
.png
5.6.2 AMOS 原生图无人工输出推荐流程
A. 准备数据文件
- 优先使用 ASCII 路径,避免中文路径导致
AMOS / Office 组件兼容问题。
- 这台机器上更稳的做法是先把数据复制到临时目录,例如:
C:\Users\16342\AppData\Local\Temp\amos_<project>\
- 数据格式优先级:
.sav
.xls
.xlsx
- 如果只有
.xlsx,而 .amw 对 Excel 读取不稳定,可先转成 .xls:
$src='C:\path\input.xlsx'
$dst='C:\path\input.xls'
$excel=New-Object -ComObject Excel.Application
$excel.DisplayAlerts=$false
$wb=$excel.Workbooks.Open($src)
$xlExcel8=56
$wb.SaveAs($dst,$xlExcel8)
$wb.Close($false)
$excel.Quit()
B. 生成 .amw 模型文件
- 若客户只要图而不是重新在
AMOS 中建模,默认可直接程序化生成 .amw。
- 实操要点:
.amw 是可编辑文本文件,本机实测编码为 UTF-16
- 可以从
C:\Program Files\IBM\SPSS\Amos\29\Examples\English\*.amw 选一个结构接近的模板
- 重点需要改的段包括:
!@!ob:对象块(矩形、椭圆、单箭头、双箭头、标题)
!@!dbname
!@!dbtype
!@!dbconnect
!@!dbtable
- 常见数据连接写法(本机样例已见官方示例):
SPSS:dbtype=2,dbconnect=SPSS
Excel 8.0:dbtype=1,dbconnect=Excel 8.0
Text:dbtype=1,dbconnect=Text
C. 用 CLI 自动计算
& 'C:\Program Files\IBM\SPSS\Amos\29\AmosGraphicsCLI.exe' `
'-model' 'C:\path\model.amw' `
'-plugin' 'CalculateEstimatesAndExit.vb'
- 这条链路本机已实测会自动生成这些原生结果文件(命名因项目而异):
*.AmosOutput
*.amp
*_output.amw
*.AmosHistory
D. 导出 AMOS 原生路径图
- 若 CLI 运行后路径图已进入剪贴板,可直接用 PowerShell 抓图并保存:
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
$img=[Windows.Forms.Clipboard]::GetImage()
if($img -ne $null){
$out='C:\path\AMOS_native.png'
$img.Save($out,[System.Drawing.Imaging.ImageFormat]::Png)
}
E. 默认决策
- 用户明确说“必须是 AMOS 画 / AMOS 原生输出”:
- 优先走
.amw + CLI + 原生导图
- 不要再拿 matplotlib 仿图替代
- 用户只要“风格像 AMOS”:
- 如果
AMOS CLI 跑通了结果文件,但剪贴板未携带图像:
- 先保留
.amw / .amp / .AmosOutput
- 再判断是否需要补一层 GUI 自动化或人工导图
- 如果用户要求“完全无人工”:
- 先明确:只有在
.amw 生成 + CLI 自动计算 + 剪贴板导图都跑通时,才能宣称彻底无人工
- 任一环未打通,都必须如实说明卡点
5.6.3 本机已验证事实(2026-04-20)
AmosGraphicsCLI.exe 能稳定吃到 -model 和 -plugin 参数
CalculateEstimatesAndExit.vb 这条官方插件名在本机可触发自动计算
- 本机已成功产出:
.AmosOutput
.amp
*_output.amw
- 本机已成功从系统剪贴板导出一张
AMOS 原生路径图为 .png
- 因此:这台机器上,AMOS 原生图的“无人工自动导出”是可行的,但前提是先准备好可用的
.amw 模型文件
三、统计分析模块
3.1 描述性统计
desc = df.describe().T
desc['median'] = df.median()
desc['skewness'] = df.skew()
desc['kurtosis'] = df.kurtosis()
3.2 相关分析
r, p = stats.pearsonr(x, y)
rho, p = stats.spearmanr(x, y)
corr_matrix = df[num_cols].corr()
绘图:相关矩阵热力图,用 plt.imshow() 或 sns.heatmap(),标注相关系数和显著性星号。
3.3 双因素方差分析(ANOVA)
工作流:
-
读取数据 → 分配受试者 ID
-
statsmodels.formula.api.ols + anova_lm(typ=2)
-
LSD 多重比较 → 紧凑字母显示(CLD)
-
三线表 Word 输出 + 结果分析段落
字母标记规则:
3.4 单因素方差分析
F, p = stats.f_oneway(g1, g2, g3)
from statsmodels.stats.multicomp import pairwise_tukeyhsd
tukey = pairwise_tukeyhsd(df['value'], df['group'])
H, p = stats.kruskal(g1, g2, g3)
3.5 t 检验全家桶
t, p = stats.ttest_ind(g1, g2, equal_var=True)
t, p = stats.ttest_ind(g1, g2, equal_var=False)
t, p = stats.ttest_rel(pre, post)
t, p = stats.ttest_1samp(data, popmean=0)
U, p = stats.mannwhitneyu(g1, g2)
W, p = stats.wilcoxon(pre, post)
stat, p = stats.friedmanchisquare(t1, t2, t3)
3.6 效应量计算
import numpy as np
def cohens_d(g1, g2):
n1, n2 = len(g1), len(g2)
pooled_std = np.sqrt(((n1-1)*np.std(g1,ddof=1)**2 + (n2-1)*np.std(g2,ddof=1)**2) / (n1+n2-2))
return (np.mean(g1) - np.mean(g2)) / pooled_std
eta_sq = ss_between / ss_total
def cramers_v(contingency_table):
chi2 = stats.chi2_contingency(contingency_table)[0]
n = contingency_table.sum().sum()
k = min(contingency_table.shape) - 1
return np.sqrt(chi2 / (n * k))
四、实证分析全套模块
4.1 OLS 回归
import statsmodels.api as sm
X = sm.add_constant(df[['x1', 'x2', 'x3']])
model = sm.OLS(df['y'], X).fit()
print(model.summary())
4.2 分层回归(Hierarchical Regression)
m1 = sm.OLS(y, sm.add_constant(controls)).fit()
m2 = sm.OLS(y, sm.add_constant(pd.concat([controls, predictors], axis=1))).fit()
m3 = sm.OLS(y, sm.add_constant(pd.concat([controls, predictors, interactions], axis=1))).fit()
4.3 Logistic 回归
from statsmodels.formula.api import logit
model = logit('y ~ x1 + x2 + x3', data=df).fit()
odds_ratios = np.exp(model.params)
conf = np.exp(model.conf_int())
4.4 有序 Logit / Probit
from statsmodels.miscmodels.ordinal_model import OrderedModel
model = OrderedModel(y, X, distr='logit').fit()
4.5 中介效应(Mediation)
from scipy import stats
n_boot = 5000
indirect_effects = []
for _ in range(n_boot):
idx = np.random.choice(len(df), len(df), replace=True)
boot_df = df.iloc[idx]
a = sm.OLS(boot_df['M'], sm.add_constant(boot_df['X'])).fit().params[1]
b = sm.OLS(boot_df['Y'], sm.add_constant(boot_df[['X','M']])).fit().params[2]
indirect_effects.append(a * b)
ci_lower, ci_upper = np.percentile(indirect_effects, [2.5, 97.5])
4.5.1 中介效应交付默认口径
- 若客户给的参考
SPV / 截图只有 c路径(X→Y)、a路径(X→M)、b+c'路径(X+M→Y) 三段回归,则默认先按 Baron & Kenny / 逐步回归口径 对齐,不要一上来强切 PROCESS。
- 若客户明确要“Bootstrap 中介效应”“间接效应置信区间”“BootLLCI / BootULCI”,或需要更规范地证明间接效应显著,再追加
PROCESS Model 4 或等价 Bootstrap 输出。
- 对客户最稳的默认交付是:逐步回归路径表 + 效应分解与Bootstrap检验表 同时保留;若客户只认传统 SPSS 表,再裁掉 Bootstrap 部分。
- 效应分解表默认列为
效应 | Effect | SE | 95%CI:总效应 c 与直接效应 c' 填回归估计的 SE 和 95%CI;间接效应 ab 填 Bootstrap SE 和 Bootstrap 95%CI;表注必须说明两类 CI 来源不同。
- 报告写法中要严格区分:总效应
c、直接效应 c'、间接效应 ab、回归 95%CI、Bootstrap 95%CI;不要用零阶相关或普通回归系数替代间接效应表述。
- 若 SPSS / PROCESS 对长变量名不稳定,先生成短别名再跑,例如
X_mean、M_mean、Y_mean;正式报告里再还原成中文变量名。
4.6 调节效应(Moderation)
df['X_W'] = df['X'] * df['W']
model = sm.OLS(df['Y'], sm.add_constant(df[['X', 'W', 'X_W']])).fit()
w_low = df['W'].mean() - df['W'].std()
w_high = df['W'].mean() + df['W'].std()
4.7 DID 双重差分
df['DID'] = df['treat'] * df['post']
model = sm.OLS(df['Y'], sm.add_constant(df[['treat', 'post', 'DID'] + controls])).fit()
4.8 工具变量 / 2SLS(内生性处理)
from linearmodels.iv import IV2SLS
model = IV2SLS(dependent=df['Y'], exog=df[controls],
endog=df['X'], instruments=df['Z']).fit()
4.9 稳健性检验
-
替换变量:换因变量/自变量度量方式
-
子样本回归:按年份/地区/规模分组
-
缩尾处理:1%/99% winsorize
-
安慰剂检验:随机生成处理组
-
PSM-DID:倾向得分匹配后再 DID
4.10 异质性分析
for subgroup in df['category'].unique():
sub_df = df[df['category'] == subgroup]
model = sm.OLS(sub_df['Y'], sm.add_constant(sub_df[X_cols])).fit()
五、问卷分析模块
5.1 标准流程
-
数据清洗:缺失值、异常值、反向计分
-
描述性统计:频率、百分比、均值±标准差
-
信度检验:Cronbach's α(总量表+各维度)
-
效度检验:KMO + Bartlett → 探索性因子分析(EFA)
-
交叉分析:卡方检验 + 列联表
-
差异分析:t 检验 / ANOVA
5.1.2 论文章节嵌入模式(问卷结果直接写入正文)
若问卷分析结果不是单独交付,而是要直接写入现有论文某一章/某一节,默认按以下口径组织:
- 先对齐目标论文的章、节、小节编号与标题风格
- 结果模块名称优先写成论文正文风格,而不是交付报告风格
- 结果分析段落默认优先放在表格之前,并使用
如表4.1所示 这类引导语
- 表号、表题需与目标章号一致,例如第4章默认使用
表4.1、表4.2
- “补充分析”“开放题结果归纳”等标题若报告味过强,应合并、改写为更贴论文的标题,如
情感需求总结
- 若用户已提供论文原稿,默认优先读取原稿中的对应章节格式,再决定最终标题、编号与表格顺序
5.1.1 兼容性 fallback
如果 factor_analyzer 与当前 scikit-learn 版本不兼容,按以下顺序降级,不要卡死在环境问题上:
- 保留
Cronbach's α
- 保留
KMO + Bartlett
- 因子载荷改用
PCA + varimax rotation 生成探索性载荷近似结果
- 在结果说明中明确写“为兼容当前环境,旋转载荷采用 PCA+varimax 近似输出”
5.2 信度检验
def cronbachs_alpha(df):
k = df.shape[1]
item_vars = df.var(axis=0, ddof=1)
total_var = df.sum(axis=1).var(ddof=1)
return (k / (k - 1)) * (1 - item_vars.sum() / total_var)
5.3 KMO & 因子分析
from factor_analyzer import FactorAnalyzer
from factor_analyzer.factor_analyzer import calculate_kmo, calculate_bartlett_sphericity
kmo_all, kmo_model = calculate_kmo(df)
chi2, p = calculate_bartlett_sphericity(df)
fa = FactorAnalyzer(n_factors=3, rotation='varimax')
fa.fit(df)
loadings = pd.DataFrame(fa.loadings_, index=df.columns)
variance = fa.get_factor_variance()
5.4 ICC 组内相关系数
import pingouin as pg
icc = pg.intraclass_corr(data=df, targets='subject', raters='rater', ratings='score')
5.5 ROC 曲线(医学/诊断)
from sklearn.metrics import roc_curve, auc
fpr, tpr, thresholds = roc_curve(y_true, y_score)
roc_auc = auc(fpr, tpr)
optimal_idx = np.argmax(tpr - fpr)
optimal_threshold = thresholds[optimal_idx]
5.6 SEM 结构方程模型(基础指南)
import semopy
model_spec = """
# 测量模型
F1 =~ x1 + x2 + x3
F2 =~ x4 + x5 + x6
# 结构模型
F2 ~ F1
"""
model = semopy.Model(model_spec)
model.fit(df)
stats = semopy.calc_stats(model)
六、论文格式模块
6.1 Word 文档字体规范
| 元素 | 中文字体 | 英文/数字字体 | 字号 |
|------|---------|-------------|------|
| 正文 | 宋体 | Times New Roman | 小四(10.5pt) |
| 标题 | 黑体 | Times New Roman | 按级别递减 |
| 表格 | 宋体 | Times New Roman | 小五(9pt) |
| 注释 | 宋体 | Times New Roman | 8pt |
| 图题 | 宋体 | Times New Roman | 8pt |
-
首行缩进:2字符(约0.74cm)
-
行距:1.5倍行距
-
字体颜色:默认黑色
6.2 三线表格式
顶粗线 ════════════════════════════
组别 │ 时间 │ 指标1 │ 指标2
栏目细线 ──────────────────────────
数据行...
虚线分隔 ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
因素均值行 + 大写字母
虚线分隔 ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
差异分析 F值 + 显著性(**/*/ ns)
底粗线 ════════════════════════════
注:小写=同组内LSD, 大写=组间LSD, **P<0.01, *P<0.05
6.3 python-docx 三线表核心代码
from docx.oxml.ns import nsdecls, qn
from docx.oxml import parse_xml
from docx.shared import Pt, Cm, RGBColor
def clear_table_borders(table):
tblPr = table._tbl.tblPr or table._tbl._add_tblPr()
borders = parse_xml(
'<w:tblBorders %s>'
'<w:top w:val="none" w:sz="0" w:space="0" w:color="auto"/>'
'<w:left w:val="none" w:sz="0" w:space="0" w:color="auto"/>'
'<w:bottom w:val="none" w:sz="0" w:space="0" w:color="auto"/>'
'<w:right w:val="none" w:sz="0" w:space="0" w:color="auto"/>'
'<w:insideH w:val="none" w:sz="0" w:space="0" w:color="auto"/>'
'<w:insideV w:val="none" w:sz="0" w:space="0" w:color="auto"/>'
'</w:tblBorders>' % nsdecls('w'))
for existing in tblPr.findall(qn('w:tblBorders')):
tblPr.remove(existing)
tblPr.append(borders)
def set_row_border(row, position, sz=12, val="single", color="000000"):
for cell in row.cells:
tc = cell._tc
tcPr = tc.tcPr or tc._add_tcPr()
borders = tcPr.find(qn('w:tcBorders'))
if borders is None:
borders = parse_xml('<w:tcBorders %s/>' % nsdecls('w'))
tcPr.append(borders)
el = parse_xml(f'<w:{position} {nsdecls("w")} w:val="{val}" w:sz="{sz}" w:space="0" w:color="{color}"/>')
existing = borders.find(qn(f'w:{position}'))
if existing is not None:
borders.remove(existing)
borders.append(el)
def set_cell_font(cell, text, font_cn='宋体', font_en='Times New Roman', size=9, bold=False):
from docx.enum.text import WD_ALIGN_PARAGRAPH
cell.text = ''
p = cell.paragraphs[0]
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
run = p.add_run(str(text))
run.font.name = font_en
run.font.size = Pt(size)
run.font.bold = bold
run.font.color.rgb = RGBColor(0, 0, 0)
rPr = run._element.find(qn('w:rPr'))
if rPr is None:
rPr = parse_xml('<w:rPr %s/>' % nsdecls('w'))
run._element.insert(0, rPr)
rFonts = rPr.find(qn('w:rFonts'))
if rFonts is None:
rFonts = parse_xml('<w:rFonts %s/>' % nsdecls('w'))
rPr.insert(0, rFonts)
rFonts.set(qn('w:eastAsia'), font_cn)
6.4 表注格式
七、学术绘图模块
7.1 全局绘图初始化(每个脚本开头必加)
核心原则:
- 不要用
rcParams['font.sans-serif'] 全局兜底中文字体
- 中英文混排时,优先逐元素指定:中文宋体/黑体,英文和数字 Times New Roman
- 默认
dpi=300,默认白底导出
- 布局优先手动控制,避免依赖
bbox_inches='tight'
最小骨架:
from plot_bindent import FONT_SONG, FONT_HEI, FONT_TNR
from plot_bindent import grouped_bar, line_with_sem, correlation_heatmap
ax.set_title('返青期', fontproperties=FONT_HEI, fontsize=11)
for label in ax.get_xticklabels() + ax.get_yticklabels():
label.set_fontproperties(FONT_TNR)
fig.savefig('output.png', dpi=300, facecolor='white')
完整实现入口:
code_library/plot_bindent.py
scripts/plot_utils.py
若任务需要图表与 Word 报告一体化交付,再联动:
_ace_templates/text_library/word_engine.py
7.2 配色方案
OKABE_ITO = ['#E69F00', '#56B4E9', '#009E73', '#F0E442',
'#0072B2', '#D55E00', '#CC79A7', '#000000']
SIG_COLORS = {
'p<0.01': '#C44E52',
'p<0.05': '#E8866A',
'ns': '#8C8C8C',
}
GROUP_COLORS = ['#4C72B0', '#DD8452', '#55A868', '#C44E52']
HEATMAP_CMAP = 'RdBu_r'
CORR_CMAP = 'coolwarm'
7.3 图表模板
字体、导出、网格线规则统一遵循 7.1 / 7.5 / 7.8,不在本节重复展开长代码。
推荐图种与用途:
- 分组柱状图 + 误差棒:组间均值比较
- 折线图 + 标准误:前后测、时间趋势
- 相关矩阵热力图:多变量相关展示
- DID 系数图:动态效应与事件研究
- ROC 曲线:医学/诊断/分类模型判别能力
最小骨架:
from plot_bindent import grouped_bar, line_with_sem, correlation_heatmap
fig, ax = grouped_bar(data, groups, categories, ylabel='得分', title='组间比较')
fig.savefig('grouped_bar.png', dpi=300, facecolor='white')
实现入口:
code_library/plot_bindent.py
scripts/plot_utils.py
使用要求:
- 图种选择先由研究问题决定,不为“好看”而堆图
- 中文/英文/数字字体规则统一遵循 7.1
- 导出规则统一遵循 7.5
7.4 显著性标注
def add_significance(ax, x1, x2, y, p_value, height=0.02):
"""在柱状图上添加显著性标注线和星号"""
if p_value < 0.001:
text = '***'
elif p_value < 0.01:
text = '**'
elif p_value < 0.05:
text = '*'
else:
text = 'ns'
y_max = y + height * (ax.get_ylim()[1] - ax.get_ylim()[0])
ax.plot([x1, x1, x2, x2], [y, y_max, y_max, y], 'k-', lw=0.8)
ax.text((x1+x2)/2, y_max, text, ha='center', va='bottom',
fontsize=8, fontproperties=FONT_TNR)
7.5 图片导出
fig.savefig('figure1.png', dpi=300,
facecolor='white', edgecolor='none')
fig.savefig('figure1_hires.tiff', dpi=300)
fig.savefig('figure1.svg')
fig.savefig('figure1.pdf')
7.6 图题格式
图题位于图下方,格式:图X <空格> 描述文字
-
字体:宋体 8pt
-
居中对齐
-
Word 中用 python-docx 添加:
fig_caption = doc.add_paragraph()
fig_caption.alignment = WD_ALIGN_PARAGRAPH.CENTER
run = fig_caption.add_run(f'图{fig_num} {caption_text}')
run.font.name = 'Times New Roman'
run.font.size = Pt(8)
7.7 学术图表字体铁律(精简版)
- 核心原则:中文字体不要靠
rcParams['font.sans-serif'] 全局兜底,优先使用 FontProperties(fname=...) 逐元素指定。
- 中文默认:宋体 / 黑体;英文与数字默认:Times New Roman。
- 刻度数字、统计量、英文缩写统一使用 TNR。
- 图例、标题、标注中若中英混排,按元素拆分设置字体,不要混用单一字体硬顶。
- 布局优先手动控制:
fig.subplots_adjust(...);导出时默认 facecolor='white'。
- 若版式依赖手工预留空白,禁止
bbox_inches='tight'。
7.8 绘图网格线规范
- 学术图表默认不加背景网格线。
- 除非用户或客户明确要求,否则不要调用
ax.xaxis.grid() / ax.yaxis.grid()。
- 保持图表背景干净,仅保留必要坐标轴线;通常隐藏
top/right spine。
- 水平条形图(
barh)尤其不要加竖向网格线。
八、结果分析写作风格
要求
-
一整段连贯文字,不按指标分列
-
默认规则:同一分析模块的结果解读应尽量合并为 1 个连续段落。除非用户明确要求分点、分段或逐指标拆写,否则不要把描述统计、相关分析、回归分析、稳健性分析等结果拆成多段模板句连排。
-
连续段落不是堆砌句子:同一段内部按“核心结果 → 补充结果 → 解释/收束”顺序组织,避免每句都以“由表X可知”“此外”“综上”机械起头。
-
首行缩进 2 字符,客观陈述
-
去 AI 味:删"值得注意的是""综合来看",统一"降低"不用"下降"
-
若交付物是正式文稿或客户版分析,在数值与结论核对完成后,默认优先再走一轮 awesome-ai-research-writing 风格润色;phd-writing / scholar-write 仅作备选或补充,重点压缩模板化句式、减少空泛过渡词、校正因果措辞,并保持统计表述与 p 值完全一致。
-
若交付物面向客户,结果分析应直接进入数据结论,不写“这里这样做是因为”“本次采用了某截图思路”“变量依据当前问卷重建”等面向内部沟通的话。
-
若交付物面向客户,默认不写“以下为说明”“本次分析采用”“参考某截图/文献”“变量按当前字段重建”等面向委托方无价值的过程句。
段落结构
-
"由表X可知" + 宏观概述哪些指标受显著影响
-
百分比描述组间差异(不逐个列均值±标准差)
-
过渡词:首个直接跟概述,中间"此外",末尾"就XX而言"
-
交互效应:差异最大/最小时间点
-
结尾"这表明..."因果总结
九、机器学习建模模块
9.1 数据预处理 Pipeline
保留信息:
- 先划分训练集/测试集,分类任务优先
stratify=y
- 数值列与分类列分流处理
- 缺失值插补、标准化、OneHot 编码要写进可复现流程
最小骨架:
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42, stratify=y
)
完整实现入口:
code_library/ml_pipeline.py
- 如需可直接运行的完整项目脚手架,优先走项目内脚本或
_ace_templates
9.2 随机森林分类
默认步骤:
- 建立
preprocessor + classifier 的 Pipeline
- 先跑随机森林基线
- 输出
Accuracy / Precision / Recall / F1 / AUC
- 若类别不平衡,优先考虑
class_weight='balanced'
完整实现入口:
code_library/ml_pipeline.py
9.3 随机森林回归
- 适合连续因变量预测
- 默认报告
R² / RMSE / MAE
- 若只做基线比较,先与线性回归或 GBDT 保持同一切分口径
完整实现入口:
code_library/ml_pipeline.py
9.4 超参调优
适用场景:
GridSearchCV:参数空间小、需要穷举
RandomizedSearchCV:参数空间大、先做粗搜
Optuna:默认推荐,效率更高
保留要求:
- 记录搜索空间
- 记录最优参数
- 记录交叉验证得分
- 若用了 Optuna,建议保留优化历史图和参数重要性图
完整实现入口:
code_library/ml_pipeline.py
9.5 交叉验证
- 模型对比时,至少报告交叉验证均值与标准差
- 不要只报一次测试集分数
- 分类任务优先分层交叉验证
完整实现入口:
code_library/ml_pipeline.py
9.6 特征重要性
默认解释顺序:
sklearn 内置重要性:最快,适合初筛
Permutation Importance:更稳健,适合正式报告
SHAP:解释性最强,适合答辩/论文/客户要求可解释性时
何时必须用 SHAP:
- 用户明确要求“解释模型”
- 需要说明单个特征如何影响预测
- 需要做论文或答辩层面的可解释性展示
完整实现入口:
code_library/ml_pipeline.py
9.7 ML 可视化模板
推荐图种:
- 特征重要性柱状图:解释 Top 特征
- 混淆矩阵:看分类错分结构
- 学习曲线:诊断过拟合/欠拟合
- 多分类 ROC:看类别层面的判别能力
默认要求:
- ML 图仍然遵循第七章的字体、导出、网格线规范
- 如果只交最小结果,优先保留:混淆矩阵 + 特征重要性图
- 若用户强调模型解释,再补 SHAP 图和学习曲线
完整实现入口:
code_library/ml_pipeline.py
- 如需统一图风格,可复用
scripts/plot_utils.py
9.8 其他常用模型(快速切换)
可切换模型:
XGBoost:通常作为随机森林之后的增强对照
SVM:特征维度高、边界复杂时可试
GBDT:树模型的轻量替代
统一要求:
- 模型对比时,统一训练/验证切分与交叉验证口径
- 不要只比单次测试集分数,至少报告交叉验证均值和波动
完整实现入口:
code_library/ml_pipeline.py
9.9 ML 交付物检查清单
十、通用规范
10.1 PowerShell 编码
$env:PYTHONUTF8="1"; & "python.exe" "script.py" 2>&1
10.2 依赖库
核心:pandas, numpy, scipy, statsmodels, openpyxl, python-docx, matplotlib
ML:scikit-learn, shap, optuna, xgboost
可选:savReaderWriter, pingouin, factor_analyzer, semopy, linearmodels
10.3 交付物检查清单
本节与“自动化分析工作流 -> Step 6. 输出交付”重复,默认以 Step 6 为准;若用户只要部分交付物,再按需求裁剪。
十一、SPSS 原生输出专项工作流 (针对挑剔客户)
11.1 环境限制与结论
由于该机器上的 SPSS 27 底层 Java 组件 Bug,无法使用 stats.exe -production silent 或任何无头模式 (Headless / Silent) 自动静默导出表单(运行时会抛出 NullPointerException 或卡死)。因此,禁止尝试在后台悄悄调 SPSS。
11.2 标准化替代方案(脑力代码化,体力手动化)
当客户明确要求提交 SPSS 原始分析过程和结果表时,必须遵循以下“代码生成+手动执行”工作流:
-
Python 生成语法:读取客户数据后,使用 Python 按照要求生成完整的 SPSS Syntax 语法脚本(.sps)。
-
.sps 默认采用 utf-8-sig + CRLF 写出;本机 SPSS 27 对中文变量名、中文路径和中文注释的兼容性以此方案最稳。
-
回归前必须按当前 .sav 实际字段核对变量名,并排除零方差哑变量。
-
手动在 SPSS GUI 中直接运行 .sps 时,导出区可保留 OUTPUT EXPORT 和 OUTPUT SAVE,不要附带大段说明文字进入 Viewer。
-
若通过 SPSS Python 接口批量生成 .spv,默认优先 OMS /DESTINATION FORMAT=SPV,因为本机已实测 SpssClient + OUTPUT SAVE 在某些回归类表上会出现“可能由更高版本创建”的伪兼容提示。
-
代码中需包含 GET DATA 来读取客户的数据文件。
-
包含各种分析命令(如 FREQUENCIES, DESCRIPTIVES, GLM 等)。
-
结尾必须附上自动导出到同目录 Excel 或 Word 的命令:
OUTPUT EXPORT
/CONTENTS EXPORT=ALL LAYERS=PRINTSETTING MODELVIEWS=PRINTSETTING
/XLSX DOCUMENTFILE='C:\\绝对路径\\导出的结果表.xlsx'
OPERATION=CREATEFILE.
-
交付语法进行验证:将这段 .sps 脚本内容交给本机操作人,在 SPSS 界面中手动打开并执行。
-
人工"一键点击":在 SPSS 中新建或打开语法文件,贴入代码,点击“运行” -> “全部”,即可完美生成无任何误差的原版结果报表。
11.3 SPV 导出双路线(2026-04-19 实测补充)
11.4 PROCESS v5 中介语法补充(2026-04-19 实测补充)
-
宏载入方式:
- 在本机 SPSS Python / 批量入口里,默认用
INSERT FILE='...\\process.sps'.
- 不要在该入口里优先用
INCLUDE '...\\process.sps'.,本机实测容易报 Cannot complete this action while the syntax is incomplete.
-
v5 语法口径:
-
不再沿用旧版 PROCESS vars = ... /y = ... /x = ... 写法;本机实测会触发 You are using outdated syntax。
-
默认改写为:
PROCESS y = Y_mean
/x = X_mean
/m = M_mean
/cov = gender age edu tenure company position
/model = 4
/boot = 5000
/seed = 20260419
/total = 1
/normal = 1
/effectsize = 1.
-
变量名限制:
PROCESS v5 在本机对变量名长度更敏感,默认按“变量名不超过 8 个字符”处理。
- 若原始变量名过长,先生成短变量名,例如
X_mean / M_mean / Y_mean,再交给 PROCESS。
-
与参考件对齐:
- 若客户给的参考
SPV 本质上是三步回归而不是 PROCESS,正式交付时应先复现 c路径、a路径、b+c'路径 三张回归表,再视需求追加 PROCESS Bootstrap 结果。
-
回归语法顺序:
REGRESSION 中的 /STATISTICS、/CRITERIA、/NOORIGIN 应放在 /DEPENDENT 前,避免 Invalid REGRESSION subcommand order 警告污染 Viewer。
11.5 问卷中介报告交付链补充
- 若同一项目需要
.sav + .sps + .spv + Word报告,默认采用“Python生成最终分析分值和 .sav -> 生成 UTF-8 BOM .sps -> SPSS Python 通过 OMS -> SPV 生成 .spv -> 从 SPSS/PROCESS 输出提取结果 -> 生成 Word 报告”的顺序。
- PROCESS 使用短变量名,推荐
X、M、Y 与短控制变量名;中文长名写入 column_labels,正式报告中再还原为中文变量名称。
- 反向题必须在写出
.sav 前处理完毕,.sav 中保存最终分析分值;同时把反向规则写入预检或结果提取表,保证 SPSS、Python、Word 三处口径一致。
- 控制变量进入 PROCESS 前应先转为哑变量并明确参照组,避免把多分类编码直接当连续变量解释。
- SPSS Python 路线下
OUTPUT EXPORT 失败不等于 .spv 失败;只要 .spv 文件生成、日志中包含 PROCESS 输出,就继续从日志或结果中提取 Total effect、Direct effect、Indirect effect(s)。解析 SPSS 数值时要兼容 -.6272 这种省略前导零的小数格式。
- Word 报告首段和表格说明按论文终稿口吻写:数字与中文量词之间不留空格,题号范围写作
第11~17题、第25~28题,不要写 288 份、28 个、第 11-17 题。
- 相关分析在 Word 正式报告中默认做相关矩阵,优先纳入所有适合做 Pearson 相关的连续变量或量表维度,例如总分、维度分、核心连续指标;优先采用下三角矩阵:对角线为
1,下三角显示 Pearson 相关系数和显著性星号,上三角留空;变量较多时用 1, 2, 3... 编号列头并在首列列出编号和变量名称,不要默认输出 变量1/变量2/r/p/N 的两两列表,除非用户明确要求长表。
- 信度与效度表使用论文常用指标符号,例如
Cronbach's α、KMO、Bartlett χ²、p;不要把代码字段名 Cronbach_alpha、Bartlett_chi2、Bartlett_p 直接暴露在 Word 正式报告中。
- 回归/中介路径表使用论文常用指标符号,例如
β、R²;不要把代码字段名 Beta、R2、Adj_R2 直接暴露在 Word 正式报告中。除非用户或模板明确要求,默认不放调整后 R²;模型拟合统计不要单独做成大量空白的“模型拟合”行,应合并到相应路径或预测变量行。
- 中介报告若需要完整呈现效应分解,可用
总效应 c / 直接效应 c' / 间接效应 ab 三行;总效应和直接效应填回归估计的 SE 与置信区间,间接效应填 Bootstrap 标准误与 Bootstrap 置信区间。客户版 Word 表格中置信区间默认合并为 95%CI 一列,并写作 [LLCI, ULCI];不要默认把 LLCI/ULCI 或 BootLLCI/BootULCI 拆成两列,除非用户明确要求保留 PROCESS 原始输出格式。表注必须说明“总效应和直接效应为回归估计,间接效应基于 Bootstrap 重复抽样”。
- Bootstrap 中介效应在客户版报告中默认表述为
Bootstrap重复抽样法 或 Bootstrap法;不要写 Bootstrap(自助法) 这类翻译腔表达。
- 人口学频数表、分组描述表、单因素比较表等含
变量 + 类别/组别 的纵向表,重复变量名默认只在首行显示一次,后续同变量类别行留空;用于统计计算、筛选和正文解读的数据表仍保留完整变量名,展示置空只作用于 Word/客户可见表格副本。
- Word 报告字体必须按中英混排处理:中文用宋体/黑体,所有英文和数字使用
Times New Roman,包括正文数字、表格数字、统计量、p值、置信区间、题号、缩写和英文术语;生成脚本中应显式设置 w:eastAsia=宋体/黑体、w:ascii=Times New Roman、w:hAnsi=Times New Roman,不要只设置 font.name='宋体'。
- Word 三线表不要依赖
Table Grid 样式再删线;应在 XML 层显式关闭左右边框和内部网格,只保留顶线、表头下线、底线,并在交付前回看成品或 XML。
- 交付前必须做五点一致性核查:
.sav 反向题与总分、.sps 变量和 PROCESS 语法、.spv 中介效应、结果提取表、Word 结论。
自动化分析工作流
当用户提出“自动分析”“跑分析”“出结果”“全套分析”等请求时,默认启用以下 6 步固定流程。该流程适用于问卷分析、描述统计、相关分析、ANOVA、回归、DID、基础机器学习与常见实证任务。
触发词
默认原则
- 优先复用当前技能包中已有实现入口,不从零重写分析主流程:
- 先运行
scripts/precheck.py,确认依赖、字体、输入文件和输出目录都可用
- 前置检验:
scripts/check_assumptions.py
- 问卷分析:
scripts/questionnaire_pipeline.py / code_library/survey.py
- 方差分析:
scripts/anova_pipeline.py / code_library/anova.py
- 回归 / DID / 中介:
code_library/regression.py / code_library/did.py / code_library/mediation.py
- 机器学习:
code_library/ml_pipeline.py
- 只有当现有模板无法覆盖任务时,才允许做最小范围补丁或增加薄封装。
- 中介、调节、被调节中介默认先用
Bootstrap 500 ~ 1000 调试,最终交付再升到 5000。
- 每次分析结束后,必须执行 Step 5 结果核查。
- 如果 Step 5 发现问题,必须自动回溯到 Step 4 修正;必要时可回溯到 Step 2 或 Step 3,最多回溯
2 次。
- 最终固定交付 4 类结果:终端摘要 + Excel 统计表 + Word 三线表报告 + 核查日志。
Step 1. 探查数据
- 识别文件类型、工作表、变量名、编码方式、缺失值、异常值、样本量和量表范围。
- 判断数据属于:问卷原始数据、问卷汇总表、实验/面板数据、分类/回归建模数据。
- 识别因变量、自变量、分组变量、控制变量、题项维度、反向题和主键字段。
- 若只有汇总表而无原始明细,明确标注可做与不可做的分析边界。
Step 2. 选方法
- 基于数据结构自动选择最合适的方法,不堆砌分析。
- 优先映射到现有实现入口:
- 前置检验 ->
scripts/check_assumptions.py
- 问卷流水线 ->
scripts/questionnaire_pipeline.py 或 code_library/survey.py
- 方差分析 ->
scripts/anova_pipeline.py 或 code_library/anova.py
- 描述/相关 ->
code_library/descriptive.py + code_library/correlation.py
- OLS/Logit/分层回归 ->
code_library/regression.py
- DID/面板/2SLS ->
code_library/did.py
- 中介 ->
code_library/mediation.py
- 机器学习 ->
code_library/ml_pipeline.py
- 如果任务跨多个模块,按“描述 -> 检验 -> 主模型 -> 稳健性/补充分析”顺序组织。
- 选定方法后,要同步确定输出表格口径、显著性标记规则和图表口径。
Step 3. 前置检验
- 在正式分析前,按方法执行必要检验:
- 问卷/量表:反向题处理、量表汇总、信度、可选 KMO/Bartlett
- 均值比较:正态性、方差齐性、组间样本量检查
- 回归:缺失机制、异常值、多重共线性、变量编码、必要的稳健标准误
- DID/面板:主键唯一性、时间字段、处理组/对照组标记、政策时点正确性
- 机器学习:标签分布、训练/验证切分、特征泄漏检查
- 前置检验不通过时,不直接输出结论,先修正数据或切换到更合适的方法。
Step 4. 执行分析
- 优先直接运行或小幅改造现有模板脚本,不重新发明主逻辑。
- 结果至少应包含:
- 关键统计量
- 显著性结果
- 结果表格
- 必要图表或模型诊断信息
- 需要多模型时,保持变量命名、样本口径、显著性标记和导出格式一致。
Step 5. 结果核查
每次分析完成后必须自动运行核查清单,并写入核查日志。核查至少包括以下 5 类:
- 数值合理性
- 均值是否落在量表范围内
- 标准差、比例、系数、概率值是否存在明显越界或不可能值
- 反向题处理后是否仍出现方向异常
- 方向一致性
- 系数方向是否符合理论预期或题意
- 反向题、负向指标、反向编码变量的解释方向是否一致
- 图表、正文、表格中的方向表述是否一致
- 若零阶相关方向与控制后回归方向不一致,正文必须以对应模型结果为准,不得沿用相关分析方向
- 完整性校验
N 是否前后一致
- 频数合计是否等于样本量
- 百分比是否加总到
100%,若存在四舍五入误差需注明
- 分组样本量、回归样本量、有效样本量是否对得上
- 显著性一致性
- 星号标记与
p 值是否一一对应
- 置信区间、标准误、t/z/F/卡方值与显著性结论是否冲突
- 表格、图注、正文中的显著性结论是否一致
- 客户可见版格式与口吻
- 按
0.1.3 客户版交付成品自动核查清单 扫描最终 Word/Excel/Markdown,而不是只看脚本。
- 正文、表题、表注和文件名不得残留内部过程词、版本说明词或“给客户/给本科论文用”的交付备注。
- 计数型数值必须显示为整数,重复变量名默认仅首行显示,表格居中、无异常缩进、无主题色或高亮残留。
若核查失败:
- 第一次失败:回溯到 Step 4 修正分析或导出逻辑,然后重新核查。
- 第二次失败:允许回溯到 Step 2 或 Step 3,调整方法或前置处理后重跑。
- 最多回溯
2 次;若仍失败,停止自动定稿,明确列出未通过项与建议人工复核点。
Step 6. 输出交付
默认输出以下 4 项:
- 终端摘要
- 用简洁文字汇总样本量、方法、核心结果、显著性与一句话结论。
- Excel 统计表
- 输出描述统计表、相关矩阵、ANOVA 表、回归表、模型评估表等可复用结果表。
- Word 三线表报告
- 输出适合论文/结题材料的三线表和结果解读段落。
- 若报告含样本特征表、描述统计表或单因素比较表,默认优先采用“变量列 + 类别列”拆分结构,再补频数/百分比或均值±标准差等统计列,不把变量名与类别标签塞进同一列。
- 结果解读段落默认按“每个模块 1 个连续段落”生成,不拆成多段模板化短句。
- 若用于正式提交或老师审阅版,默认在导出前补一轮写作润色,优先消除模板痕迹、过度分段和 AI 味表述。
- 核查日志
- 单独记录核查项目、是否通过、发现的问题、修正动作、回溯次数和最终状态。
执行约束
- 没有完成 Step 5 核查前,不得宣称“分析完成”。
- 没有生成核查日志前,不得交付最终版结果。
- 如果用户只给汇总表,必须先说明只能做描述性与汇总级分析,不能伪造原始数据层面的显著性检验。
版本历史
| 版本 | 日期 | 变更 |
|---|
| v6.10 | 2026-04-25 | 新增客户版交付成品自动核查清单:内部过程词扫描、客户可见命名、N/频数整数化、重复变量名首行显示、Word 表格缩进与信效度指标协调性核查 |
| v6.9 | 2026-04-21 | 补充“论文章节嵌入模式”规则:结果直接插入现有论文时,标题层级继承原章号;表题改用 表4.1 ……分析表/检验表 口径;当用户或论文原稿采用先文后表时,默认顺序切换为“结果分析 → 表题 → 表格 → 表注” |
| v6.8 | 2026-04-20 | 新增本机已验证的 AMOS 原生图自动输出工作流:.amw 生成、CLI 自动计算、剪贴板原生导图、适用边界与回退策略 |
| v6.7 | 2026-04-19 | 补充客户版描述统计/样本特征/单因素比较表格式:变量与类别默认分列,变量名仅首行显示;表格居中默认同时包含表框与单元格文字居中 |
| v6.6 | 2026-04-19 | 补充客户版 Word 交付铁律:三线表默认只保留三条线、表格整体居中、表注紧跟表格下方;客户版结果分析禁放元说明;默认写作技能切换为 awesome-ai-research-writing |
| v6.5 | 2026-04-17 | 强化结果写作规则:同一分析模块默认输出连续段落;正式交付前默认补一轮 phd-writing / scholar-write 风格润色 |
| v6.4 | 2026-04-16 | 清理乱码与错位章节;引入模板引擎说明;统一图表导出规则并去除与 bbox_inches='tight' 的冲突示例 |
| v6.3 | 2026-04-15 | 新增多 Agent 分析编排(轻量三省六部版)与数据分析双产物默认并行触发规则 |