统计之一
介绍
t检验需要满足的条件是独立性,正态性和方差齐性。独立性是指是样本中的数据之间是相互独立,互不影响的。正态性是指样本对代表总体呈正态分布。方差齐性是对于独立样本t检验而言的,意思是说两个独立样本所代表总体的方差是一致的。下面就通过一些简单的例子来说明如何操作。
正态性检验
如果数据之间没有明显的联系,通常认为独立性是满足的。这里首先对样本的正态性进行检验。正态性检验可以使用K-S单样本检验(Kolomogorov-Simirnov)完成。K-S检验可以对任意分布进行检验。它的原假设是\(H_0: 样本服从所假设的分布\)。这里以Python为例:
import numpy as np
from scipy import stats
np.random.seed(987654321)
x = stats.norm.rvs(size=100)
stat, p = stats.kstest(x, 'norm')
print(f'Statistic: {stat}, P value: {p}')
输出:
Statistic: 0.058352892479417884, P value: 0.8853119094415125
结论,P=0.885>0.05,因此不拒绝原假设,即样本x满足正态性。(这里我个人觉得有点问题,这里只是得到了不拒绝原假设的结论,其实并不能得到接受原假设的结论。但是教材上通常都是这样解释结果的,这里也就这样去解释了。)
方差齐性检验
方差齐性检验可以使用Levene检验完成。它的原假设是\(H_0: 两样本所代表总体的方差相同\)。
import numpy as np
from scipy import stats
x = stats.norm.rvs(size=100)
y = stats.norm.rvs(size=150)
stat, p = stats.levene(x, y)
print(f'Statistic: {stat}, P value: {p}')
输出:
Statistic: 0.0002072234817831774, P value: 0.9885262154804763
结论,P=0.989>0.05,因此不能拒接两样本所对应总体方差相同的假设,也就是说这两个样本对应的两个总体的方差是一致的。(这里关于结论的解释同样存在上面描述的问题)
独立样本t检验
如果上述两个检验均通过了,也就是两个样本对应的总体满足正态性和方差齐性。接下来就可以使用独立样本t检验比较两个样本对应总体的均值是否一致。独立样本t检验的原假设是两个样本对应总体的均值是相等的。这里假设x和y均满足独立性、正态性和方差齐性。
import numpy as np
from scipy import stats
x = stats.norm.rvs(size=100)
y = stats.norm.rvs(size=150)
stat, p = stats.ttest_ind(x, y)
print(f'Statistic: {stat}, P value: {p}')
输出:
Statistic: -0.30009777229970375, P value: 0.7643539691682373
结论,P=0.764>0.05,因此得到结论,不能拒绝这两个样本对应总体的均值相同的假设。通常就认为这两个样本对应总体之间无差异。
更正:方差不齐也可以使用ttest_ind去进行统计。只不过,需要添加参数equal_var=False。该参数默认为True表示方差一致的情况。
不满足上述三个条件
当数据不满足上面的三个条件时,独立样本t检验就不能得到准确的结论。可以使用双独立样本的非参数检验来代替独立样本t检验的工作。
双独立样本的分参数检验有许多种。各种方法主要的差别在于统计量的构造方法不同,原理和检验结果通常都是等价的。这里主要介绍Wilcoxon秩和检验。
import numpy as np
from scipy import stats
x = stats.norm.rvs(size=100)
y = stats.norm.rvs(size=150)
stat, p = stats.ranksums(x, y)
print(f'Statistic: {stat}, P value: {p}')
输出:
Statistic: -0.44810713004816155, P value: 0.0140758825221187
结论,P=0.014<0.05,因此拒绝这两个样本对应总体的均值相同的假设,即这两个样本对应的总体均值是不同的或者两个样本对应总体之间存在显著的差异。
总结
上述示例均使用了SciPy包中提供的统计函数。这里总结一下:
正态性检验:scipy.stats.kstest()
方差齐性检验:scipy.stats.levene()
独立样本t检验:scipy.stats.ttest_ind()
Wilcoxon秩和检验:scipy.stats.ranksums()
参考
[1] 张文彤, 邝春伟. SPSS统计分析基础教程[M]. 高等教育出版社, 2011.
[2] https://docs.scipy.org/doc/scipy-1.4.1/reference/index.html