📌 目录

  1. 模块简介
  2. 常用统计分布
  3. 假设检验与 p 值
  4. 数据拟合与估计
  5. 示例:统计分析应用
  6. 出站链接与参考资料

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)


🔗 出站链接与参考资料

📘 官方文档

📚 实用教程与资源