利用百分位点函数ppf计算置信区间上下限
百分位点函数(Percent Point Function,PPF),也称为逆分布函数或分位数函数,是概率分布函数的逆运算。它的作用是根据给定的累积概率值,计算随机变量的值,使得该值以下的累积概率等于给定的概率。
在统计和概率论中,百分位点函数对于估计分布的特定百分位值以及在假设检验中确定拒绝域的边界非常有用。
不同的概率分布(例如正态分布、t分布、F分布等)都有自己的百分位点函数。在Python的SciPy库中,您可以使用诸如scipy.stats.norm.ppf
(正态分布的百分位点函数)或scipy.stats.t.ppf
(t分布的百分位点函数)等函数来执行这些计算。
以下是一些常见的百分位点函数的示例:
正态分布的百分位点函数示例:
import scipy.stats as stats
# 指定概率值
probability = 0.95
# 计算对应的随机变量值
x = stats.norm.ppf(probability)
# 输出计算结果
print("正态分布的百分位点:", x)
t分布的百分位点函数示例:
import scipy.stats as stats
# 指定概率值和自由度
probability = 0.95
degrees_of_freedom = 10
# 计算对应的随机变量值
x = stats.t.ppf(probability, df=degrees_of_freedom)
# 输出计算结果
print("t分布的百分位点:", x)
使用正态分布的百分位点函数stats.norm.ppf计算置信区间的上下限
import scipy.stats as stats
# 指定概率值(例如,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("K-squared正态检验统计量:", stat)
print("K-squared正态检验P-value:", p_value)
# 判断是否符合正态分布的零假设
alpha = 0.05 # 显著性水平
if p_value < alpha:
print("拒绝零假设,数据不符合正态分布。")
else:
print("p_value>0.05无法拒绝零假设,数据符合正态分布。")
# 计算样本均值和标准误差(标准差除以样本大小的平方根)
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)
使用的是T分布的百分位点函数scipy.stats.t.ppf
来计算置信区间的上下限
import scipy.stats as stats
import numpy as np
# 指定概率值(例如,95% 置信水平对应的概率)
alpha = 0.05
# 指定样本数据
data = np.array([32, 34, 36, 35, 33, 31, 32, 33, 30, 34])
# 计算样本均值和标准误差
sample_mean = np.mean(data)
sample_std = np.std(data, ddof=1) # 使用ddof=1进行自由度校正
sample_size = len(data)
standard_error = sample_std / np.sqrt(sample_size)
# 计算T分布的置信区间的上下限
t_critical = stats.t.ppf(1 - alpha / 2, df=sample_size - 1) # 自由度为样本大小减一
confidence_interval_lower = sample_mean - t_critical * standard_error
confidence_interval_upper = sample_mean + t_critical * standard_error
# 输出T分布置信区间的上下限
print("T分布置信区间的下限:", confidence_interval_lower)
print("T分布置信区间的上限:", confidence_interval_upper)
让我们通过一个示例来演示如何检查数据是否符合T分布
import numpy as np
import scipy.stats as stats
import matplotlib.pyplot as plt
# 创建一个样本数据,假设它符合T分布
np.random.seed(0)
sample_data = np.random.standard_t(df=5, size=100)
# 绘制直方图
plt.hist(sample_data, bins=20, density=True, alpha=0.6, color='b', label='Histogram')
# 绘制T分布的概率密度函数(PDF)曲线
x = np.linspace(min(sample_data), max(sample_data), 100)
pdf = stats.t.pdf(x, df=5)
plt.plot(x, pdf, 'r-', lw=2, label='T-Distribution PDF')
# 添加图例和标签
plt.legend()
plt.title('Histogram and PDF of Sample Data')
plt.xlabel('Value')
plt.ylabel('Probability Density')
# 显示图形
plt.show()
# 绘制Q-Q图
stats.probplot(sample_data, dist="t", sparams=(5,), plot=plt)
plt.title('Q-Q Plot against T-Distribution')
# 显示Q-Q图
plt.show()
# 进行正态性检验(Shapiro-Wilk检验)
shapiro_test_statistic, shapiro_p_value = stats.shapiro(sample_data)
print("Shapiro-Wilk检验统计量:", shapiro_test_statistic)
print("Shapiro-Wilk检验p值:", shapiro_p_value)
概率密度函数值(Probability Density Function,PDF值)表示在概率分布中某个随机变量的取值处的概率密度。它衡量了在给定取值附近的数据点的密度或集中度,但不是直接的概率值。
在连续概率分布中,PDF值表示随机变量在某个特定取值处的相对概率密度,它的值越大表示在该点附近的数据点越密集,但并不代表具体的概率。概率密度函数的积分可以用来计算随机变量落在一个范围内的概率。
对于连续分布,如果我们要计算在某一范围内的概率,需要对PDF在该范围内的积分。数学上,PDF值通常满足以下两个性质:
PDF值不能为负数:在任何给定点,PDF值不能为负,因为它是表示密度的值。
总积分为1:整个分布的PDF积分等于1,因为它表示了所有可能的取值的密度分布。