关于 statistical-analysis
statistical-analysis 是一份使用 SciPy、statsmodels 等 Python 库应用统计方法的指南,涵盖常见检验、置信区间、相关性和 A/B 测试,并说明假设检查与常见误区。
主要功能
- 01T 检验、卡方检验和 ANOVA
- 02置信区间与相关性分析
- 03带显著性检查的 A/B 测试
- 04假设检查与非参数替代方法
- 05多重检验与功效分析指引
适用场景
- 01比较组均值或分类数据
- 02估计区间并分析相关性
- 03评估 A/B 测试结果
- 04检查假设并处理多重比较
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ pluginagentmarketplace/ custom-plugin-ai-data-scientist --skill statistical-analysis安装后在 Claude Code 中输入/statistical-analysis确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
assets/ab_test_config.yamlreferences/TEST_SELECTION_GUIDE.mdscripts/hypothesis_testing.py详细介绍
统计分析
运用统计方法理解数据并验证发现。
快速入门
from scipy import stats
import numpy as np
# Descriptive statistics
data = np.array([1, 2, 3, 4, 5])
print(f"Mean: {np.mean(data)}")
print(f"Std: {np.std(data)}")
# Hypothesis testing
group1 = [23, 25, 27, 29, 31]
group2 = [20, 22, 24, 26, 28]
t_stat, p_value = stats.ttest_ind(group1, group2)
print(f"P-value: {p_value}")
核心检验
T 检验(比较均值)
# One-sample: Compare to population mean
stats.ttest_1samp(data, 100)
# Two-sample: Compare two groups
stats.ttest_ind(group1, group2)
# Paired: Before/after comparison
stats.ttest_rel(before, after)
卡方检验(分类数据)
from scipy.stats import chi2_contingency
observed = np.array([[10, 20], [15, 25]])
chi2, p_value, dof, expected = chi2_contingency(observed)
方差分析(多个组)
f_stat, p_value = stats.f_oneway(group1, group2, group3)
置信区间
from scipy import stats
confidence_level = 0.95
mean = np.mean(data)
se = stats.sem(data)
ci = stats.t.interval(confidence_level, len(data)-1, mean, se)
print(f"95% CI: [{ci[0]:.2f}, {ci[1]:.2f}]")
相关性
# Pearson (linear)
r, p_value = stats.pearsonr(x, y)
# Spearman (rank-based)
rho, p_value = stats.spearmanr(x, y)
分布
# Normal
x = np.linspace(-3, 3, 100)
pdf = stats.norm.pdf(x, loc=0, scale=1)
# Sampling
samples = np.random.normal(0, 1, 1000)
# Test normality
stat, p_value = stats.shapiro(data)
A/B 测试框架
def ab_test(control, treatment, alpha=0.05):
"""
Run A/B test with statistical significance
Returns: significant (bool), p_value (float)
"""
t_stat, p_value = stats.ttest_ind(control, treatment)
significant = p_value < alpha
improvement = (np.mean(treatment) - np.mean(control)) / np.mean(control) * 100
return {
'significant': significant,
'p_value': p_value,
'improvement': f"{improvement:.2f}%"
}
结果解读
P 值 < 0.05:拒绝原假设(具有统计显著性)
P 值 >= 0.05:未能拒绝原假设(不显著)
常见误区
- 多重检验未进行校正
- 样本量过小
- 忽略假设(正态性、独立性)
- 混淆相关性与因果关系
- p-hacking(搜索显著性)
故障排除
常见问题
问题:用于 t 检验的数据不服从正态分布
# Check normality first
stat, p = stats.shapiro(data)
if p < 0.05:
# Use non-parametric alternative
stat, p = stats.mannwhitneyu(group1, group2) # Instead of ttest_ind
问题:多重比较导致假阳性增加
from statsmodels.stats.multitest import multipletests
# Apply Bonferroni correction
p_values = [0.01, 0.03, 0.04, 0.02, 0.06]
rejected, p_adjusted, _, _ = multipletests(p_values, method='bonferroni')
问题:研究效能不足(样本过小)
from statsmodels.stats.power import TTestIndPower
# Calculate required sample size
power_analysis = TTestIndPower()
sample_size = power_analysis.solve_power(
effect_size=0.5, # Medium effect (Cohen's d)
power=0.8, # 80% power
alpha=0.05 # 5% significance
)
print(f"Required n per group: {sample_size:.0f}")
问题:方差不齐
# Check with Levene's test
stat, p = stats.levene(group1, group2)
if p < 0.05:
# Use Welch's t-test (default in scipy)
t, p = stats.ttest_ind(group1, group2, equal_var=False)
问题:异常值影响结果
from scipy.stats import zscore
# Detect outliers (|z| > 3)
z_scores = np.abs(zscore(data))
clean_data = data[z_scores < 3]
# Or use robust statistics
median = np.median(data)
mad = np.median(np.abs(data - median)) # Median Absolute Deviation
调试检查清单
- 检查样本量是否充足(效能分析)
- 检验正态性假设(Shapiro-Wilk)
- 检验方差齐性(Levene's)
- 检查异常值(z 分数、IQR)
- 如有需要,进行多重检验校正
- 报告效应量,而不仅仅是 p 值
评论
支持 Markdown