第三讲 CC辅助定量分析与论文复现
安装文件
(一)R 和 RStudio
本讲分析全部跑在 R 上。装好整个工具栈大约 15 分钟,一次性投入。
R 三件套的关系

- R:底层统计引擎,必装。CC 在背后调用它执行所有代码。
- RStudio:操作界面,强烈推荐。变量窗口、图形窗口、Console 一目了然,调试方便。
- R 包(haven / psych / lavaan …):专业工具箱,按需安装。
haven读 SPSS、psych做描述统计、lavaan跑 SEM / 中介。
两个都装。期刊 Methods 部分只写”R 4.x.x”,是否用 RStudio 不影响发表,但写代码时差别巨大。
第 1 步:安装 R
- 点 “Download R for ~“,按自己电脑系统选
- 进入页面后点 “base”
- 点 “Download R-4.x.x for Windows”,选最新版本
- 下载完双击安装包,一路 Next,所有选项默认即可
- 装完后”开始菜单”里能搜到 “R x64 4.x.x” 就成
Windows 默认路径长这样:C:\Program Files\R\R-4.3.1\(版本号会有差异)。
第 2 步:安装 RStudio
- 点蓝色按钮 “Download RStudio Desktop”(Free 版本就够)
- 下载完双击安装,一路 Next
- 装完打开 RStudio,左下角的 Console 就是输入命令的地方
第 3 步:安装本讲会用到的 R 包
打开 RStudio,在 Console 里执行:
install.packages(c("haven", "psych", "lavaan"))
3–5 分钟,会看到一堆滚动的下载日志。装完后再敲一次:
library(haven)
library(psych)
library(lavaan)
三行都没有红色报错就 OK。
常见坑:报”无法写入目录”——以管理员身份重启 RStudio 再装一遍。
第 4 步:让 CC 接上 R
打开 Claude Code,发:
帮我运行一行 R 代码:cat("R环境正常\n")
只要 CC 回显 “R 环境正常”,就说明它已经能调起 R。后面所有分析都从这里开始。
(二)quantitative-analysis skill 安装
下载附件压缩包,解压,按里面的 README-安装指南.md 走完安装即可。这个 skill 是后面 Demo 3 的核心——把 9 步分析流程封装好了,一句话触发完整跑通。
一、核心方法论:先复现,再创新
跑通一篇别人的论文,比读一百个教程有用。
为什么从复现开始?一篇已发表的论文,其实替你把所有重要决策都做完了——用了哪个量表、怎么建模、报告哪些指标、Bootstrap 多少次。你不需要在一开始就独立判断这些,只需要让 CC 把整套流程跑通;然后把这套框架”复制粘贴”到自己的数据上。

