应用t检验方法进行数据统计分析研究,t分布统计量和t检验统计量
众所周知,一般数据可以分为两类,即定量数据(数值型数据)和定性数据(非数值型数据)。定性的数据很好理解,比如人的性别和名字。这些是定性数据。定量数据可以分为以下几类:
类别数据
它表现为一个范畴,但不区分顺序,由分类的尺度衡量而形成。一般可以用非数值数据编码转换。数值本身没有意义,但它只是一个用来区分类别的数字标识符。例如,1表示男性,0表示女性。类数据大小无法比较,运算符没有意义。
有序资料
它表现为一个范畴,但它是有顺序的,它是通过排序尺度测量形成的。操作符也是没有意义的,比如一个比赛的名次。不能说第一名到第二名之前的差距等于第二名和第三名的差距。
区间数据
它是一个数值,可以加减,由定距标尺测量而成。距离数据的特点是没有绝对的零点,比如温度。不能说10摄氏度的两倍就是20摄氏度。所以乘除法对于距离数据来说是没有意义的。
固定比率数据
它是一个数值,可以加、减、乘和除运算。它是用固定的尺度来衡量的。给定的数据中有一个绝对的零点。比如100元的价格是200元的两倍。
t检验(T-test)主要用于比较数据样本之间是否存在显著差异。或者是否可以从样本推断到整体,比如有一个班级的学习成绩的数据,需要推断出那个班级男女生的学习成绩有很大的差异,或者根据数据需要使用卡方检验。一般用于定量数据检测(卡方检验用于分类数据)。T检验的前提是假设样本是
服从或者近似服从正态分布
。t检验是一种参数检验方法(假设总体分布已知)。根据不同的场景,主要有以下三种检查方法:
独立样本的t检验
它主要用于研究定量数据和分类数据之间的差异关系。比如有一类学生的数据,如果学生成绩服从正态分布,想研究提高和成绩的关系,就需要这个方法。如果不服从正态分布,可以用
MannWhitney检验
。单一样本的t检验主要用于检验单个量化数据差异,比如一个班级的成绩是否显著大于70分。还需要满足正态分布的假设。如果没有,可以用
单样本Wilcoxon检验
。配对t检验要检验样本中配对数据的差异,比如一个班的男女生成绩是否有显著差异,是否不符合正态分布,可以用
Wilcoxon检验
。t主要通过样本均值的差异来检验。在统计学上,显著性水平H0是通过“总体间无差异”来计算的。拒绝原假设H0的最小显著性水平称为检验的P值。来检验假设结果。比如,假设一个班的男生和女生成绩没有差异,显著性水平为0.05。可以理解为“男女生差异显著”的概率只有5%。如果计算的检验P值小于0.05,则可以通过原假设。相反,拒绝最初的假设。另外,对于两个独立样本的t检验,通常需要进行f检验(方差齐性检验)来检验两个独立样本的方差是否相同。如果两个总体方差相等,则直接使用t检验。如果没有,可以使用t检验或变量变换或秩和检验。也就是说,在进行两个独立样本的t检验时,需要先验证两个样本的方差是否相同。
在python的机器学习工具包
scipy
中,有统计分析模块stats
,包括t-test函数:scipy import stats # T-测试单个样本,该函数测试单个样本是否与给定的平均popmean有显著差异。第一个参数是给定的样本,第二个函数是给定的平均值popmean,可以以列表的形式传输多个单样本和平均值。Stats.ttest _ 1samp (a,pop mean,axis=0,nan _ policy= propagate) # T检验独立样本,检验两个样本均值的差异。这个检验方法假设样本都通过了f检验,即两个独立样本的方差是相同的stats.ttest_ind(a,b,axis=0,Equal _ var=true,nan _ policy= propagate) #检验两个样本的均值之差(同上),两个样本的统计量的输出参数,包括均值,标准差,样本大小stats . ttest _ ind _ from _ stats(mean 1,std1,nobs1,mean2,std2,Nobs2,equal_var=True)#配对T-1输入参数是样本的vector stats.ttest _ rel (a,b,axis=0,nan _ policy= propagate )F-test(F-test)。最常用的别名是联合假设检验(英文:Joint It是在零假设下统计值服从f分布的检验,H0)。通常用于分析具有多个参数的统计模型,以确定模型中的全部或部分参数是否适合估计总体。
计算过程如下:
用相应的F分布表查询计算出的F值。如果大于表中的值,则接受原假设(两个样本的方差相同),否则拒绝原假设。
虽然stats模块中没有f检验的函数,但是有一个f分布的生成函数,可以用于f检验:
Scipy.stats导入ff=NP . var(a)/NP . var(b)DF1=len(a)-1df 2=len(b)-1p _ value=1-2 * ABS(0.5-f . CDF(f,DF1,DF2))也可以导入sklearn。
从sklearn.feature _ selection导入f _ classic _ class,pvalue=f _ classic (x,y) print ([I for I,p in enumerate(p value)if p 0.05])# p值卡方检验(chi-square test),即2检验,用于验证两个总体之间的某一总体。卡方检验属于非参数假设检验,适用于布尔或二项分布数据。是基于两个概率的比较,前期用于生产企业的产品合格率。卡方检验是一种常用的基于2分布的假设检验方法,其无效假设H0是观察频率与期望频率没有差异。这个检验的基本思路是:首先假设H0为真,然后基于这个前提计算2值,表示观测值与理论值的偏差。根据2分布和自由度,可以确定当H0假设成立时,获得当前统计量和更极端情况的概率p。如果当前统计量大于P值,说明观测值偏离理论值太多,应拒绝无效假设,说明对比数据之间存在显著差异;否则,我们无法拒绝零假设,也无法认为样本所代表的实际情况与理论假设不同。(摘自智库百科)。
卡方检验的基本公式是:
a是观测值,e是理论值,k是观测值个数,最后一个公式其实就是具体的计算方法。n是总频率,P是理论频率,那么n*p自然就是理论频率(理论值)。
卡方检验是一种常见的基于2分布的假设检验方法,称为卡方分布。如果k个随机变量Z1,则
写:
做卡方检验时,通常针对的数据主要是分类数据,比如样本中男生的数量。研究问题通常是这两个类别之间是否有显著的相关性。
python中的Stats模块也有卡方检验的计算功能。在sklearn的特征选择中也可以进行卡方检验。
from scipy导入stats stats . chi 2 _ contingency(observed,correction=True,lambda _=None)from sk learn . feature _ selection导入chi2chi2_value,PValue=chi2 (x,y) print ([I for I,p in enumerate (PValue) if p0.05])互信息是信息论中有用的信息度量。可以看作是一个随机变量包含的关于另一个随机变量的信息量,1表示完全相关,0表示没有联系。也就是说,互信息可以看作是一个随机变量相对于另一个随机变量的信息程度。关于反应概率,设x和y为两个随机变量,则有:
众所周知,熵也是信息增益中的一个概念。根据熵的定义,有
也就是加入变量Y后,变量X的熵增加了多少。或者x的后验概率和先验概率的比值(对数),称为互信息。
在sklearn中计算互信息很简单。
from scipy import stats stats . chi2 _ contingency(observed,correction=True,Lambda _=none)from sk learn . feature _ selection import mutual _ info _ classif minfo=mutual _ info _ classic(x,y,discrete _ features=false,n _ neighbors=3)print(minfo)mutual _ info _ classic包含两个重要参数:
Discrete_features: {auto ,bool,array_like},默认为 auto ,表示特征是否离散。Array _ like可以指定哪些特征是离散的,哪些是连续的。N _ n_neighbors:int,默认为3,n_neighbors是用于估计随机变量互信息的邻居个数。大量的n _ neighbors会降低估计量。