统计分析工具包Skill statistical-analysis

统计分析工具包,提供假设检验(t检验、ANOVA、卡方检验)、回归分析、相关性分析、贝叶斯统计、功效分析、假设检查和APA报告等功能,适用于学术研究、数据分析和量化研究,支持SEO关键词:统计方法、数据分析、假设检验、学术研究、效应量计算。

数据分析 0 次安装 0 次浏览 更新于 3/16/2026

名称:统计分析 描述:“统计分析工具包。假设检验(t检验、ANOVA、卡方检验)、回归、相关性、贝叶斯统计、功效分析、假设检查、APA报告,适用于学术研究。”

统计分析

概述

统计分析是测试假设和量化关系的系统过程。执行假设检验(t检验、ANOVA、卡方检验)、回归、相关性分析和贝叶斯分析,包括假设检查和APA报告。此技能适用于学术研究。

何时使用此技能

此技能应在以下情况下使用:

  • 进行统计假设检验(t检验、ANOVA、卡方检验)
  • 执行回归或相关性分析
  • 运行贝叶斯统计分析
  • 检查统计假设和诊断
  • 计算效应量和进行功效分析
  • 以APA格式报告统计结果
  • 分析实验或观察数据以进行研究

核心能力

1. 测试选择和规划

  • 根据研究问题和数据特征选择合适的统计测试
  • 进行先验功效分析以确定所需样本量
  • 规划分析策略,包括多重比较校正

2. 假设检查

  • 在运行测试前自动验证所有相关假设
  • 提供诊断可视化(Q-Q图、残差图、箱线图)
  • 当假设违反时推荐补救措施

3. 统计测试

  • 假设检验:t检验、ANOVA、卡方检验、非参数替代方法
  • 回归:线性、多元、逻辑回归,带诊断
  • 相关性:皮尔逊、斯皮尔曼,带置信区间
  • 贝叶斯替代方法:贝叶斯t检验、ANOVA、回归,带贝叶斯因子

4. 效应量和解释

  • 计算并解释所有分析的适当效应量
  • 为效应估计提供置信区间
  • 区分统计显著性和实际显著性

5. 专业报告

  • 生成APA风格的统计报告
  • 创建适合发布的图表和表格
  • 提供完整的解释,包含所有必需的统计数据

工作流程决策树

使用此决策树确定您的分析路径:

开始
│
├─ 需要选择统计测试吗?
│  └─ 是 → 参见“测试选择指南”
│  └─ 否 → 继续
│
├─ 准备检查假设吗?
│  └─ 是 → 参见“假设检查”
│  └─ 否 → 继续
│
├─ 准备运行分析吗?
│  └─ 是 → 参见“运行统计测试”
│  └─ 否 → 继续
│
└─ 需要报告结果吗?
   └─ 是 → 参见“报告结果”

测试选择指南

快速参考:选择正确的测试

使用references/test_selection_guide.md获取全面指导。快速参考:

比较两组:

  • 独立、连续、正态 → 独立t检验
  • 独立、连续、非正态 → 曼-惠特尼U检验
  • 配对、连续、正态 → 配对t检验
  • 配对、连续、非正态 → 威尔科克森符号秩检验
  • 二元结果 → 卡方检验或费希尔精确检验

比较3组及以上:

  • 独立、连续、正态 → 单因素ANOVA
  • 独立、连续、非正态 → 克鲁斯卡尔-沃利斯检验
  • 配对、连续、正态 → 重复测量ANOVA
  • 配对、连续、非正态 → 弗里德曼检验

关系:

  • 两个连续变量 → 皮尔逊相关性(正态)或斯皮尔曼相关性(非正态)
  • 连续结果与预测变量 → 线性回归
  • 二元结果与预测变量 → 逻辑回归

贝叶斯替代方法: 所有测试都有贝叶斯版本,提供:

  • 关于假设的直接概率陈述
  • 量化证据的贝叶斯因子
  • 支持零假设的能力
  • 参见references/bayesian_statistics.md

假设检查

系统假设验证

在解释测试结果前始终检查假设。

使用提供的scripts/assumption_checks.py模块进行自动检查:

from scripts.assumption_checks import comprehensive_assumption_check

