📌 目录
- 模块简介
- 常用统计分布
- 假设检验与 p 值
- 数据拟合与估计
- 示例:统计分析应用
- 出站链接与参考资料
1. 模块简介
scipy.stats
是 SciPy 中用于统计计算和数据分析的模块。它包括了各种概率分布、统计检验方法、描述性统计量、假设检验等功能,广泛应用于数据分析、机器学习、金融分析、实验设计等领域。
主要功能包括:
- 概率分布:提供了多种常见的概率分布,如正态分布、卡方分布等。
- 统计检验:如 t 检验、卡方检验、方差分析等。
- 数据拟合:提供了多种方法进行曲线拟合与参数估计。
2. 常用统计分布
正态分布(Normal Distribution)
正态分布是最常见的概率分布之一,广泛应用于各种统计分析。
from scipy.stats import norm
import numpy as np
import matplotlib.pyplot as plt
# 生成正态分布数据
mu, sigma = 0, 0.1 # 均值与标准差
data = norm.rvs(mu, sigma, size=1000)
# 绘制正态分布直方图
plt.hist(data, bins=30, density=True, alpha=0.6, color='g')
# 绘制理论正态分布曲线
xmin, xmax = plt.xlim()
x = np.linspace(xmin, xmax, 100)
p = norm.pdf(x, mu, sigma)
plt.plot(x, p, 'k', linewidth=2)
title = "Fit results: mu = %.2f, std = %.2f" % (mu, sigma)
plt.title(title)
plt.show()
t 分布(Student’s t Distribution)
t 分布用于在样本量较小的情况下进行参数估计。
from scipy.stats import t
# 生成 t 分布数据
df = 10 # 自由度
t_data = t.rvs(df, size=1000)
# 绘制 t 分布直方图
plt.hist(t_data, bins=30, density=True, alpha=0.6, color='b')
# 绘制理论 t 分布曲线
xmin, xmax = plt.xlim()
x = np.linspace(xmin, xmax, 100)
p = t.pdf(x, df)
plt.plot(x, p, 'r', linewidth=2)
plt.title(f"t分布,自由度={df}")
plt.show()
3. 假设检验与 p 值
假设检验是统计分析中的一个重要部分,用于判断样本数据是否与假设分布一致。
单样本 t 检验
单样本 t 检验用于判断样本的均值是否与已知的值有显著差异。
from scipy.stats import ttest_1samp
# 假设样本数据
sample_data = np.random.normal(5, 2, size=1000)
# 执行单样本 t 检验,检验样本均值是否为5
t_stat, p_value = ttest_1samp(sample_data, 5)
print(f"t 统计量: {t_stat}, p 值: {p_value}")
卡方检验
卡方检验用于判断分类数据的分布是否与期望的分布一致。
from scipy.stats import chi2_contingency
# 创建观测数据表(如二维分类表)
observed = np.array([[10, 20], [20, 30]])
# 执行卡方检验
chi2_stat, p_val, dof, expected = chi2_contingency(observed)
print(f"卡方统计量: {chi2_stat}, p 值: {p_val}")
4. 数据拟合与估计
最小二乘拟合
最小二乘拟合用于拟合直线或其他类型的曲线,最小化数据点与拟合曲线之间的误差。
from scipy.optimize import curve_fit
# 创建一个示例数据集
def model(x, a, b):
return a * x + b
x_data = np.linspace(0, 10, 100)
y_data = 3 * x_data + 2 + np.random.normal(0, 1, size=100)
# 使用最小二乘法拟合数据
params, covariance = curve_fit(model, x_data, y_data)
# 可视化拟合结果
plt.scatter(x_data, y_data, label='数据点')
plt.plot(x_data, model(x_data, *params), label='拟合曲线', color='red')
plt.legend()
plt.show()
高斯分布拟合
使用最大似然估计来拟合数据为高斯分布。
from scipy.stats import norm
# 使用最大似然估计拟合数据
mu, std = norm.fit(data)
# 绘制拟合结果
plt.hist(data, bins=30, density=True, alpha=0.6, color='g')
# 绘制拟合的高斯分布
xmin, xmax = plt.xlim()
x = np.linspace(xmin, xmax, 100)
p = norm.pdf(x, mu, std)
plt.plot(x, p, 'k', linewidth=2)
plt.title(f"高斯分布拟合: mu = {mu:.2f}, std = {std:.2f}")
plt.show()
5. 示例:统计分析应用
示例:多重假设检验
当进行多次假设检验时,需要对 p 值进行校正,以控制假阳性率。
from scipy.stats import fdr_bh
# 生成多个假设检验的 p 值
p_values = np.random.uniform(0, 1, size=100)
# 使用 FDR 校正
_, corrected_p_values = fdr_bh(p_values)
print("校正后的 p 值:", corrected_p_values)
🔗 出站链接与参考资料
📘 官方文档
scipy.stats
官方手册:
https://docs.scipy.org/doc/scipy/reference/stats.html
📚 实用教程与资源
- Python 中的统计分析:
https://realpython.com/python-statistics/ - SciPy 数据拟合与统计分析:
https://scipy-lectures.org/advanced/statistics/
发表回复