假设检验之 :秩和检验
秩和检验:
- 用于比较两组独立样本的中位数是否有明显差异。它不需要对数据的分布进行任何假设,适用于任何两组样本大小相等或不等、符合连续性变量的情况。
- 在进行 Mann-Whitney U 检验时,需要根据研究问题确定备择假设类型来选择使用双侧检验还是单侧检验。
- 如果没有明确的预测或假设关于哪个样本的中位数更高或更低,那么应该使用双侧检验。
- 双侧检验的备择假设是两组样本的中位数不相等,即 μx ≠ μy。这种情况通常适用于探究两组样本之间是否存在差异或者对两组样本进行对比的目的。
- 而如果有特定的预测或假设表明一个样本的中位数要大于或小于另一个样本,那么应该使用单侧检验。
- 例如,在某个药物疗效研究中,研究者可能会预测使用药物的组的中位数显著高于使用安慰剂的组,因此应该采用单侧检验,即备择假设为 μx > μy。
导入数据处理常用相关包
import numpy as np
import pandas as pd
from scipy.stats import describe
from scipy.stats import normaltest
from scipy.stats import levene
from scipy.stats import ttest_ind
from scipy.stats import f_oneway
from scipy.stats import mannwhitneyu
读取数据添加一列作为基因名
data = pd.read_excel("express.xlsx")
data.insert(0, column='Gene', value=["gene"+str(x) for x in range(1,1+data.shape[0])])
data.head(3)
Gene | FPKM | TPM | |
---|---|---|---|
0 | gene1 | 367.120483 | 458.200928 |
1 | gene2 | 204.922272 | 255.762268 |
2 | gene3 | 516.293945 | 644.383423 |
正态性检验:
tpm = normaltest(data['TPM'])
fpkm= normaltest(data['FPKM'])
print(f'{tpm}')
print(f'{fpkm}')
print("\n输出其他描述信息:")
print(describe(tpm))
print(describe(fpkm))
out: p 值 << 0.05 拒绝H0假设 不符合正态分布
NormaltestResult(statistic=57.70339700520858, pvalue=2.95030249660953e-13)
NormaltestResult(statistic=57.7037787800525, pvalue=2.949739374720097e-13)
输出其他描述信息:
DescribeResult(nobs=2, minmax=(2.95030249660953e-13, 57.70339700520858), mean=28.85169850260444, variance=1664.8410129703402, skewness=-2.2721514099690834e-16, kurtosis=-2.0)
DescribeResult(nobs=2, minmax=(2.949739374720097e-13, 57.7037787800525), mean=28.8518893900264, variance=1664.8630427486016, skewness=-2.2721063118214863e-16, kurtosis=-2.0)
方差齐性检验:
var = levene(data['TPM'],data['FPKM']) # p >> 0.05 接受H0 方差齐
print(var)
LeveneResult(statistic=0.0709691736536265, pvalue=0.7907140177866699)
数据方差齐,但不满足正态分布,样本量超过30,不能用t检验,方差分析也不行,不能进行参数检验,需采用非参数检验。这里先用秩和检验,然后强行上参数检验看下结果
秩和检验:
res = mannwhitneyu(data['FPKM'],data['TPM']) # alternative=None 默认转双侧检验, 设置less表示单侧检验
print(res)
print(res.pvalue)
MannwhitneyuResult(statistic=566.0, pvalue=0.3586216453583554)
0.3586216453583554
p > 0.05 接受原假设H0,两组数据无显著差别
T检验:
res = ttest_ind(data['FPKM'],data['TPM'],equal_var=True) # 默认方差相等
print(res)
print(res.pvalue)
Ttest_indResult(statistic=-0.2682272511918144, pvalue=0.7893132644009568)
0.7893132644009568
单因素方差分析:
res = f_oneway(data['TPM'],data['FPKM'])
print(res)
print(res.pvalue)
F_onewayResult(statistic=0.07194585828191666, pvalue=0.7893132644009524)
0.7893132644009524
作者:天使不设防
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.