利用norm.ppf&norm.interval分别计算正态置信区间[实例]

scipy.stats.norm.ppf用于计算正态分布的累积分布函数CDF的逆函数,也称为百分位点函数。它的作用是根据给定的概率值,计算对应的随机变量值。
scipy.stats.norm.interval:用于计算正态分布的置信区间,可指定均值和标准差。
scipy.stats.t.interval:用于计算t分布的置信区间,可选择使用不同的置信水平和自由度。

import scipy.stats as stats
import numpy as np
# 指定概率值(例如,95% 置信水平对应的概率)
alpha = 0.05

# 指定样本数据和样本大小
# data = [32, 34, 36, 35, 33, 31, 32, 33, 30, 34]
data = [34,56,39,71,84,92,44,67,98,49,55,73,50,62,75,44,88,53,61,25,36,66,77,35]
sample_size = len(data)


# 执行D'Agostino's K-squared检验
stat, p_value = stats.normaltest(data)
# 输出结果
print("-------------------")
print("K-squared正态检验统计量:", stat)
print("K-squared正态检验P-value:", p_value)
# 判断是否符合正态分布的零假设
alpha = 0.05  # 显著性水平
if p_value < alpha:
    print("拒绝零假设,数据不符合正态分布。")
else:
    print("p_value>0.05无法拒绝零假设,数据符合正态分布。")
print("-------------------")

# 计算样本均值和标准误差(标准差除以样本大小的平方根)
sample_mean = sum(data) / sample_size
sample_std = (sum([(x - sample_mean) ** 2 for x in data]) / (sample_size - 1)) ** 0.5
standard_error = sample_std / (sample_size ** 0.5)

# 使用百分位点函数计算置信区间的上下限
confidence_interval_lower = stats.norm.ppf(alpha / 2, loc=sample_mean, scale=standard_error)
confidence_interval_upper = stats.norm.ppf(1 - alpha / 2, loc=sample_mean, scale=standard_error)

# 输出置信区间的上下限
print("置信区间的下限:", confidence_interval_lower)
print("置信区间的上限:", confidence_interval_upper)

print("-------------------")

# 计算均值和标准差
mean = np.mean(data)
std_dev = np.std(data, ddof=1)  # 使用ddof=1进行自由度校正
sample_size = len(data)
# 选择置信水平(例如,95%置信水平对应alpha=0.05)
alpha = 0.05
# 计算正态分布的置信区间
confidence_interval = stats.norm.interval(1 - alpha, loc=mean, scale=std_dev / np.sqrt(sample_size))
# 输出计算结果
print("norm.interval正态分布的置信区间:", confidence_interval)

print("--------t分布结果是不是与上面的很接近?-----------")
# 计算t分布的置信区间
t_confidence_interval = stats.t.interval(1 - alpha, df=sample_size - 1, loc=mean, scale=std_dev / np.sqrt(sample_size))
# 输出计算结果
print("t分布的置信区间:", t_confidence_interval)

# -------------------
# K-squared正态检验统计量: 1.12645322945576
# K-squared正态检验P-value: 0.5693689625161796
# p_value>0.05无法拒绝零假设,数据符合正态分布。
# -------------------
# 置信区间的下限: 51.79799091398577
# 置信区间的上限: 67.70200908601423
# -------------------
# norm.interval正态分布的置信区间: (51.79799091398577, 67.70200908601423)
# -------------------
# t分布的置信区间: (51.356996738889045, 68.14300326111095)
# [Finished in 5.5s]

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