未记录事实核验 · 状态:维护中
记录仅说明核验时间与维护状态,不保证适用于所有环境;使用前请留意正文中的版本、适用条件与风险提示。
warning 本文适用范围与待维护项
本文用于统计分支概览及模拟代码学习,各分支存在交叉,不是互斥分类。代码块共享前文的NumPy、Matplotlib与SciPy导入,应按顺序执行;所有数据均在文内模拟生成,无需外部数据集。描述统计示例的导入语法需修正;所谓Kaplan-Meier示例实际只绘制模拟时间的经验尾部比例,未利用events处理删失,不能用于患者生存估计。选型函数中的10000样本阈值仅为教学启发式,不是通用标准;工具变量示例依赖预设的有效工具变量机制,不提供现实数据的工具有效性验证或完整推断流程。
🌱 统计学的主要分支(Main Branches of Statistics)
abstract 📋 本节概览
- 🎯 学习目标:了解统计学的主要分支及其应用
- 📚 前置知识:统计学是什么|统计学是什么
- ⏱️ 预计用时:5分钟
📊 统计学的基本分类
note 📖 **传统二分法**
统计学传统上分为"描述统计学"和"推断统计学"两大类:
- 描述统计:总结和描述数据的特征
- 推断统计:基于样本数据对总体进行推断
🎯 两大核心分支详解
1. 📈 描述统计学 (Descriptive Statistics)
核心任务:对已有数据进行总结、整理和描述
主要内容:
- 集中趋势:均值、中位数、众数
- 离散程度:方差、标准差、极差
- 分布形状:偏度、峰度
- 数据可视化:直方图、箱线图、散点图
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# 生成示例数据
np.random.seed(42)
sales_data = np.random.normal(100, 20, 1000) # 模拟销售数据
# 描述统计分析
def descriptive_analysis(data):
print("=== 描述统计分析 ===")
print(f"均值: {np.mean(data):.2f}")
print(f"中位数: {np.median(data):.2f}")
print(f"标准差: {np.std(data):.2f}")
print(f"最小值: {np.min(data):.2f}")
print(f"最大值: {np.max(data):.2f}")
print(f"四分位数: {np.percentile(data, [25, 50, 75])}")
# 可视化
fig, axes = plt.subplots(1, 3, figsize=(15, 5))
# 直方图
axes[0].hist(data, bins=30, alpha=0.7, edgecolor='black')
axes[0].set_title('数据分布直方图')
axes[0].set_xlabel('数值')
axes[0].set_ylabel('频次')
# 箱线图
axes[1].boxplot(data)
axes[1].set_title('箱线图')
axes[1].set_ylabel('数值')
# Q-Q图
from scipy import stats
stats.probplot(data, dist="norm", plot=axes[2])
axes[2].set_title('Q-Q图(正态性图形诊断)')
plt.tight_layout()
plt.show()
descriptive_analysis(sales_data)
应用场景:
- 业务报表制作
- 市场调研总结
- 用户行为分析
- 财务数据汇总
2. 🔍 推断统计学 (Inferential Statistics)
核心任务:基于样本数据对总体参数进行估计和检验
主要内容:
- 参数估计:点估计、区间估计
- 假设检验:t检验、卡方检验、方差分析
- 回归分析:线性回归、多元回归
- 实验设计:A/B测试、随机对照实验
from scipy import stats
from sklearn.model_selection import train_test_split
# 推断统计示例
def inferential_analysis():
# 1. 单样本t检验
sample_scores = np.random.normal(85, 10, 30)
t_stat, p_value = stats.ttest_1samp(sample_scores, 80) # 检验均值是否为80
print(f"单样本t检验: t={t_stat:.3f}, p={p_value:.3f}")
# 2. 置信区间估计
confidence_interval = stats.t.interval(0.95, len(sample_scores)-1,
loc=np.mean(sample_scores),
scale=stats.sem(sample_scores))
print(f"95%置信区间: {confidence_interval}")
# 3. 两样本比较
group_a = np.random.normal(85, 10, 30)
group_b = np.random.normal(90, 10, 30)
t_stat, p_value = stats.ttest_ind(group_a, group_b)
print(f"两样本t检验: t={t_stat:.3f}, p={p_value:.3f}")
# 4. 相关性分析
x = np.random.randn(100)
y = 2 * x + np.random.randn(100)
correlation, p_value = stats.pearsonr(x, y)
print(f"皮尔逊相关系数: r={correlation:.3f}, p={p_value:.3f}")
inferential_analysis()
应用场景:
- A/B测试分析
- 市场调研推断
- 质量控制检验
- 科学研究验证
🌐 现代统计学的扩展分支
3. 🧮 数理统计学 (Mathematical Statistics)
特点:注重理论基础和数学推导
核心内容:
- 概率论基础
- 统计量的分布理论
- 最大似然估计
- 贝叶斯统计
# 最大似然估计示例
from scipy.optimize import minimize
def maximum_likelihood_estimation():
# 生成正态分布数据
true_mu, true_sigma = 5, 2
data = np.random.normal(true_mu, true_sigma, 100)
# 定义负对数似然函数
def neg_log_likelihood(params):
mu, sigma = params
if sigma <= 0:
return np.inf
ll = -np.sum(stats.norm.logpdf(data, mu, sigma))
return ll
# 最大似然估计
result = minimize(neg_log_likelihood, x0=[0, 1], method='L-BFGS-B')
estimated_mu, estimated_sigma = result.x
print(f"真实参数: μ={true_mu}, σ={true_sigma}")
print(f"估计参数: μ={estimated_mu:.3f}, σ={estimated_sigma:.3f}")
maximum_likelihood_estimation()
4. 📊 应用统计学 (Applied Statistics)
特点:面向实际问题解决
主要领域:
- 生物统计学:医学研究、流行病学
- 经济统计学:宏观经济分析、市场研究
- 工业统计学:质量控制、六西格玛
- 社会统计学:人口普查、社会调研
# 模拟时间的经验尾部分布示例(未处理删失,非Kaplan-Meier估计)
from sklearn.datasets import make_regression
import matplotlib.pyplot as plt
def survival_analysis_demo():
# 模拟患者生存数据
np.random.seed(42)
n_patients = 200
# 生存时间(天)
survival_times = np.random.exponential(scale=365, size=n_patients)
# 是否发生事件(死亡)
events = np.random.binomial(1, 0.3, n_patients)
# 绘制生存曲线
time_points = np.linspace(0, max(survival_times), 100)
survival_probs = []
for t in time_points:
at_risk = sum(survival_times >= t)
survival_prob = at_risk / n_patients
survival_probs.append(survival_prob)
plt.figure(figsize=(10, 6))
plt.plot(time_points, survival_probs, linewidth=2)
plt.xlabel('时间(天)')
plt.ylabel('模拟时间大于等于当前时间的样本比例')
plt.title('模拟时间的经验尾部曲线(未处理删失)')
plt.grid(True, alpha=0.3)
plt.show()
print(f"模拟时间的样本中位数: {np.median(survival_times):.1f}天")
survival_analysis_demo()
5. 🤖 计算统计学 (Computational Statistics)
特点:结合计算机技术解决复杂统计问题
核心方法:
- 蒙特卡罗方法:随机模拟
- 自助法(Bootstrap):重抽样技术
- 贝叶斯计算:MCMC方法
- 机器学习统计:统计学习理论
# Bootstrap重抽样示例
def bootstrap_analysis(data, n_bootstrap=1000):
"""Bootstrap置信区间估计"""
bootstrap_means = []
for _ in range(n_bootstrap):
# 有放回抽样
bootstrap_sample = np.random.choice(data, size=len(data), replace=True)
bootstrap_means.append(np.mean(bootstrap_sample))
# 计算置信区间
confidence_interval = np.percentile(bootstrap_means, [2.5, 97.5])
plt.figure(figsize=(10, 6))
plt.hist(bootstrap_means, bins=50, alpha=0.7, density=True)
plt.axvline(np.mean(data), color='red', linestyle='--', label='原始均值')
plt.axvline(confidence_interval[0], color='green', linestyle='--', label='95%置信区间')
plt.axvline(confidence_interval[1], color='green', linestyle='--')
plt.xlabel('Bootstrap均值')
plt.ylabel('密度')
plt.title('Bootstrap分布')
plt.legend()
plt.show()
print(f"原始数据均值: {np.mean(data):.3f}")
print(f"Bootstrap均值: {np.mean(bootstrap_means):.3f}")
print(f"95%置信区间: [{confidence_interval[0]:.3f}, {confidence_interval[1]:.3f}]")
# 演示
sample_data = np.random.exponential(2, 50) # 非正态分布数据
bootstrap_analysis(sample_data)
6. 📈 贝叶斯统计学 (Bayesian Statistics)
特点:基于贝叶斯定理的统计推断
核心思想:
- 先验信息 + 数据 → 后验分布
- 参数被视为随机变量
- 不确定性的完整描述
# 贝叶斯推断示例
def bayesian_inference_demo():
# 硬币投掷问题:估计正面概率
# 观察到的数据:10次投掷中有7次正面
# 先验分布:Beta(1,1) 均匀分布
alpha_prior, beta_prior = 1, 1
# 数据
heads, total = 7, 10
# 后验分布:Beta(alpha_prior + heads, beta_prior + total - heads)
alpha_posterior = alpha_prior + heads
beta_posterior = beta_prior + total - heads
# 绘制先验、似然和后验分布
x = np.linspace(0, 1, 1000)
prior = stats.beta.pdf(x, alpha_prior, beta_prior)
likelihood = stats.binom.pmf(heads, total, x)
posterior = stats.beta.pdf(x, alpha_posterior, beta_posterior)
plt.figure(figsize=(12, 8))
plt.subplot(2, 2, 1)
plt.plot(x, prior, label='先验分布 Beta(1,1)')
plt.title('先验分布')
plt.xlabel('θ (正面概率)')
plt.ylabel('密度')
plt.legend()
plt.subplot(2, 2, 2)
plt.plot(x, likelihood, label=f'似然函数 Binom({heads},{total})')
plt.title('似然函数')
plt.xlabel('θ (正面概率)')
plt.ylabel('似然')
plt.legend()
plt.subplot(2, 2, 3)
plt.plot(x, posterior, label=f'后验分布 Beta({alpha_posterior},{beta_posterior})')
plt.title('后验分布')
plt.xlabel('θ (正面概率)')
plt.ylabel('密度')
plt.legend()
plt.subplot(2, 2, 4)
plt.plot(x, prior, label='先验', alpha=0.6)
plt.plot(x, posterior, label='后验', alpha=0.8)
plt.title('先验vs后验')
plt.xlabel('θ (正面概率)')
plt.ylabel('密度')
plt.legend()
plt.tight_layout()
plt.show()
# 后验统计
posterior_mean = alpha_posterior / (alpha_posterior + beta_posterior)
posterior_std = np.sqrt(alpha_posterior * beta_posterior /
((alpha_posterior + beta_posterior)**2 *
(alpha_posterior + beta_posterior + 1)))
print(f"后验均值: {posterior_mean:.3f}")
print(f"后验标准差: {posterior_std:.3f}")
print(f"95%可信区间: {stats.beta.interval(0.95, alpha_posterior, beta_posterior)}")
bayesian_inference_demo()
🎯 各分支的应用对比
| 分支 | 主要特点 | 适用场景 | 常用工具 |
|---|---|---|---|
| 描述统计 | 数据总结 | 报表制作、EDA | pandas, matplotlib |
| 推断统计 | 样本推总体 | A/B测试、假设检验 | scipy.stats |
| 数理统计 | 理论基础 | 方法研发、理论研究 | numpy, sympy |
| 应用统计 | 解决实际问题 | 各行业应用 | 专业软件包 |
| 计算统计 | 算法实现 | 大数据、复杂模型 | sklearn, pytorch |
| 贝叶斯统计 | 不确定性建模 | 风险评估、决策支持 | pymc3, stan |
💼 如何选择合适的统计分支
🎯 根据问题类型选择
def choose_statistical_approach(problem_type, data_size, prior_knowledge):
"""
根据问题特点选择统计方法
"""
recommendations = []
if problem_type == "数据探索":
recommendations.append("描述统计学 - 使用pandas, matplotlib进行EDA")
elif problem_type == "假设验证":
recommendations.append("推断统计学 - 使用scipy.stats进行假设检验")
elif problem_type == "预测建模":
if data_size > 10000:
recommendations.append("计算统计学 - 使用sklearn, xgboost等")
else:
recommendations.append("数理统计学 - 关注模型的统计性质")
elif problem_type == "风险评估":
if prior_knowledge:
recommendations.append("贝叶斯统计学 - 融合先验信息")
else:
recommendations.append("推断统计学 - 频率派方法")
elif problem_type == "行业应用":
recommendations.append("应用统计学 - 选择专门的领域方法")
return recommendations
# 示例使用
problem_scenarios = [
("数据探索", 1000, False),
("假设验证", 500, False),
("预测建模", 50000, False),
("风险评估", 2000, True),
("行业应用", 10000, True)
]
for scenario in problem_scenarios:
problem, size, prior = scenario
suggestions = choose_statistical_approach(problem, size, prior)
print(f"\n问题类型: {problem}")
print(f"数据规模: {size}, 先验知识: {'有' if prior else '无'}")
print("建议方法:")
for suggestion in suggestions:
print(f" - {suggestion}")
⚡ 现代统计学发展趋势
1. 🧠 与机器学习的融合
- 统计学习理论:理论基础
- 深度学习的统计解释:正则化、Dropout的统计意义
- 可解释AI:统计方法增强模型可解释性
2. 📊 大数据统计
- 流式统计:在线学习算法
- 分布式统计:MapReduce统计计算
- 高维统计:维度灾难的应对
3. 🔬 因果推断
- 因果图模型:DAG表示因果关系
- 工具变量法:处理内生性问题
- 断点回归:自然实验设计
# 因果推断示例:工具变量法
def instrumental_variable_demo():
"""
演示工具变量法解决内生性问题
"""
np.random.seed(42)
n = 1000
# 生成数据
z = np.random.normal(0, 1, n) # 工具变量
u = np.random.normal(0, 1, n) # 不可观测误差项
# 内生变量 x 与误差项 u 相关
x = 2 * z + u + np.random.normal(0, 0.5, n)
# 结果变量 y
beta_true = 1.5 # 真实因果效应
y = beta_true * x + u + np.random.normal(0, 0.5, n)
# 普通最小二乘法(有偏估计)
from sklearn.linear_model import LinearRegression
ols = LinearRegression()
ols.fit(x.reshape(-1, 1), y)
beta_ols = ols.coef_[0]
# 工具变量法(一致性估计)
# 两阶段最小二乘法
# 第一阶段:x对z回归
stage1 = LinearRegression()
stage1.fit(z.reshape(-1, 1), x)
x_fitted = stage1.predict(z.reshape(-1, 1))
# 第二阶段:y对拟合的x回归
stage2 = LinearRegression()
stage2.fit(x_fitted.reshape(-1, 1), y)
beta_iv = stage2.coef_[0]
print(f"真实因果效应: {beta_true}")
print(f"OLS估计 (有偏): {beta_ols:.3f}")
print(f"IV估计 (一致): {beta_iv:.3f}")
return beta_true, beta_ols, beta_iv
instrumental_variable_demo()
📚 学习路径建议
🎓 初学者路径
- 统计学基础 → 2. 描述统计 → 3. 概率论 → 4. 推断统计
🔬 研究者路径
- 数理统计 → 2. 高等概率论 → 3. 渐近理论 → 4. 非参数统计
💼 实践者路径
- 应用统计 → 2. 计算统计 → 3. 机器学习统计 → 4. 领域专业知识
🤖 数据科学路径
- 描述统计 → 2. 推断统计 → 3. 计算统计 → 4. 贝叶斯方法 → 5. 因果推断
🔗 相关概念链接
📖 基础概念
🛠️ 技术工具
📊 高级话题
📝 总结
统计学的各个分支各有特色,相互补充:
- 描述统计为数据分析提供基础工具
- 推断统计实现从样本到总体的科学推断
- 数理统计提供坚实的理论基础
- 应用统计解决实际问题
- 计算统计处理复杂数据和模型
- 贝叶斯统计提供不确定性的完整描述
现代数据分析师需要掌握多个分支的核心方法,根据具体问题选择合适的统计工具。
Tags: #统计学 #分支 #基础 #描述统计 #推断统计 #贝叶斯 #应用统计