Student's Test统计学原理及其应用

0. 数据正态检验和方差齐性检验的意义

正态性(Normality),严格来说是残差要复合正态分布,不过实际中很多人直接对因变量采用正态性检验,多数情况下二者差不多

方差齐性(Equality of Variances),也就是方差相等。对于每一个x取值,因变量y或者说其残差基本相等

正态性和方差齐性是经典统计模型应用的两个前提条件,如t检验、方差分析、线性回归都需要满足这两个条件, 在非趋中分布(偏态分布)的数据里,均值、方差等概念将失去意义

1. 正态检验

点击查看代码
from scipy.stats import shapiro, kstest, normaltest
from sklearn.datasets import load_wine


dtfData, srzTag = load_wine(return_X_y=True, as_frame=True)
dtfData.head()

image

# 用Shapiro-Wilk方法对dtfData进行逐行检验
# SPSS规定:当样本含量3 ≤ n ≤5000 时, 结果以Shapiro-Wilk(W)为准,当样本量n > 5000, 结果以Kolmogorov-Smirnov(D)为准
# SAS 规定:当样本含量n ≤    2000 时, 结果以Shapiro-Wilk(W)为准,当样本量n > 2000, 结果以Kolmogorov-Smirnov(D)为准
dtfPValue1 = dtfData.apply(lambda x: shapiro(x.dropna())).rename(index={0:'stats',1:'p_value'})
# 筛选p_value大于0.05的列
dtfPValue1.loc[:, dtfPValue1.loc['p_value', :] > 0.05]

image

# 用Kolmogorov-Smirnov对dtfData进行逐行检验
# SPSS规定:当样本含量3 ≤ n ≤5000 时,结果以Shapiro-Wilk(W)为准,当样本量n > 5000, 结果以Kolmogorov-Smirnov(D)为准
# SAS 规定:当样本含量n ≤ 2000 时,结果以Shapiro-Wilk(W)为准,当样本量n > 2000, 结果以Kolmogorov-Smirnov(D)为准
dtfPValue2 = dtfData.apply(lambda x: kstest(x.dropna(), 'norm')).rename(index={0:'stats',1:'p_value'})
# 筛选p_value大于0.05的列
dtfPValue2.loc[:, dtfPValue2.loc['p_value', :] > 0.05]

image

# 用normaltest对dtfData进行逐行检验
# GraphPad官方推荐使用该方法
dtfPValue3 = dtfData.apply(lambda x: normaltest(x.dropna())).rename(index={0:'stats',1:'p_value'})
# 筛选p_value大于0.05的列
dtfPValue3.loc[:, dtfPValue3.loc['p_value', :] > 0.05]

image

2. 方差齐性检验

点击查看代码
from scipy.stats import levene
from sklearn.datasets import load_wine


dtfData, srzTag = load_wine(return_X_y=True, as_frame=True)
dtfData.head()

image

'''
取dtfData的前三行前三列, 可以发现直接遍历DataFrame与遍历DataFrame.columns效果一样, 都是取出了columns
如果想遍历index, 需要显式的指定DataFrame.index
如果想遍历值, 需要显式的指定DataFrame.values, 默认axis=0, 即按行取出值
'''
dtfX=dtfData.iloc[:3,:3]

for i in dtfX:print(i, end=' ')
print()
for j in dtfX.columns:print(j, end=' ')
print()
for k in dtfX.index:print(k, end=' ')
print()
for v in dtfX.values:print(v, end=' ')

image

# levene接收list-like对象作为形参
fltstats, fltPValue = levene(*dtfData.T.values)
print(f"统计量为{fltstats}, P值为{fltPValue:.3f}")
# 结果:统计量为260.0886098266127, P值为0.000

3. Student's T-test

T检验,又名Student's Test,用于比较两组的平均值,并确定组间差异是否可能是由随机波动引起的统计学方法,最早于1908年由William Sealy Gosset用笔名'Student'发表在科学杂志Biometrika

3.1 t-test统计量

1️⃣ 检验原理
\(H_0\): 样本均值与总体均值相等
\(H_1\): 样本均值与总体均值不相等
2️⃣ z-检验
记总体服从正态分布,总体均值为\(\mu\),总体方差为\(\sigma^2\),样本均值随机变量\(\bar X = \frac{1}{n}\sum_{i=1}^{n}X_{i}\)(这里n是样本容量),样本标准差随机变量\(s=\sqrt{\frac{1}{n-1}\sum_{i=1}^{n}(X_{i}-\bar X)^{2}}\),那么有:

\[\begin{gather} X_{i} \sim N(\mu, \sigma^{2}) \\ 样本均值随机变量的方差var(\bar X) = var(\frac{1}{n} \sum_{i=1}^{n} X_{i}) = \frac{1}{n^{2}}var(\sum_{i=1}^{n} X_{i}) = \frac{1}{n^{2}}\sum_{i=1}^{n}var(X_{i})\\ \because X_{1},X_{2},\cdots,X_{n}独立同分布,方差相同\\ \therefore \rightarrow \frac{1}{n^{2}} \cdot n \cdot var(X_{1}) = \frac{1}{n}\sigma_{X_{1}}^{2}\\ \therefore 样本均值随机变量的标准差(标准误)SE = \sqrt{var(\bar X)} = \frac{\sigma}{\sqrt{n}} \\ \rightarrow \bar X = \frac{1}{n} \sum_{i=1}^{n}X_{i} \sim N(\mu, \frac{\sigma^{2}}{n}) \\ \rightarrow \frac{\bar X -\mu}{\frac{\sigma}{\sqrt{n}}} = \frac{\sqrt{n}(\bar X - \mu)}{\sigma} \sim N(0,1) \end{gather} \]

根据卡方变量的一个重要定理:
\(pass\)
可将z检验转化为t检验

3.2 t-test类型及其性质

t-test 类型是否要求正态分布是否要求方差齐性
独立样本t检验是,两样本均服从正态分布
配对样本t检验是,两样本差值服从正态分布
单样本t检验是,单样本服从正态分布

💢 有没有发现独立样本t检验方差分析的前置要求是一样的

3.2 t-test实验设计流程

image

4. linsay report数据格式及详细使用方法

1️⃣ 总体规范

  • 原始数据必须是Excel/csv文件
  • 原始数据第一列必须是特征/指标/代谢物等
  • 原始数据第一行必须是样本名,且样本名需要自行增加前缀以区分组别,格式类似于TMT_1 CON_1,分别代表空白组和处理组的1号样本,以此类推!最多两个组,每个组最少三次重复(单样本t检验除外)!
  • 原始数据除了第一行第一列以外均称为数据区,数据区不允许有缺失值,不允许有非数值型数据

2️⃣ 独立 vs 配对 vs 单样本

  • 配对样本t检验要求两组组内样本量一致且按顺序配对
  • 单样本t检验要求均值列单列成组,放在整个文件的最后一列
  • fc列默认左边均值/右边均值,所以数据排版尽量将处理组放在左边,控制组放在右边
posted @ 2022-07-29 16:22  LinsayLector  阅读(275)  评论(0)    收藏  举报