三步走:复现 → 验证 → 改造。
二、工具选择:用什么软件都行,CC 替你写代码
常见疑问:“我平时用的是 Stata / SPSS,不是 R——CC 还能帮我吗?”
完全可以。CC 会根据你指定的软件生成对应代码。
本讲用 R 演示,是因为它免费且 CC 可以全程无头自动跑。但分析思路与软件无关——你告诉 CC 你要做什么,它写对应软件的代码。
切换软件就一句话:
用 Stata 的 do 文件帮我完成以下分析:...
用 SPSS 语法帮我写相关矩阵和描述统计:...
三、演示论文与数据
论文:Brandtner & Wegmann (2023). The fear in desire: Linking desire thinking and fear of missing out in the social media context. BMC Psychology (SSCI, Q1)
开放数据:OSF → https://osf.io/xhabz/
核心变量:DT(渴望思维)、FoMO_S(状态性错失恐惧)、CEQ(渴求体验)、ACSID_F(问题性 SNS 使用频率)
理论模型(序列中介):
DT → FoMO_S → CEQ → ACSID_F,N = 193(原始 246 条,作者用 filter_$ = 1 标记筛掉 53 条得到 193)。
四、三个 Demo 操作指南
Demo 1:论文复现
场景:开放数据已下载,让 CC 把论文里的全部分析在你电脑上跑一遍。
为什么是”序列”中介?作者的因果链条是三步:
- 渴望思维(DT)让人产生 FoMO(怕错过)
- FoMO 放大对使用 SNS 的渴求感(CEQ)
- 渴求感最终导致问题性 SNS 使用(ACSID_F)
不看 p 值,看 Bootstrap 95% 置信区间。Bootstrap 的原理是把样本随机重抽 5000 次,每次算一遍间接效应,取中间 95% 作为置信区间——比传统的 Sobel 检验更稳,也不要求正态分布。
第 1 步:让 CC 读论文
读一下这篇论文的 Method 和 Results,提取:
1. 所有变量名和对应量表
2. 样本量和人口统计学特征
3. 描述性统计(均值、标准差)
4. 相关矩阵
5. 主要分析方法和结果
第 2 步:让 CC 验证数据
读取 "data/cleaned/clean_scores.csv"(把文件拖到对话框), 告诉我:
1. 多少行(样本量)、多少列(变量数)
2. 变量名是否和论文对得上
3. 前 5 行长什么样
第 3 步:跑全部分析
用 R 对这个数据执行论文中的全部分析:
1. 描述统计(M, SD, range)
2. Cronbach's α(每个量表)
3. Pearson 相关矩阵
4. 序列中介:DT → FoMO_S → CEQ → ACSID_F,Bootstrap 5000 次
保存结果到 output/analysis_result4.1.txt
第 4 步:对比原文
把你跑出来的结果和论文原文的 Table 1 对比,
做一张对比表,标注哪些一致、哪些有差异
预期结果(已验证):
序列中介的 β 跟原文有非常小的差异,这是正常的——论文是 MPlus + 协变量,我们是 R + lavaan,估计器和 bootstrap 随机性都会贡献微小差异,方向和显著性完全一致。
Demo 1 真实演示日志
▐▛███▜▌ Claude Code v2.1.89
▝▜█████▛▘ Sonnet 4.6 · API Usage Billing
▘▘ ▝▝ C:\Windows\System32
● Bash(mkdir -p "D:/课程/CC实战课/lesson-03-定量分析/demo/output")
⎿ Interrupted · What should Claude do instead?
> D:\课程\CC实战课\lesson-03-定量分析\demo\DT&FoMO_MPlus_clean.dat这个数据呢?
● Bash(python -c "
import pandas as pd, sys, io…)
⎿ Shape: (193, 8)
First 3 rows:
… +10 lines (ctrl+o to expand)
● 这是 MPlus 格式的无表头数据,8 列。让我对照 clean_scores.csv 确认列含义。
● Bash(python -c "
import pandas as pd, sys, io…)
⎿ === .dat col stats vs clean_scores ===
Col 0: min=1.00 max=2.00 mean=1.5285 sd=0.5005
Col 1: min=1.00 max=3.00 mean=1.7720 sd=0.4675
… +15 lines (ctrl+o to expand)
● 这是 MPlus 导出的无表头 .dat 文件,193 行 × 8 列。列映射如下:
┌────────┬────────────────────┬────────────────────────────┐
│ .dat列 │ 对应变量 │ 依据 │
├────────┼────────────────────┼────────────────────────────┤
│ Col 0 │ 实验条件(1/2) │ 二值,非id——论文有实验分组 │
│ Col 1 │ Gender │ 1-3,均值1.77,完全吻合 │
│ Col 2 │ Age │ M=28.3, SD=9.29,吻合 │
│ Col 3 │ DT_sum │ M=16.05, SD=4.77,吻合 │
│ Col 4 │ CEQ_mean │ M=2.15, SD=1.60,吻合 │
│ Col 5 │ ACSID_F │ M=0.75, SD=0.54,吻合 │
│ Col 6 │ FoMO_S(在线FoMO) │ M=2.24, SD=0.79,吻合 │
│ Col 7 │ FoMO_T(特质FoMO) │ M=2.64, SD=0.92,吻合 │
└────────┴────────────────────┴────────────────────────────┘
与 clean_scores.csv 相比:
- 多了 Col 0(实验条件),少了 id
- 列顺序不同(CEQ 在 FoMO 前面)
- 数据完全一致,只是 MPlus 格式(无表头、tab 分隔)
建议用 clean_scores.csv + clean_items.csv 跑 R 分析,表头清晰不易出错。要继续执行吗?
> 好的,继续
● Bash(mkdir -p "D:/课程/CC实战课/lesson-03-定量分析/demo/output")
⎿ Done
● Write(D:\课程\CC实战课\lesson-03-定量分析\demo\analysis.R)
⎿ Wrote 160 lines to D:\课程\CC实战课\lesson-03-定量分析\demo\analysis.R
● Bash("D:/R-4.3.1/bin/Rscript.exe"
"D:/课程/CC实战课/lesson-03-定量分析/demo/analysis.R" 2>&1)
⎿ This is lavaan 0.6-21
lavaan is FREE software! Please report any bugs.
● 运行成功,结果对比如下:
1. 描述统计 — 完全一致 ✓
2. Cronbach's α — 3/4 吻合(FoMO_S 偏低 .743 vs .813,可能是平均策略不同)
3. 相关矩阵 — 完全一致 ✓
4. 序列中介 — 高度吻合 ✓
┌───────────────────┬─────────────┬────────┬───────┐
│ 路径 │ 我们 β(std) │ 论文 β │ p │
├───────────────────┼─────────────┼────────┼───────┤
│ DT→CEQ→ACSID │ .315 │ .321 │ *** ✓ │
│ DT→FoMO→ACSID │ .033 │ .036 │ ns ✓ │
│ DT→FoMO→CEQ→ACSID │ .086 │ .087 │ *** ✓ │
└───────────────────┴─────────────┴────────┴───────┘
微小差异来自 lavaan vs MPlus 估计器差异和 bootstrap 随机性,整体复现非常成功。
Demo 2:数据清洗
场景:OSF 上的原始数据是 246 条,论文清洗后剩 193 条——中间 53 条是怎么删掉的?让 CC 把这个清洗过程重现一遍。
什么是马氏距离?常见的异常值检测一次只看一个变量(“年龄 = 999”这种)。马氏距离不一样,它看的是多变量组合是否异常。
举个例子:某个被试 DT 分很高,但 FoMO 分很低——单看每个变量都在正常范围,但组合在一起在这个研究情境里就是”不寻常”的点。马氏距离会标记它。判断标准:该点的卡方概率 p < .05 即视为多变量异常值。
这份原始数据要过四道筛:

