# Amos Sem Workflow

> AMOS 结构方程建模（SEM）一条龙工作流助手，覆盖从原始问卷数据到论文成文的完整链路：数据清洗（缺失值、异常值、反向计分、Mahalanobis 距离）→ 进入 AMOS 前的"达标预检验"（样本量与 N:p 比、正态性偏度峰度、Little's MCAR、Harman 单因子共同方法偏差、Cronbach's α、KMO 与 Bartlett、EFA、CR 组合信度、AVE 收敛效度、√AVE 与 HTMT 区分效度、VIF 多重共线性）→ AMOS 自动绘图（用 AmosGraphics Plugin 的 VB.NET 代码自动画 CFA/SEM 路径图，自动命名误差项与潜变量、自动画协方差）→ 自动分析（AmosEngine 脚本化建模与估计，免手动点击）→ 模型评估（χ²/df、CFI、TLI、IFI、RMSEA、SRMR、GFI 等拟合指标；修正指数 MI；模型比较）→ 中介与调节效应（Bootstrap 偏差校正置信区间、多群组分析、潜变量交互）→ 结果的 APA 格式文字撰写。触发词包括 AMOS、结构方程、SEM、验证性因子分析、CFA、路径分析、中介效应、调节效应、Bootstrap、拟合指标、模型修正、修正指数、MI、组合信度、AVE、区分效度、共同方法偏差、多群组、AmosEngine、Amos 插件、自动绘图、问卷数据分析。