# 带可视化的全面检查
results = comprehensive_assumption_check(
    data=df,
    value_col='score',
    group_col='group',  # 可选:用于组比较
    alpha=0.05
)

此操作执行:

  1. 异常值检测(IQR和z分数方法)
  2. 正态性测试(夏皮罗-威尔克检验 + Q-Q图)
  3. 方差齐性(莱文检验 + 箱线图)
  4. 解释和推荐

个别假设检查

对于针对性检查,使用个别函数:

from scripts.assumption_checks import (
    check_normality,
    check_normality_per_group,
    check_homogeneity_of_variance,
    check_linearity,
    detect_outliers
)

# 示例:检查正态性并可视化
result = check_normality(
    data=df['score'],
    name='测试分数',
    alpha=0.05,
    plot=True
)
print(result['interpretation'])
print(result['recommendation'])

当假设违反时怎么办

正态性违反:

  • 轻度违反 + 每组 n > 30 → 继续进行参数检验(鲁棒)
  • 中度违反 → 使用非参数替代方法
  • 严重违反 → 变换数据或使用非参数检验

方差齐性违反:

  • 对于t检验 → 使用韦尔奇t检验
  • 对于ANOVA → 使用韦尔奇ANOVA或布朗-福赛斯ANOVA
  • 对于回归 → 使用鲁棒标准误差或加权最小二乘

线性违反(回归):

  • 添加多项式项
  • 变换变量
  • 使用非线性模型或GAM

参见references/assumptions_and_diagnostics.md获取全面指导。


运行统计测试

Python库

统计分析的主要库:

  • scipy.stats:核心统计测试
  • statsmodels:高级回归和诊断
  • pingouin:用户友好的统计测试,带效应量
  • pymc:贝叶斯统计建模
  • arviz:贝叶斯可视化和诊断

示例分析

带完整报告的T检验

import pingouin as pg
import numpy as np

# 运行独立t检验
result = pg.ttest(group_a, group_b, correction='auto')

# 提取结果
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]

# 报告
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

# 单因素ANOVA
aov = pg.anova(dv='score', between='group', data=df, detailed=True)
print(aov)

# 如果显著,进行事后检验
if aov['p-unc'].values[0] < 0.05:
    posthoc = pg.pairwise_tukey(dv='score', between='group', data=df)
    print(posthoc)

# 效应量
eta_squared = aov['np2'].values[0]  # 偏η²
print(f"偏η² = {eta_squared:.3f}")

带诊断的线性回归

import statsmodels.api as sm
from statsmodels.stats.outliers_influence import variance_inflation_factor

# 拟合模型
X = sm.add_constant(X_predictors)  # 添加截距
model = sm.OLS(y, X).fit()

# 摘要
print(model.summary())

# 检查多重共线性(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)

# 检查假设
residuals = model.resid
fitted = model.fittedvalues

# 残差图
import matplotlib.pyplot as plt
fig, axes = plt.subplots(2, 2, figsize=(12, 10))

# 残差 vs 拟合值
axes[0, 0].scatter(fitted, residuals, alpha=0.6)
axes[0, 0].axhline(y=0, color='r', linestyle='--')
axes[0, 0].set_xlabel('拟合值')
axes[0, 0].set_ylabel('残差')
axes[0, 0].set_title('残差 vs 拟合值')

# Q-Q图
from scipy import stats
stats.probplot(residuals, dist="norm", plot=axes[0, 1])
axes[0, 1].set_title('正态 Q-Q')

# 尺度-位置图
axes[1, 0].scatter(fitted, np.sqrt(np.abs(residuals / residuals.std())), alpha=0.6)
axes[1, 0].set_xlabel('拟合值')
axes[1, 0].set_ylabel('√|标准化残差|')
axes[1, 0].set_title('尺度-位置')

# 残差直方图
axes[1, 1].hist(residuals, bins=20, edgecolor='black', alpha=0.7)
axes[1, 1].set_xlabel('残差')
axes[1, 1].set_ylabel('频率')
axes[1, 1].set_title('残差直方图')

plt.tight_layout()
plt.show()

贝叶斯T检验

