Z检验scipy.stats.norm的相关计算

scipy.stats.norm 是 Scipy 库中用于处理正态分布的模块。它包含了一系列函数,允许你计算正态分布的概率密度函数、累积分布函数、生存函数等。

在Python中,进行Z检验通常需要手动计算Z分数,并使用标准正态分布的函数(例如累积分布函数)来获取p值。Scipy库是一个强大的统计学工具,提供了一些相关的函数,包括:

  1. scipy.stats.norm.cdf

    • 用于计算标准正态分布的累积分布函数(Cumulative Distribution Function,CDF),即给定值以下的概率。
  2. scipy.stats.norm.sf

    • 用于计算标准正态分布的生存函数(Survival Function),即给定值以上的概率。
  3. scipy.stats.zscore

    • 用于计算给定数据的Z分数。
import numpy as np
from scipy.stats import norm, zscore

# 示例数据
data = np.random.normal(loc=28, scale=5, size=100)

# 假设的总体均值
population_mean = 26

# 样本均值和标准差
sample_mean = np.mean(data)
sample_std = np.std(data, ddof=1)  # 使用ddof=1来计算样本标准差

# 计算Z分数
z_score = (sample_mean - population_mean) / (sample_std / np.sqrt(len(data)))

# 计算双尾p值
p_value = 2 * norm.sf(np.abs(z_score))

# 使用zscore函数计算Z分数
# z_scores_data = zscore(data)

# 打印结果
print(f"Z分数 (手动计算): {z_score}, 双尾p值: {p_value}")
#print(f"Z分数 (使用zscore函数): {z_scores_data}")

---------

from scipy.stats import norm

# 计算正态分布的概率密度函数(PDF)在某点的值
pdf_value = norm.pdf(0)

# 计算正态分布的累积分布函数(CDF)在某点的值
cdf_value = norm.cdf(0)

# 计算正态分布的生存函数(SF)在某点的值
sf_value = norm.sf(0)

print(f"PDF在0点的值: {pdf_value}")
print(f"CDF在0点的值: {cdf_value}")
print(f"SF在0点的值: {sf_value}")

-------

# 绘制直方图、概率密度函数曲线、检验样本是否来自正态分布

import matplotlib.pyplot as plt
import numpy as np
import scipy.stats as stats
from scipy.stats import normaltest
from scipy.stats import norm
plt.rcParams['font.sans-serif'] = ['SimHei']  # 防止中文标签乱码
plt.rcParams['axes.unicode_minus'] = False

# 生成正态分布样本
x = np.random.normal(loc=12, scale=2.5, size=340)

# 绘制直方图
plt.hist(x, bins=30, density=True, alpha=0.7, color='blue', edgecolor='black')

# 生成正态分布的概率密度函数曲线
xmin, xmax = plt.xlim() #plt.xlim() 返回当前的 x 轴范围(x-axis limits)
x_range = np.linspace(xmin, xmax, 100)
pdf = norm.pdf(x_range, np.mean(x), np.std(x))
# 绘制概率密度函数曲线
plt.plot(x_range, pdf, 'k-', linewidth=2)
# 添加标题和标签
plt.title('正态分布图')
plt.xlabel('随机变量值')
plt.ylabel('频率')
# 显示图形
plt.show()

# scipy.stats.normaltest 是 Scipy 中用于检验样本是否来自正态分布的函数。
# normaltest它基于 D'Agostino and Pearson's test,它结合了样本的偏度和峰度来进行判断。
# 进行正态性检验
statistic, p_value = normaltest(x)
# 打印结果
print(f"统计量: {statistic}, p值: {p_value}")
# 判断正态性
if p_value < 0.05:
    print("样本不是来自正态分布")
else:
    print("样本可能来自正态分布")


# 正态性检验 - Shapiro-Wilk检验
stat, p = stats.shapiro(x)
print("Shapiro-Wilk检验统计量:", stat)
print("Shapiro-Wilk检验p值:", p)

你可能感兴趣的:(人工智能,算法,机器学习,python,概率论,numpy,数据结构)