- Skill: `maydengximin-sketch/amos-sem-workflow` (Agent Skill, multi-file: 10 files)
- Install (CLI): `npx skillmds@latest add maydengximin-sketch/amos-sem-workflow`
- Raw SKILL.md: https://api.skillmd.com/api/skills/maydengximin-sketch/amos-sem-workflow/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Productivity
- Author: maydengximin-sketch (https://skillmd.com/u/maydengximin-sketch)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/maydengximin-sketch/amos-sem-workflow

---


# AMOS SEM 一条龙工作流

## 核心姿态

大多数人做 AMOS 的顺序是错的：**先画图跑模型，跑不出来再回头查数据。**

正确的顺序是——**在进 AMOS 之前，先做一遍"达标预检验"。**

数据不达标就进 AMOS，你会遇到：模型不收敛、载荷是负的、拟合指标怎么修都不过、Heywood case（负误差方差）。然后你就会开始"修正指数疯狂加路径"——这是审稿人一眼就能看出来的数据操纵。

**这个 skill 的第一原则：把关口前移。**

不要承诺"跑一遍就能发表"。不要用修正指数把模型硬拗到拟合。**拟合好但没有理论支撑的模型，一文不值。**

---

## 五个阶段

```
① 数据清洗
      ↓
② 达标预检验  ← 关键关口。不达标不许进 AMOS
      ↓
③ AMOS 自动绘图（Plugin）+ 自动分析（AmosEngine）
      ↓
④ 模型评估与修正 · 中介/调节/多群组
      ↓
⑤ APA 格式结果撰写
```

---

## ① 数据清洗

| 步骤 | 做什么 | 判定 |
|---|---|---|
| 反向计分 | 先做，别忘了 | 反向题必须转换后再算 α |
| 缺失值 | 检查缺失比例与模式 | < 5% 可处理；做 **Little's MCAR 检验** |
| 单变量异常 | 标准化后 \|z\| > 3.29 | 逐个核查，不要无脑删 |
| 多变量异常 | **Mahalanobis D²**，p < .001 | 删除需说明理由与数量 |
| 无效样本 | 规律作答、极短作答时间、全选同一选项 | 事先定规则 |

> 详见 `references/01-data-cleaning.md`

---

## ② 达标预检验（进 AMOS 前必过的关）

**这是整个工作流最有价值的一步。** 逐项检查，任何一项不达标 → **回去修数据/修量表，不要进 AMOS。**

| # | 检验 | 常用标准 | 不达标怎么办 |
|---|---|---|---|
| 1 | **样本量** | N ≥ 200；**N : 待估参数 ≥ 5:1（理想 10:1）** | 继续收数据 / 简化模型 |
| 2 | **正态性** | \|偏度\| < 2~3，\|峰度\| < 7~8 | 严重偏离 → **Bootstrap ML** 或稳健估计 |
| 3 | **共同方法偏差** | Harman 单因子：第一因子 < 40% | 加 CLF 潜在共同方法因子检验 |
| 4 | **信度** | Cronbach's α ≥ .70 | 删题（看 CITC < .30） |
| 5 | **EFA 适合性** | **KMO ≥ .70**，Bartlett **p < .001** | 不适合做因子分析 → 检查量表 |
| 6 | **收敛效度** | 标准化载荷 ≥ .50（最好 ≥ .70）；**CR ≥ .70**；**AVE ≥ .50** | 删低载荷题项 |
| 7 | **区分效度** | **√AVE > 该因子与其他因子的相关**；或 **HTMT < .85** | 合并因子 / 重新界定构念 |
| 8 | **多重共线性** | VIF < 5；因子间相关 < .85 | 合并或删除 |

> **关键认知**：CR 和 AVE 要在 **CFA 之后**用标准化载荷算，但载荷太低的题项在 EFA 阶段就该发现。
> **不要**把不达标的数据硬塞进 AMOS，然后用 MI 加路径去救——救不回来，还会被审稿人抓住。

> 详见 `references/02-readiness-checks.md`（含每个指标的公式与 SPSS/Python 操作）

---

## ③ AMOS 自动化

AMOS 支持 **.NET 编程接口**，有两条自动化路线：

### 路线 A：AmosEngine —— 脚本化建模与估计（不用画图）

```vb
Dim Sem As New AmosEngineLib.AmosEngine
Sem.TextOutput()
Sem.Standardized()          ' 标准化解
Sem.Smc()                   ' R²
Sem.Bootstrap(2000)         ' Bootstrap
Sem.ConfidenceBC(90)        ' 偏差校正置信区间（中介必备）

Sem.BeginGroup("data.sav")
Sem.AStructure("X1 = (1) F1 + (1) e1")
Sem.AStructure("X2 =     F1 + (1) e2")
Sem.AStructure("Y  =     F1 + (1) e3")
Sem.Dispose()
```

- 适合：**批量跑模型、可复现、写进论文附录**
- 语法核心：`AStructure("因变量 = 自变量 + 误差")`，`(1)` 表示固定载荷为 1

### 路线 B：Amos Graphics Plugin —— 自动绘制路径图

**这是"自动绘图"的实现方式。** AMOS 插件用 VB.NET 写，`pd` 对象即路径图。

已验证可用的核心 API：

| 方法 | 作用 |
|---|---|
| `pd.DiagramDrawUnobserved(x, y, w, h)` | 画一个潜变量（椭圆），返回 `PDElement` |
| `pd.DiagramDrawIndicatorVariable(F)` | 给潜变量 F **加一个观测指标 + 误差项 + 载荷路径**（一行搞定） |
| `pd.DiagramDrawUniqueVariable(E)` | 加误差/唯一变量 |
| `pd.DiagramDrawCovariance(A, B)` | 画双向箭头（因子间协方差） |
| `pd.PDElements` | 遍历全部图元 |
| `E.NameOrCaption` | 读写变量名（用于自动命名） |
| `E.IsUnobservedVariable` / `.IsUniqueVariable` / `.IsExogenousVariable` | 判断图元类型 |
| `pd.EditTouchUp(E)` / `pd.EditFitToPage()` / `pd.Refresh()` | 自动排版 |

**一个能跑的 CFA 自动绘图插件骨架**：

```vb
Imports Amos
<System.ComponentModel.Composition.Export(GetType(Amos.IPlugin))>
Public Class CPlugin
    Implements Amos.IPlugin

    Public Function MainSub() As Integer Implements Amos.IPlugin.MainSub
        pd.ViewPathDiagram()
        Dim F(3) As PDElement
        Dim i As Integer

        ' 画 3 个潜变量，每个带 4 个指标
        For i = 1 To 3
            F(i) = pd.DiagramDrawUnobserved(200 * i, 100, 60, 40)
            F(i).NameOrCaption = "F" & i
            pd.DiagramDrawIndicatorVariable(F(i))
            pd.DiagramDrawIndicatorVariable(F(i))
            pd.DiagramDrawIndicatorVariable(F(i))
            pd.DiagramDrawIndicatorVariable(F(i))
        Next

        ' 因子间两两画协方差
        For i = 1 To 3
            For j = i + 1 To 3
                pd.DiagramDrawCovariance(F(i), F(j))
            Next
        Next

        pd.EditFitToPage()
        pd.Refresh()
    End Function

    Public Function Name1() As String Implements Amos.IPlugin.Name
        Return "Auto CFA"
    End Function
    Public Function Description() As String Implements Amos.IPlugin.Description
        Return "Auto-draw a CFA path diagram"
    End Function
End Class
```

**安装插件**：编译为 DLL → 放入 AMOS 的 `Plugins` 目录 → 在 AMOS 中 `Plugins` 菜单调用。

> 完整可用模板（CFA 生成器、误差项自动命名、结构模型自动连线）见 `templates/`
> 详见 `references/03-amos-automation.md`

---

## ④ 模型评估

### 拟合指标（报告这一组即可）

| 指标 | 可接受 | 良好 |
|---|---|---|
| **χ²/df** | < 5 | **< 3** |
| **CFI** | ≥ .90 | **≥ .95** |
| **TLI** (NNFI) | ≥ .90 | ≥ .95 |
| **RMSEA** | ≤ .08 | **≤ .06** |
| **SRMR** | ≤ .08 | ≤ .05 |
| GFI / AGFI | ≥ .90 / ≥ .85 | 受样本量影响大，可不作为主要依据 |

- **χ² 本身几乎必然显著**（样本大就显著），不要因为 p < .05 就说模型不好。
- **别只报好看的那几个**。CFI + TLI + RMSEA + SRMR + χ²/df 是标配组合。

### 修正指数 MI —— 最容易翻车的地方

**规则：只在有理论依据时使用，且只加"同一因子内部的误差相关"。**

- ❌ 不要跨因子加误差相关（等于承认构念不干净）
- ❌ 不要为了拟合而反复加路径（这是数据操纵）
- ✅ 每加一条，都要能说出"为什么这两个题项的误差会相关"（如题项措辞相似、位置相邻）
- ✅ 在论文中**如实报告**你做了哪些修正、为什么

> 一个拟合完美但靠十几条 MI 拗出来的模型，审稿人一眼看穿。

### 中介效应

**必须用 Bootstrap**，不要用 Sobel 检验（已过时）。

- Bootstrap 抽样 **≥ 2000**（推荐 5000）
- 报告 **偏差校正置信区间（Bias-corrected CI）**
- **判定：95% CI 不包含 0 → 中介效应显著**
- 同时报告：总效应、直接效应、间接效应及其 CI

### 调节效应 / 多群组

- **多群组分析**：先做测量不变性检验（形态 → 弱 → 强 → 严格），ΔCFI < .01 视为不变性成立
- **潜变量交互**：可用乘积指标法，或改用 PLS-SEM / Mplus

> 详见 `references/04-model-fit-analysis.md`

---

## ⑤ 结果撰写

结果段落必须包含：
1. 数据清洗与样本描述
2. 达标预检验的全部结果（信度、效度、共同方法偏差）
3. 测量模型（CFA）：拟合指标 + 标准化载荷 + CR + AVE + 区分效度表
4. 结构模型：拟合指标 + 路径系数（β、S.E.、C.R.、p）+ R²
5. 中介/调节：Bootstrap CI 表
6. 修正情况（如有）：改了什么、为什么

> 可套用的 APA 段落模板见 `references/05-write-up.md`

---

## 全流程检查清单

- [ ] 反向计分已完成
- [ ] 缺失值处理并报告（含 Little's MCAR）
- [ ] Mahalanobis 多变量异常值已检查
- [ ] 样本量满足 N:p ≥ 5:1
- [ ] 偏度峰度在可接受范围（否则用 Bootstrap ML）
- [ ] Harman 单因子 < 40%
- [ ] 各维度 α ≥ .70
- [ ] KMO ≥ .70，Bartlett 显著
- [ ] 标准化载荷 ≥ .50，CR ≥ .70，AVE ≥ .50
- [ ] √AVE > 因子间相关（或 HTMT < .85）
- [ ] CFA 拟合达标后，才做结构模型
- [ ] 中介用 Bootstrap ≥ 2000 + 偏差校正 CI
- [ ] MI 修正有理论依据且如实报告
- [ ] 拟合指标报告完整组合（不挑好看的）

---

## 边界与诚信

- 所有阈值都是**领域经验标准**，不是铁律。使用时应引用文献（见 `references/06-bibliography.md`），并结合你的领域惯例。
- **不得**为了拟合而反复加 MI 路径、删题、删样本。
- **不得**只报告好看的拟合指标。
- **不得**在多个模型中挑选结果最好的那个报告，而不说明你试过多个。
- 数据不达标时，正确的做法是**回去修数据或修理论**，不是修模型。