import pymc as pm
import arviz as az
import numpy as np

with pm.Model() as model:
    # 先验
    mu1 = pm.Normal('mu_group1', mu=0, sigma=10)
    mu2 = pm.Normal('mu_group2', mu=0, sigma=10)
    sigma = pm.HalfNormal('sigma', sigma=10)

    # 似然
    y1 = pm.Normal('y1', mu=mu1, sigma=sigma, observed=group_a)
    y2 = pm.Normal('y2', mu=mu2, sigma=sigma, observed=group_b)

    # 衍生量
    diff = pm.Deterministic('difference', mu1 - mu2)

    # 采样
    trace = pm.sample(2000, tune=1000, return_inferencedata=True)

# 总结
print(az.summary(trace, var_names=['difference']))

# 组1大于组2的概率
prob_greater = np.mean(trace.posterior['difference'].values > 0)
print(f"P(μ₁ > μ₂ | data) = {prob_greater:.3f}")

# 绘制后验
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
回归 0.02 0.13 0.26
卡方检验 Cramér’s V 0.07 0.21 0.35

重要:基准是指导原则。上下文很重要!

计算效应量

大多数效应量由pingouin自动计算:

# T检验返回Cohen's d
result = pg.ttest(x, y)
d = result['cohen-d'].values[0]

# ANOVA返回偏η平方
aov = pg.anova(dv='score', between='group', data=df)
eta_p2 = aov['np2'].values[0]

# 相关性:r本身是效应量
corr = pg.corr(x, y)
r = corr['r'].values[0]

效应量的置信区间

始终报告置信区间以显示精度:

from pingouin import compute_effsize_from_t

# 对于t检验
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检验:检测 d = 0.5 需要多少n?
n_required = tt_ind_solve_power(
    effect_size=0.5,
    alpha=0.05,
    power=0.80,
    ratio=1.0,
    alternative='two-sided'
)
print(f"每组所需 n: {n_required:.0f}")

# ANOVA:检测 f = 0.25 需要多少n?
anova_power = FTestAnovaPower()
n_per_group = anova_power.solve_power(
    effect_size=0.25,
    ngroups=3,
    alpha=0.05,
    power=0.80
)
print(f"每组所需 n: {n_per_group:.0f}")

敏感性分析(研究后)

确定可以检测到什么效应量:

# 每组 n=50,可以检测到什么效应?
detectable_d = tt_ind_solve_power(
    effect_size=None,  # 求解这个
    nobs1=50,
    alpha=0.05,
    power=0.80,
    ratio=1.0,
    alternative='two-sided'
)
print(f"研究可以检测 d ≥ {detectable_d:.2f}")

注意:事后功效分析(研究后计算功效)一般不推荐。使用敏感性分析代替。

参见references/effect_sizes_and_power.md获取详细指导。


报告结果

APA风格统计报告

遵循references/reporting_standards.md中的指南。

基本报告元素

  1. 描述性统计:所有组/变量的 M、SD、n
  2. 测试统计:测试名称、统计量、df、精确p值
  3. 效应量:带置信区间
  4. 假设检查:进行了哪些测试、结果、采取的措施
  5. 所有计划分析:包括非显著发现

示例报告模板

独立T检验

组 A(n = 48,M = 75.2,SD = 8.5)得分显著高于组 B(n = 52,M = 68.3,SD = 9.2),t(98) = 3.82,p < .001,d = 0.77,95% CI [0.36, 1.18],双尾。正态性假设(夏皮罗-威尔克:组 A W = 0.97,p = .18;组 B W = 0.96,p = .12)和方差齐性假设(莱文检验 F(1, 98) = 1.23,p = .27)均满足。

单因素ANOVA

单因素ANOVA显示处理条件对测试得分有显著主效应,F(2, 147) = 8.45,p < .001,η²_p = .10。使用图基HSD进行事后比较表明,条件 A(M = 78.2,SD = 7.3)得分显著高于条件 B(M = 71.5,SD = 8.1,p = .002,d = 0.87)和条件 C(M = 70.1,SD = 7.9,p < .001,d = 1.07)。条件 B 和 C 之间无显著差异(p = .52,d = 0.18)。

多元回归

