关于 statistical-analysis
面向学术研究者的数据分析 Skill,适用于实验或观察数据。涵盖检验选择、假设检查、经典与贝叶斯分析、效应量、统计功效及 APA 格式报告。
主要功能
- 01统计检验选择
- 02假设检查与诊断
- 03经典与贝叶斯分析
- 04效应量与置信区间
- 05统计功效与样本量分析
- 06APA 格式报告与图表
适用场景
- 01选择组间比较所需检验
- 02检查回归假设与结果
- 03规划研究样本量
- 04整理可用于发表的统计结果
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ davila7/ claude-code-templates --skill statistical-analysis安装后在 Claude Code 中输入/statistical-analysis确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/assumptions_and_diagnostics.mdbayesian_statistics.mdeffect_sizes_and_power.mdreporting_standards.mdtest_selection_guide.mdscripts/assumption_checks.py详细介绍
统计分析
概述
统计分析是一个系统性的过程,用于检验假设并量化变量之间的关系。执行假设检验(t 检验、ANOVA、卡方检验)、回归、相关分析和贝叶斯分析,并进行假设检验和 APA 格式报告。在进行学术研究时应用此技能。
何时使用此技能
此技能应在以下情况下使用:
- 进行统计假设检验(t 检验、ANOVA、卡方检验)
- 执行回归或相关分析
- 运行贝叶斯统计分析
- 检查统计假设和诊断
- 计算效应量并进行功效分析
- 以 APA 格式报告统计结果
- 分析实验或观察数据用于研究
核心能力
1. 检验选择与规划
- 根据研究问题和数据特征选择合适的统计检验
- 进行先验功效分析以确定所需的样本量
- 规划分析策略,包括多重比较校正
2. 假设检查
- 在运行检验前自动验证所有相关假设
- 提供诊断可视化(Q-Q 图、残差图、箱线图)
- 当假设被违反时推荐补救措施
3. 统计检验
- 假设检验:t 检验、ANOVA、卡方检验、非参数替代方法
- 回归:线性、多元、逻辑回归,并附带诊断
- 相关性:Pearson、Spearman,并附带置信区间
- 贝叶斯替代方法:贝叶斯 t 检验、ANOVA、回归,并附带贝叶斯因子
4. 效应量与解释
- 为所有分析计算并解释适当的效应量
- 为效应估计提供置信区间
- 区分统计显著性与实际显著性
5. 专业报告
- 生成 APA 风格的统计报告
- 创建适合发表的图表
- 提供包含所有必要统计量的完整解释
工作流决策树
使用此决策树确定您的分析路径:
START
│
├─ Need to SELECT a statistical test?
│ └─ YES → See "Test Selection Guide"
│ └─ NO → Continue
│
├─ Ready to check ASSUMPTIONS?
│ └─ YES → See "Assumption Checking"
│ └─ NO → Continue
│
├─ Ready to run ANALYSIS?
│ └─ YES → See "Running Statistical Tests"
│ └─ NO → Continue
│
└─ Need to REPORT results?
└─ YES → See "Reporting Results"
检验选择指南
快速参考:选择合适的检验
使用 references/test_selection_guide.md 获取全面指导。快速参考:
比较两组:
- 独立、连续、正态 → 独立 t 检验
- 独立、连续、非正态 → Mann-Whitney U 检验
- 配对、连续、正态 → 配对 t 检验
- 配对、连续、非正态 → Wilcoxon 符号秩检验
- 二分类结果 → 卡方检验或 Fisher 精确检验
比较 3 组及以上:
- 独立、连续、正态 → 单因素 ANOVA
- 独立、连续、非正态 → Kruskal-Wallis 检验
- 配对、连续、正态 → 重复测量 ANOVA
- 配对、连续、非正态 → Friedman 检验
关系:
- 两个连续变量 → Pearson(正态)或 Spearman 相关(非正态)
- 连续结果与预测变量 → 线性回归
- 二分类结果与预测变量 → 逻辑回归
贝叶斯替代方法: 所有检验都有贝叶斯版本,提供:
- 关于假设的直接概率陈述
- 量化证据的贝叶斯因子
- 支持零假设的能力
- 参见
references/bayesian_statistics.md
假设检查
系统性假设验证
在解释检验结果之前,始终检查假设。
使用提供的 scripts/assumption_checks.py 模块进行自动检查:
from scripts.assumption_checks import comprehensive_assumption_check
# Comprehensive check with visualizations
results = comprehensive_assumption_check(
data=df,
value_col='score',
group_col='group', # Optional: for group comparisons
alpha=0.05
)
这会执行:
- 异常值检测(IQR 和 z 分数方法)
- 正态性检验(Shapiro-Wilk 检验 + Q-Q 图)
- 方差齐性(Levene 检验 + 箱线图)
- 解释与建议
单独假设检查
对于针对性检查,使用单独的函数:
from scripts.assumption_checks import (
check_normality,
check_normality_per_group,
check_homogeneity_of_variance,
check_linearity,
detect_outliers
)
# Example: Check normality with visualization
result = check_normality(
data=df['score'],
name='Test Score',
alpha=0.05,
plot=True
)
print(result['interpretation'])
print(result['recommendation'])
假设被违反时该怎么办
正态性被违反:
- 轻度违反 + 每组 n > 30 → 继续使用参数检验(稳健)
- 中度违反 → 使用非参数替代方法
- 严重违反 → 变换数据或使用非参数检验
方差齐性被违反:
- 对于 t 检验 → 使用 Welch's t-test
- 对于 ANOVA → 使用 Welch's ANOVA 或 Brown-Forsythe ANOVA
- 对于回归 → 使用稳健标准误或加权最小二乘法
线性被违反(回归):
- 添加多项式项
- 变换变量
- 使用非线性模型或 GAM
有关全面指导,请参阅 references/assumptions_and_diagnostics.md。
运行统计检验
Python 库
用于统计分析的主要库:
- scipy.stats:核心统计检验
- statsmodels:高级回归与诊断
- pingouin:用户友好的统计检验,并附带效应量
- pymc:贝叶斯统计建模
- arviz:贝叶斯可视化与诊断
示例分析
带完整报告的 T 检验
import pingouin as pg
import numpy as np
# Run independent t-test
result = pg.ttest(group_a, group_b, correction='auto')
# Extract results
t_stat = result['T'].values[0]
df = result['dof'].values[0]
p_value = result['p-val'].values[0]
cohens_d = result['cohen-d'].values[0]
ci_lower = result['CI95%'].values[0][0]
ci_upper = result['CI95%'].values[0][1]
# Report
print(f"t({df:.0f}) = {t_stat:.2f}, p = {p_value:.3f}")
print(f"Cohen's d = {cohens_d:.2f}, 95% CI [{ci_lower:.2f}, {ci_upper:.2f}]")
带事后检验的 ANOVA
import pingouin as pg
# One-way ANOVA
aov = pg.anova(dv='score', between='group', data=df, detailed=True)
print(aov)
# If significant, conduct post-hoc tests
if aov['p-unc'].values[0] < 0.05:
posthoc = pg.pairwise_tukey(dv='score', between='group', data=df)
print(posthoc)
# Effect size
eta_squared = aov['np2'].values[0] # Partial eta-squared
print(f"Partial η² = {eta_squared:.3f}")
带诊断的线性回归
import statsmodels.api as sm
from statsmodels.stats.outliers_influence import variance_inflation_factor
# Fit model
X = sm.add_constant(X_predictors) # Add intercept
model = sm.OLS(y, X).fit()
# Summary
print(model.summary())
# Check multicollinearity (VIF)
vif_data = pd.DataFrame()
vif_data["Variable"] = X.columns
vif_data["VIF"] = [variance_inflation_factor(X.values, i) for i in range(X.shape[1])]
print(vif_data)
# Check assumptions
residuals = model.resid
fitted = model.fittedvalues
# Residual plots
import matplotlib.pyplot as plt
fig, axes = plt.subplots(2, 2, figsize=(12, 10))
# Residuals vs fitted
axes[0, 0].scatter(fitted, residuals, alpha=0.6)
axes[0, 0].axhline(y=0, color='r', linestyle='--')
axes[0, 0].set_xlabel('Fitted values')
axes[0, 0].set_ylabel('Residuals')
axes[0, 0].set_title('Residuals vs Fitted')
# Q-Q plot
from scipy import stats
stats.probplot(residuals, dist="norm", plot=axes[0, 1])
axes[0, 1].set_title('Normal Q-Q')
# Scale-Location
axes[1, 0].scatter(fitted, np.sqrt(np.abs(residuals / residuals.std())), alpha=0.6)
axes[1, 0].set_xlabel('Fitted values')
axes[1, 0].set_ylabel('√|Standardized residuals|')
axes[1, 0].set_title('Scale-Location')
# Residuals histogram
axes[1, 1].hist(residuals, bins=20, edgecolor='black', alpha=0.7)
axes[1, 1].set_xlabel('Residuals')
axes[1, 1].set_ylabel('Frequency')
axes[1, 1].set_title('Histogram of Residuals')
plt.tight_layout()
plt.show()
贝叶斯 T 检验
import pymc as pm
import arviz as az
import numpy as np
with pm.Model() as model:
# Priors
mu1 = pm.Normal('mu_group1', mu=0, sigma=10)
mu2 = pm.Normal('mu_group2', mu=0, sigma=10)
sigma = pm.HalfNormal('sigma', sigma=10)
# Likelihood
y1 = pm.Normal('y1', mu=mu1, sigma=sigma, observed=group_a)
y2 = pm.Normal('y2', mu=mu2, sigma=sigma, observed=group_b)
# Derived quantity
diff = pm.Deterministic('difference', mu1 - mu2)
# Sample
trace = pm.sample(2000, tune=1000, return_inferencedata=True)
# Summarize
print(az.summary(trace, var_names=['difference']))
# Probability that group1 > group2
prob_greater = np.mean(trace.posterior['difference'].values > 0)
print(f"P(μ₁ > μ₂ | data) = {prob_greater:.3f}")
# Plot posterior
az.plot_posterior(trace, var_names=['difference'], ref_val=0)
效应量
始终计算效应量
效应量量化大小,而 p 值仅表明效应是否存在。
有关全面指导,请参阅 references/effect_sizes_and_power.md。
快速参考:常见效应量
| 检验 | 效应量 | 小 | 中 | 大 |
|---|---|---|---|---|
| T 检验 | Cohen's d | 0.20 | 0.50 | 0.80 |
| ANOVA | η²_p | 0.01 | 0.06 | 0.14 |
| 相关 | r | 0.10 | 0.30 | 0.50 |
| 回归 | R² | 0.02 | 0.13 | 0.26 |
| 卡方 | Cramér's V | 0.07 | 0.21 | 0.35 |
重要:基准值仅供参考。具体情境很重要!
计算效应量
大多数效应量由 pingouin 自动计算:
# T-test returns Cohen's d
result = pg.ttest(x, y)
d = result['cohen-d'].values[0]
# ANOVA returns partial eta-squared
aov = pg.anova(dv='score', between='group', data=df)
eta_p2 = aov['np2'].values[0]
# Correlation: r is already an effect size
corr = pg.corr(x, y)
r = corr['r'].values[0]
效应量的置信区间
始终报告 CI 以显示精确度:
from pingouin import compute_effsize_from_t
# For t-test
d, ci = compute_effsize_from_t(
t_statistic,
nx=len(group1),
ny=len(group2),
eftype='cohen'
)
print(f"d = {d:.2f}, 95% CI [{ci[0]:.2f}, {ci[1]:.2f}]")
功效分析
先验功效分析(研究规划)
在数据收集前确定所需样本量:
from statsmodels.stats.power import (
tt_ind_solve_power,
FTestAnovaPower
)
# T-test: What n is needed to detect d = 0.5?
n_required = tt_ind_solve_power(
effect_size=0.5,
alpha=0.05,
power=0.80,
ratio=1.0,
alternative='two-sided'
)
print(f"Required n per group: {n_required:.0f}")
# ANOVA: What n is needed to detect f = 0.25?
anova_power = FTestAnovaPower()
n_per_group = anova_power.solve_power(
effect_size=0.25,
ngroups=3,
alpha=0.05,
power=0.80
)
print(f"Required n per group: {n_per_group:.0f}")
敏感性分析(研究后)
确定你可以检测到的效应量:
# With n=50 per group, what effect could we detect?
detectable_d = tt_ind_solve_power(
effect_size=None, # Solve for this
nobs1=50,
alpha=0.05,
power=0.80,
ratio=1.0,
alternative='two-sided'
)
print(f"Study could detect d ≥ {detectable_d:.2f}")
注意:通常不建议进行事后功效分析(研究后计算功效)。请改用敏感性分析。
有关详细指导,请参阅 references/effect_sizes_and_power.md。
报告结果
APA 风格统计报告
遵循 references/reporting_standards.md 中的指南。
必备报告要素
- 描述性统计:所有组/变量的 M、SD、n
- 检验统计量:检验名称、统计量、df、精确 p 值
- 效应量:附带置信区间
- 假设检查:进行了哪些检验、结果、采取的措施
- 所有计划的分析:包括不显著的结果
示例报告模板
独立样本 T 检验
Group A (n = 48, M = 75.2, SD = 8.5) scored significantly higher than
Group B (n = 52, M = 68.3, SD = 9.2), t(98) = 3.82, p < .001, d = 0.77,
95% CI [0.36, 1.18], two-tailed. Assumptions of normality (Shapiro-Wilk:
Group A W = 0.97, p = .18; Group B W = 0.96, p = .12) and homogeneity
of variance (Levene's F(1, 98) = 1.23, p = .27) were satisfied.
单因素 ANOVA
A one-way ANOVA revealed a significant main effect of treatment condition
on test scores, F(2, 147) = 8.45, p < .001, η²_p = .10. Post hoc
comparisons using Tukey's HSD indicated that Condition A (M = 78.2,
SD = 7.3) scored significantly higher than Condition B (M = 71.5,
SD = 8.1, p = .002, d = 0.87) and Condition C (M = 70.1, SD = 7.9,
p < .001, d = 1.07). Conditions B and C did not differ significantly
(p = .52, d = 0.18).
多元回归
Multiple linear regression was conducted to predict exam scores from
study hours, prior GPA, and attendance. The overall model was significant,
F(3, 146) = 45.2, p < .001, R² = .48, adjusted R² = .47. Study hours
(B = 1.80, SE = 0.31, β = .35, t = 5.78, p < .001, 95% CI [1.18, 2.42])
and prior GPA (B = 8.52, SE = 1.95, β = .28, t = 4.37, p < .001,
95% CI [4.66, 12.38]) were significant predictors, while attendance was
not (B = 0.15, SE = 0.12, β = .08, t = 1.25, p = .21, 95% CI [-0.09, 0.39]).
Multicollinearity was not a concern (all VIF < 1.5).
贝叶斯分析
A Bayesian independent samples t-test was conducted using weakly
informative priors (Normal(0, 1) for mean difference). The posterior
distribution indicated that Group A scored higher than Group B
(M_diff = 6.8, 95% credible interval [3.2, 10.4]). The Bayes Factor
BF₁₀ = 45.3 provided very strong evidence for a difference between
groups, with a 99.8% posterior probability that Group A's mean exceeded
Group B's mean. Convergence diagnostics were satisfactory (all R̂ < 1.01,
ESS > 1000).
贝叶斯统计
何时使用贝叶斯方法
在以下情况下考虑贝叶斯方法:
- 你有先验信息需要纳入
- 你想要关于假设的直接概率陈述
- 样本量较小或计划进行序贯数据收集
- 你需要量化对零假设的证据
- 模型较复杂(分层、缺失数据)
有关以下内容的全面指导,请参阅 references/bayesian_statistics.md:
- 贝叶斯定理与解释
- 先验设定(有信息、弱信息、无信息)
- 使用贝叶斯因子的贝叶斯假设检验
- 可信区间与置信区间
- 贝叶斯 t 检验、ANOVA、回归和分层模型
- 模型收敛检查与后验预测检验
主要优势
- 直观解读:“给定数据,参数落在此区间内的概率为 95%”
- 支持零假设的证据:可以量化对无效应的支持程度
- 灵活:无需担心 p 值操纵;可在数据到达时随时分析
- 不确定性量化:完整的后验分布
资源
本技能包含全面的参考材料:
References 目录
- test_selection_guide.md:选择合适统计检验的决策树
- assumptions_and_diagnostics.md:检查和应对假设违背的详细指导
- effect_sizes_and_power.md:计算、解读和报告效应量;进行功效分析
- bayesian_statistics.md:贝叶斯分析方法的完整指南
- reporting_standards.md:APA 风格报告指南及示例
Scripts 目录
- assumption_checks.py:带可视化的自动化假设检查
comprehensive_assumption_check():完整工作流check_normality():带 Q-Q 图的正态性检验check_homogeneity_of_variance():带箱线图的 Levene 检验check_linearity():回归线性检查detect_outliers():IQR 和 z 分数异常值检测
最佳实践
- 预注册分析(如有可能),以区分验证性与探索性分析
- 在查看结果前检查假设
- 报告效应量及置信区间
- 报告所有计划的分析,包括不显著的结果
- 区分统计显著性与实际意义
- 在分析前后可视化数据
- 检查诊断信息:回归/ANOVA(残差图、VIF 等)
- 进行敏感性分析以评估稳健性
- 共享数据和代码以实现可复现性
- 对违背情况、数据转换和决策保持透明
应避免的常见陷阱
- P 值操纵:不要尝试多种方式直到某个结果显著
- HARKing:不要将探索性发现当作验证性结果呈现
- 混淆显著性与重要性:p < .05 ≠ 有实际意义的效应
- 不报告效应量:始终报告
- 挑选结果:报告所有计划的分析
- 误解 p 值:它们不是零假设为真的概率
- 多重比较:适当时对族系误差进行校正
- 忽视缺失数据:理解机制(MCAR、MAR、MNAR)
- 过度解读不显著结果:无证据 ≠ 证明不存在
- 忽视前提条件:每个检验都有假设
入门清单
开始统计分析时:
- 明确研究问题和假设
- 确定合适的统计检验(使用 test_selection_guide.md)
- 进行功效分析以确定样本量
- 加载并检查数据
- 检查缺失数据和异常值
- 使用 assumption_checks.py 验证假设
- 运行主要分析
- 计算效应量及置信区间
- 如有需要,进行事后检验(带校正)
- 创建可视化
- 按照 reporting_standards.md 撰写结果
- 进行敏感性分析
- 共享数据和代码
支持与延伸阅读
有关以下方面的问题:
- 检验选择:参见 references/test_selection_guide.md
- 假设:参见 references/assumptions_and_diagnostics.md
- 效应量:参见 references/effect_sizes_and_power.md
- 贝叶斯方法:参见 references/bayesian_statistics.md
- 报告:参见 references/reporting_standards.md
主要教科书:
- Cohen, J. (1988). Statistical Power Analysis for the Behavioral Sciences
- Field, A. (2013). Discovering Statistics Using IBM SPSS Statistics
- Gelman, A., & Hill, J. (2006). Data Analysis Using Regression and Multilevel/Hierarchical Models
- Kruschke, J. K. (2014). Doing Bayesian Data Analysis
在线资源:
- APA 格式指南:https://apastyle.apa.org/
- 统计咨询:Cross Validated(stats.stackexchange.com)