左右T检验都是用于比较两组数据之间的差异,但它们的应用场景和假设略有不同。
左尾T检验(One-tailed T-test)用于检查一个样本是否显著地小于另一个样本。它的零假设是一个样本的平均值小于或等于另一个样本的平均值。
右尾T检验(One-tailed T-test)则用于检查一个样本是否显著地大于另一个样本。它的零假设是一个样本的平均值大于或等于另一个样本的平均值。
如果你想查看两组数据之间是否存在任何显著的差异,而不限定于是大还是小,你应该使用双尾T检验(Two-tailed T-test)。
stats.t.sf
是Scipy库中用于计算学生t分布的生存函数(Survival Function)的函数。生存函数是一个概率密度函数的补函数,它表示随机变量大于某个值的概率。具体来说,stats.t.sf(x, df)
计算了自由度为 df
的t分布中,随机变量大于 x
的概率。
stats.t.cdf
是Scipy库中用于计算学生t分布的累积分布函数(Cumulative Distribution Function)的函数。累积分布函数给出了随机变量小于或等于某个值的概率。具体来说,stats.t.cdf(x, df)
计算了自由度为 df
的t分布中,随机变量小于或等于 x
的概率。
在下列代码中,我们首先生成了两组示例数据。然后使用 stats.ttest_ind
执行了独立样本的T检验,得到了t统计量和p值。接下来,我们计算了自由度,并使用 stats.t.cdf
计算了t统计量在t分布中的位置。最后,我们使用 stats.t.sf
计算了右尾的p值。
import numpy as np
import scipy.stats as stats
# 生成示例数据
group1 = np.random.normal(5, 2, 30) # 第一组数据
group2 = np.random.normal(6, 2, 30) # 第二组数据
# 执行独立样本T检验
t_stat, p_value = stats.ttest_ind(group1, group2)
# 计算自由度
df = len(group1) + len(group2) - 2
# 计算t统计量在t分布中的位置
# stats.t.cdf(x, df) 计算了自由度为 df 的t分布中,随机变量小于或等于 x 的概率
t_cdf = stats.t.cdf(t_stat, df)
# 计算t统计量右侧的概率(p-value)
# stats.t.sf(x, df) 计算了自由度为 df 的t分布中,随机变量大于 x 的概率。
p_right = stats.t.sf(t_stat, df)
# 输出结果
print(f"独立样本T检验结果:t_stat = {t_stat}, p_value = {p_value}")
print(f"t统计量在t分布中的位置 (CDF):{t_cdf}")
print(f"p-value (右尾):{p_right}")
# 独立样本T检验结果:t_stat = -3.9177011382620153, p_value = 0.0002382448506984628
# t统计量在t分布中的位置 (CDF):0.0001191224253492314
# p-value (右尾):0.9998808775746508
-----------
我们首先生成了两组示例数据(group1
和 group2
)。然后,分别执行了左尾和右尾T检验,并打印了检验的结果。最后,通过Matplotlib库绘制了两组数据的直方图,以便直观地比较它们的分布。
import numpy as np
import scipy.stats as stats
import matplotlib.pyplot as plt
# 生成示例数据
group1 = np.random.normal(5, 2, 30) # 第一组数据
group2 = np.random.normal(6, 2, 30) # 第二组数据
# 执行左尾T检验
t_stat_left, p_value_left = stats.ttest_ind(group1, group2, alternative='less')
# 执行右尾T检验
t_stat_right, p_value_right = stats.ttest_ind(group1, group2, alternative='greater')
# 打印结果
print(f"左尾T检验结果:t_stat = {t_stat_left}, p_value = {p_value_left}")
print(f"右尾T检验结果:t_stat = {t_stat_right}, p_value = {p_value_right}")
# 绘制两组数据的直方图
plt.hist(group1, alpha=0.5, label='Group 1', color='blue')
plt.hist(group2, alpha=0.5, label='Group 2', color='green')
plt.legend(loc='upper right')
plt.title('Histogram of Group 1 and Group 2')
plt.show()
----------
在这个示例中,我们首先设置了自由度为10,然后生成了一系列x值,计算了自由度为10的T分布的概率密度函数。最后,使用Matplotlib绘制了T分布的曲线图。
import numpy as np
import matplotlib.pyplot as plt
import scipy.stats as stats
plt.rcParams['font.sans-serif'] = ['SimHei'] # 防止中文标签乱码
plt.rcParams['axes.unicode_minus'] = False
# 设定自由度
df = 10
# 生成x值范围
# np.linspace 是NumPy库中用于创建等间隔的一维数组的函数
x = np.linspace(-4, 4, 1000)
# 计算T分布的概率密度函数
pdf = stats.t.pdf(x, df)
# 绘制T分布曲线图
plt.plot(x, pdf, label=f'T分布 (df={df})', color='blue')
plt.xlabel('x')
plt.ylabel('Probability Density')
plt.title(f'T分布 (df={df})')
plt.legend()
plt.show()