进行多元线性回归,从学习时间、先验GPA和出勤率预测考试得分。整体模型显著,F(3, 146) = 45.2,p < .001,R² = .48,调整R² = .47。学习时间(B = 1.80,SE = 0.31,β = .35,t = 5.78,p < .001,95% CI [1.18, 2.42])和先验GPA(B = 8.52,SE = 1.95,β = .28,t = 4.37,p < .001,95% CI [4.66, 12.38])是显著预测因子,而出勤率不显著(B = 0.15,SE = 0.12,β = .08,t = 1.25,p = .21,95% CI [-0.09, 0.39])。多重共线性不是问题(所有 VIF < 1.5)。

贝叶斯分析

使用弱信息先验(均值差的正态分布 Normal(0, 1))进行贝叶斯独立样本t检验。后验分布表明组 A 得分高于组 B(M_diff = 6.8,95% 可信区间 [3.2, 10.4])。贝叶斯因子 BF₁₀ = 45.3 提供了组间差异的非常强证据,有 99.8% 的后验概率认为组 A 的均值超过组 B 的均值。收敛诊断令人满意(所有 R̂ < 1.01,ESS > 1000)。

贝叶斯统计

何时使用贝叶斯方法

考虑贝叶斯方法当:

  • 您有先验信息可以整合
  • 您想要关于假设的直接概率陈述
  • 样本量小或计划序贯数据收集
  • 您需要量化零假设的证据
  • 模型复杂(分层、缺失数据)

参见references/bayesian_statistics.md获取全面指导,关于:

  • 贝叶斯定理和解释
  • 先验指定(信息性、弱信息性、非信息性)
  • 带贝叶斯因子的贝叶斯假设检验
  • 可信区间 vs. 置信区间
  • 贝叶斯t检验、ANOVA、回归和分层模型
  • 模型收敛检查和后验预测检查

关键优势

  1. 直观解释:“给定数据,参数在此区间内的概率为95%”
  2. 零假设证据:可以量化无效应的支持
  3. 灵活性:无p-hacking担忧;可以随数据到达分析
  4. 不确定性量化:完整的后验分布

资源

此技能包含全面参考材料:

参考目录

  • test_selection_guide.md:选择适当统计测试的决策树
  • assumptions_and_diagnostics.md:检查和处用假设违反的详细指导
  • effect_sizes_and_power.md:计算、解释和报告效应量;进行功效分析
  • bayesian_statistics.md:贝叶斯分析方法的完整指南
  • reporting_standards.md:APA风格报告指南,带示例

脚本目录

  • assumption_checks.py:带可视化的自动假设检查
    • comprehensive_assumption_check():完整工作流
    • check_normality():带Q-Q图的正态性测试
    • check_homogeneity_of_variance():带箱线图的莱文检验
    • check_linearity():回归线性检查
    • detect_outliers():IQR和z分数异常值检测

最佳实践

  1. 尽可能预注册分析,以区分验证性和探索性分析
  2. 在解释结果前始终检查假设
  3. 报告效应量,带置信区间
  4. 报告所有计划分析,包括非显著结果
  5. 区分统计显著性和实际显著性
  6. 分析前后可视化数据
  7. 检查回归/ANOVA的诊断(残差图、VIF等)
  8. 进行敏感性分析以评估鲁棒性
  9. 共享数据和代码以实现可重复性
  10. 对违反、变换和决策保持透明

常见陷阱避免

  1. P-hacking:不要以多种方式测试直到某物显著
  2. HARKing:不要将探索性发现呈现为验证性
  3. 忽略假设:检查并报告违反
  4. 混淆显著性和重要性:p < .05 ≠ 有意义效应
  5. 不报告效应量:解释必不可少
  6. 挑选结果:报告所有计划分析
  7. 误释p值:它们不是假设为真的概率
  8. 多重比较:适当时校正家族误差率
  9. 忽略缺失数据:理解机制(MCAR、MAR、MNAR)
  10. 过度解释非显著结果:证据缺乏 ≠ 缺乏证据

入门清单

开始统计分析时:

  • [ ] 定义研究问题和假设
  • [ ] 确定适当的统计测试(使用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

在线资源