scipy.stats.t.interval用于计算t分布的置信区间,即给定置信水平时,计算对应的置信区间的下限和上限。
scipy.stats.t.ppf用于计算t分布的百分位点,即给定百分位数(概率)时,该函数返回给定百分位数对应的t分布的值。//它的作用是根据给定的累积概率值,计算随机变量的值,使得该值以下的累积概率等于给定的概率。
利用t.ppf&t.interval分别计算T分布置信区间[实例]
- import scipy.stats as stats
- import numpy as np
-
- # 指定概率值(例如,95% 置信水平对应的概率)
- alpha = 0.05
-
- # 指定样本数据
- data = np.array([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_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)
-
-
- print("-------------------")
- # 计算t分布的置信区间
- t_confidence_interval = stats.t.interval(1 - alpha, df=sample_size - 1, loc=sample_mean, scale=sample_std / np.sqrt(sample_size))
- # 输出计算结果
- print("t分布的置信区间:", t_confidence_interval)
-
- # T分布置信区间的下限: 51.356996738889045
- # T分布置信区间的上限: 68.14300326111095
- # -------------------
- # t分布的置信区间: (51.356996738889045, 68.14300326111095)
- # [Finished in 5.1s]
附录:多种方式进行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)