T检验两个函数stats.t.cdf和stats.t.sf(左尾/右尾T检验)

左右T检验都是用于比较两组数据之间的差异,但它们的应用场景和假设略有不同。

  1. 左尾T检验(One-tailed T-test)用于检查一个样本是否显著地小于另一个样本。它的零假设是一个样本的平均值小于或等于另一个样本的平均值。

  2. 右尾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

-----------
我们首先生成了两组示例数据(group1group2)。然后,分别执行了左尾和右尾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()

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值