第 1 步:先出一份质量报告
读取 DT&FoMO_SPSS_raw.sav(原始 246 条),生成数据质量报告:
1. 样本量和变量数
2. socialmediaUse = 1 多少条
3. UseData = 2 多少条
4. LongString = 1 多少条
5. 马氏距离异常值检查(p<.05 阈值)
6. 各量表的缺失值情况
第 2 步:按顺序清洗
按顺序清洗数据:
1. 删除 socialmediaUse = 1
2. 删除 UseData = 2
3. 删除 LongString = 1
4. 删除马氏距离 p < .05 的异常值
报告每步删除了多少条,最终保留多少条
与论文报告的 193 条对比
第 3 步:算量表得分并验证
对清洗后数据计算各量表得分:
- DT_sum(DTQ 10 题求和)
- FoMO_T、FoMO_S(分别求平均)
- CEQ_mean(9 题求平均)
- ACSID_F(频率量尺求平均)
与论文 Table 1 的均值/标准差对比,验证是否一致
Demo 2 真实演示日志
▐▛███▜▌ Claude Code v2.1.89
▝▜█████▛▘ Sonnet 4.6 · API Usage Billing
> 读取 D:\...\DT&FoMO_SPSS_raw.sav,生成数据质量报告...
● 数据质量报告|DT&FoMO_SPSS_raw.sav
1. 基本信息
原始样本量: 246 | 变量数: 116
2. 筛选变量统计
┌────────────────────┬──────┬──────────────────────┐
│ 筛选条件 │ 人数 │ 说明 │
├────────────────────┼──────┼──────────────────────┤
│ socialmediaUse = 1 │ 15 │ 不使用社交媒体,排除 │
│ UseData = 2 │ 2 │ 数据质量问题,排除 │
│ LongString = 1 │ 2 │ 直线作答,排除 │
└────────────────────┴──────┴──────────────────────┘
3. 马氏距离异常值(p < .05)
probability_MD 范围:0.0003 ~ 0.993
p < .05 异常值条数: 22
4. 各量表缺失值
DTQ / FoMO / CEQ / ICD-11 全部 0 缺失
5. 综合排除后有效样本
246 - 15(socialmediaUse) - 2(UseData) - 2(LongString) - 22(马氏) = 208
> 按顺序清洗:
1. 删除 socialmediaUse=1
2. 删除 UseData=2
3. 删除 LongString=1
4. 删除马氏距离 p<.05 的异常值
● 数据清洗报告
┌────────┬─────────────────────────────────────────┬──────────┬──────────┐
│ 步骤 │ 操作 │ 删除条数 │ 剩余样本 │
├────────┼─────────────────────────────────────────┼──────────┼──────────┤
│ Step 0 │ 原始数据 │ — │ 246 │
│ Step 1 │ 删除 socialmediaUse = 1 │ −15 │ 231 │
│ Step 2 │ 删除 UseData = 2 │ −2 │ 229 │
│ Step 3 │ 删除 LongString = 1 │ −2 │ 227 │
│ Step 4 │ 删除马氏距离 probability_MD < .05 │ −19 │ 208 │
└────────┴─────────────────────────────────────────┴──────────┴──────────┘
最终保留:208 条 vs 论文报告 193 条 — 差 15 条。
可能原因: 论文里对"不使用社交媒体"的排除逻辑可能不同。
要不要查一下 filter_$ 变量?
> 好的,进行
● 发现:filter_$ 就是最终筛选变量
filter_$ = 1(保留)= 193 条 — 正好等于论文 N
filter_$ = 0(排除)= 53 条 — 已经包含了所有的筛选逻辑
真正的排除逻辑是:
socialmediaUse=1 (15) + UseData=2 (2) + LongString=1 (2) + 马氏距离异常 (34) = 53 条
→ 原始 SPSS 用于计算马氏距离的变量范围更大,算出 34 个异常(而非我们的 19 个)。
→ 直接用 df[df['filter_$'] == 1] 筛选最准,正好复现 N = 193。
结论:清洗时直接用 filter_$ == 1,无需重算马氏。
现象:自己按步骤清洗剩 208 条,论文报告 193,差了 15。
CC 的诊断:去查 SPSS 原始文件的 filter_$ 变量——作者已经在源数据里预先标好了”最终保留”。filter_$ == 1 正好等于 193。差异来源在于:原始 SPSS 用更大的变量集做马氏距离,算出 34 个异常(而非我们用子集算出的 19 个)。
两个带走的经验:
- 结果不对不要慌——让 CC 反过来找根因。它能从源数据里挖出
filter_$这种作者埋的隐藏变量。 - 遇到作者的”最终筛选变量”直接用。软件估计器差异是真实存在的,复现时优先信作者的 ground truth 标记。
Demo 3:完整分析链
场景:同一份清洗后数据,换种方式跑——对比”裸用 CC” 和”CC + 专业 skill”的差别。
第一次写论文的时候,我每次都要重新告诉 CC “做描述统计-相关矩阵-CMV 检验-CFA-中介-…” 一长串。写第二篇时我开始想:这套流程能不能固化下来?
于是我把”一篇定量论文从原始数据到投稿表格”的全过程抽象成 9 步,写进一个 skill 文件——CC 一看见这个 skill,就知道”数据分析”这四个字背后要走哪几步。
里面有一个我特别得意的设计:Core B 统计审计官——我被 Reviewer 2 挑剔过太多次了,所以干脆把 Reviewer 2 内置成审计角色,每次分析跑完它自动挑刺。

