生信统计学1 - T检验和Z检验

假设检验通过统计学手段判断样本数据是否支持某个假设,从而基于数据作出推断。

1. T检验(T-test)

T检验适用于比较2个样本平均值之间是否存在显著差异

1.1 T检验原理

假设2个样本有相同的分布,如果2个样本平均值差异显著,则表明两者可能为不同分布。

原假设(H0):2个样本平均值无显著差异,即 μ1=μ2。

备择假设(H1):2个样本平均值有显著差异,即 μ1≠μ2 。

1.2 T检验公式

对于独立样本t检验(又称为双样本t检验):

分子表示2个样本的平均值之差,分母表示2个样本各自方差平方比上样本数量的算术平方根。

从下图公式可以看出,T检验需要计算t值,通过其判断2个样本平均值是否存在显著差异
T检验公式

结论:

t值通过查找t分布表可得到p值,p值越小,越说明样本间差异显著;如果p值小于显著性水平阈值(通常为0.05),则拒绝原假设H0

1.3 T检验适用范围:

T检验计算简单,适用于正态分布的样本数据,并要求比较样本之间方差大小相差较小;但当样本分布为非正态分布且样本数量较少,T检验一般不太适用

在实际应用中,可用于比较实验组和控制组的2个样本的均值差异是否显著。

1.4 python实现实验组数据和对照组数据的T检验

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from scipy import stats

# 生成2个不同均值的样本数据(实验 VS 对照)
np.random.seed(123)
# 平均值为10,标准差为3,数据数量100个
experiment_data = np.random.normal(10, 3, 100)  
 # 平均值为15,标准差为4,数据数量100个
control_data = np.random.normal(15, 4, 100) 

# t-test 两组数据的均值
t_stat, p_value = stats.ttest_ind(experiment_data, control_data)
print(f"T-value: {t_stat}, P-value: {p_value}")
# T-value: -9.353755620233024, P-value: 1.8665012625102836e-17

####### 核密度图 ########
# 设置图大小
plt.figure(figsize=(10, 6))
sns.kdeplot(experiment_data, label="experiment data (Mean=10)", shade=True)
sns.kdeplot(control_data, label="control data (Mean=15)", shade=True)
plt.legend()
plt.show()

####### 箱线图 #######
sns.boxplot(data=[experiment_data, control_data])
plt.xticks([0, 1], ["experiment data", "control data"])

plt.suptitle("T-Test between experiment and control", fontsize=12)
plt.tight_layout()
plt.show()

结论:

t值(T-value: -9.353755620233024),p值(P-value: 1.8665012625102836e-17)小于0.05,拒绝原假设H0即2个样本数据集存在显著差异

核密度图

核密度图曲线峰值为2个数据集的平均值,反应了2个数据集的数据分布情况。
核密度图

箱线图

箱线图上横线和下横线分别表示上四分位数、下四分位数,箱子中间横线表示平均值,原点表示异常值,可直观看出2个数据集在均值上的差异。

箱线图

2. Z检验(Z-test)

Z检验主要用于样本数量较多已知总体的标准差的情况,可检验单个样本与总体样本平均值之间的差异,也可以比较2个样本之间平均值的差异。

2.1 Z检验原理

原假设(H0):样本均值与总体均值无显著差异,或两个样本均值无显著差异
备择假设(H1):样本均值与总体均值有显著差异,或两个样本均值有显著差异

2.2 Z检验公式

Z检验公式

|Z|值与P值结论

Z值与p值结论图

2.3 Z检验适用范围:

样本较大、已知标准差,并不适用于小样本数据。

2.4 python实现单个样本和总体样本的Z检验

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from scipy import stats


# 已知总体均值和方差数据
# 假设总体均值为15,总体SD为3.5,样本数量100个,进行单样本z检验
total_mean = 15
total_sd = 3.5
n = 100

np.random.seed(123)
# 从正态分布总体数据中获取样本数据
sample = np.random.normal(total_mean , total_sd , n)

# 求样本均值和标准差
sample_mean = np.mean(sample)
sample_std = np.std(sample, ddof=1)

# 计算公式
p_value = 2 * (1 - stats.norm.cdf(abs((sample_mean - total_mean) / (total_sd / np.sqrt(n)))))

print(f"Z-value: {z_stat}, P-value: {p_value}")
# z_value: -3.9513638778274593, P-value: 7.770706713938758e-05

plt.figure(figsize=(10, 6))

# 核密度图
sns.kdeplot(sample, label="Sample Distribution", shade=True)

# 添加总体均值和假设均值的竖线
plt.axvline(np.mean(sample), linestyle='--', label='Sample Mean')
plt.axvline(total_mean, color='red', linestyle='--', label='Total sample Mean')

plt.legend()
plt.title("Z-Test")
plt.tight_layout()
plt.show()

Z检验结论:
通过z统计量和p值,我们可以判断样本均值与假设均值是否有显著差异。如果p值小于0.05,则拒绝原假设;上述z-value绝对值2.68且大于p-value小于0.01, 单样本与总体均值差异非常显著

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

生信与基因组学

每一份鼓励是我坚持下去动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值