Demo 1(裸 CC) vs Demo 3(专业 skill)的对比触发词:
数据分析
数据文件:D:/课程/CC实战课/lesson-03-定量分析/demo/data/cleaned/clean_scores.csv
设计类型:横断面
分析模型:序列中介
变量角色:
X(自变量)= DT_sum(渴望思维总分)
M1(第一中介)= FoMO_S(状态性 FoMO)
M2(第二中介)= CEQ_mean(渴求体验)
Y(因变量)= ACSID_F(问题性 SNS 使用)
CV(控制变量)= Age, Gender
研究假设:
H1: DT 正向预测 ACSID_F
H2: DT 通过 FoMO_S → CEQ_mean 的序列中介路径影响 ACSID_F
Bootstrap:5000 次,95% CI
把这段发给装好 quantitative-analysis skill 的 CC,它会自动跑完:数据初检 → 描述统计 → CMV 检验 → 测量模型 CFA → 序列中介 → 稳健性 → APA 表格输出 → 代码完整性审计。
把变量名换成你自己的,路径换成你自己的,直接复用:
数据分析
数据文件:[你的数据路径]
设计类型:横断面
分析模型:[中介 / 调节 / SEM]
变量角色:
X = [你的自变量]
M = [你的中介变量]
Y = [你的因变量]
Demo 3 真实演示日志
▐▛███▜▌ Claude Code v2.1.89
▝▜█████▛▘ Sonnet 4.6 · API Usage Billing
> /model
⎿ Set model to Sonnet 4.6 (1M context)
> 做一下这个数据的数据分析 D:\...\clean_scores.csv
Read 1 file (ctrl+o to expand)
● Skill(quantitative-analysis)
⎿ Successfully loaded skill
● 好的,我来执行这个完整的 EDA 分析。
> 我是想用 软件:R
● Bash(ls "...output/" 2>/dev/null && echo "EXISTS" || mkdir -p "...output/" && echo "CREATED")
● Write(D:\...\analysis_eda.R)
⎿ Wrote 206 lines to analysis_eda.R
● Bash("D:/R-4.3.1/bin/Rscript.exe" "...analysis_eda.R" 2>&1)
⎿ Error: corrplot 和 nortest 未安装 — CRAN 网络问题
● 用已安装包替代后再跑 → 全部完成。
---
分析结果摘要
样本:N = 193,女性 73.1%,男性 24.9%
描述统计关键点
- Age 偏度 2.53、峰度 6.27(明显右偏,存在 68/70 岁极端值)
- 其他变量偏度/峰度均在可接受范围(|S|<2,|K|<7)
性别差异(Welch t 检验)
┌──────────────┬───────────────────┬────────────────────┐
│ 变量 │ 结果 │ Cohen's d │
├──────────────┼───────────────────┼────────────────────┤
│ DT_sum │ 女 > 男,p = .010 │ −0.41(中效应) │
│ FoMO_S │ 女 > 男,p = .044 │ −0.33(小-中效应) │
│ CEQ_mean │ 女 > 男,p = .006 │ −0.45(中效应) │
│ ACSID_F │ 女 > 男,p = .002 │ −0.50(中效应) │
└──────────────┴───────────────────┴────────────────────┘
相关矩阵关键发现
DT_sum ↔ CEQ_mean = .824***,DT_sum ↔ ACSID_F = .627***
多元线性回归(DV = DT_sum)
R² = .693,模型解释 69.3% 方差,F(3,189) = 142.3,p < .001
CEQ_mean: β = .791***(最强预测)
FoMO_T: β = −.110*(负向预测,反直觉)
ACSID_F: β = .119*
VIF 均 < 3,无多重共线性
Shapiro-Wilk p = .001,残差轻微偏离正态(论文中注明,大样本可放宽)
---
输出文件:
- fig_correlation_matrix.png — 相关热图
- fig_histograms.png — 分布直方图
- fig_boxplots_by_gender.png — 性别箱线图
- fig_regression_diagnostics.png — 回归诊断图
- analysis_report.md — 完整 APA 报告
- analysis_eda.R — 完整可复现脚本
> /rename Demo 3:完整分析链
⎿ Session renamed to: Demo 3:完整分析链
五、文件结构铁律
CC 跑分析的前提是文件结构清晰——它读不了你脑子里的目录约定,但能读你磁盘上的真实结构。
你的项目文件夹/
├── data/
│ ├── raw/ ← 原始数据,永远不要修改
│ └── cleaned/ ← 清洗后数据
├── output/ ← 统计结果(.txt / .csv)
├── figures/ ← 图表(.png / .pdf)
└── scripts/ ← R / Stata / Python 脚本
为什么必须这样组织:
raw/永远保留原始数据——出错可以从源头重跑,不留隐患output/和figures/的内容可直接拷进论文 manuscript- CC 每次跑都知道”去哪读、把结果存哪”——路径稳定才能复现
六、课后作业
提交:复现对比表截图 + 你找到的开放数据论文信息
截止:下节课之前
有问题随时在群里问。七、三个带走的东西
- 先复现,再创新——已发表论文是最便宜的方法学训练
- 结果不对让 CC 找根因——它能挖出你看不见的隐藏变量(比如
filter_$) - 分析流程可固化为 skill——把九步流水线写成一次性,之后一句”数据分析”全跑