一、单样本均数假设检验(一元数据)
(1)样本所在的总体方差已知的单样本假设检验:
也就是说样本所在总体的的离散程度已知,只是均数未知。只需要对均数进行假设检验即可,这样做的原因是:对于正态分布而言,只有两个参数——均数和方差,只有均数和方差都定了,这个正态分布才能确定下来,如果只知道均数,或只知道方差,那么剩下的那个参数依然是可变的,这个正态分布就不唯一,也就不能确定下来。
举例(例子纯属虚构):海南省高中生平均身高是170cm,标准差是10cm,(1)现在调查了海口市的所有高中生,得到平均身高:173cm,标准差12cm。(2)现在在海口市的高中生中随机抽取1000名学生,平均身高:171cm,标准差14cm。问题:海口市的高中的平均身高和海南省的平均身高有统计学差异吗?
两个总体:海口市的所有高中生是一个总体,海南省的所有高中生也是一个总体,比较这两个总体的差异。对于问题(1),貌似不需要做假设检验,因为调查了海口市的所有高中生。如果这个调查和海口市的高中生的总体身高一摸一样,没有半点出入,那么可以说这次测量得到的数据就是总体的数据。然而,这是不可能做到的,因为只要是测量就存在测量误差(测不准原理),测量误差也属于随机误差。同理,海南省高中生的平均身高也是测量得到的,也存在测量误差。因此,既然有随机误差,那么这两侧测量结果之间的差异究竟是由随机误差造成的还是由于本身总体的不同造成的呢?所以,就需要假设检验。
对于已知样本方差的情况,其实也是一种估计,用其他的方差代替本次抽样的样本方差,因为如果知道了样本所在总体的方差,就一定知道这个总体所在的均数,否则这就是一个人为的没有保存好数据的错误了。样本方差已知的情况,有助于理解假设检验原理,实际上是不存在的,最多也是一种估计。
现在换一个简单的例子并用R代码实现:
海口市高三学生的平均身高是170cm,标准差5cm,现随机抽取100名海口市的高三学生,平均身高为172,问:此次抽样结果与海口市高三学生的平均身高是否有统计学差异?
检验方法:Z检验,用到的包:BSDA(需要下载和安装)
mu总体的均值,sigmu.x是总体标准差,X是抽样得到的随机样本
因为题目给出的是汇总数据,所以采用后者:zsum.test()
zsum.test(mean.x = 172,sigma.x = 5,n.x = 100,mu=170)
P < 0.05,拒绝原假设,说明这100个高三学生的身高与海口市高三学生平均身高的差异由统计学意义,且高于平均水平。
(2)样本所在总体方差未知的单样本假设检验
当样本所在的总体方差未知时,需要用样本的方差估计其总体的方差。此时,采用单样本的t检验。样本量较小时,自由的取n-1为总体方差的无偏估计,当样本量比较大时(>100),t分布逼近正态分布,还可采用z检验。条件:样本服从正态分布,独立性。
如果已知的总体和样本所在的总体是同一个总体,那么两者的总体均数相同,因此由样本所计算出的统计量,在小概率原理下,就不可能落在拒绝域,如果落在了拒绝域,说明它们不是一个总体。
举例:海口市高三学生的平均身高是170cm,现随机抽取100名海口市的高三学生,平均身高为172,标准差5cm,问:此次抽样结果与海口市高三学生的平均身高是否有统计学差异?
检验方法:t检验,BSDA包
这是用于原始数据的
这是用于汇总数据的
tsum.test(mean.x = 172,s.x = 5,n.x = 100,mu=170)
二、单样本均值向量假设检验(多元数据)
多元数据中,用距离来理解分布更为简单,向量与向量之间有一个距离,这个距离服从某一分布。
(1)已知样本所在的体的协方差阵
根据多元正态分布的性质:
https://www.bilibili.com/video/BV1TE411j7pF?p=5
多元正态分布的性质,d为马氏距离
问题:为什么上述的公式中没有n,而下面的公式中有n呢?
原因是上述公式中的X是一个随机向量,u是这个随机向量的均值向量,∑为这个随机向量的协方差阵;而下面的公式,ybar是从总体中抽样得到的一组数据的均值向量,这个均值向量服从的是由中心极限定理得到的抽样分布,这个抽样分布的协方差肯定不是原来的协方差,而且要比原协方差小。
Z:马氏距离
均值向量服从总体均值向量U,总体协方差为∑/n的多元正态分布,且这个均值向量与总体均值向量的马氏距离服从自由度为P的卡方分布。因此,在协方差已知的情况下,只要计算出样本均值向量,就可以和给定的总体均指向量进行比较,看是否有统计学差异。举例如下:
某市成年男性的平均身高:172,体重:65,胸围:82(cm),调查该市中的某个地区20名成年男性,数据如下,总体的协方差为∑,问:该地区的成年男性体格信息与这个市的平均水平是否有统计学差异?
数据用R生成:
01.先产生总体:
set.seed(2.71828)
mean1<-c(172,65,82)#总体均值向量
height<-rnorm(2000,mean = 172,sd=5)
weight<-rnorm(2000,mean = 65,sd=5)
bust<-rnorm(2000,mean = 82,sd=5)
men<-data.frame(height,weight,bust)
men
cov_t<-cov(men)
#以下是总体协方差:cov_t
height weight bust
height 25.2256358 0.5604626 0.3351971
weight 0.5604626 25.2183985 0.8087767
bust 0.3351971 0.8087767 23.5177260
02.然后产生某个地区的20名成年男性的体格数据:
h<-rnorm(20,mean = 172,sd=5)
w<-rnorm(20,mean = 65,sd=5)
b<-rnorm(20,mean = 82,sd=5)
m<-data.frame(h,w,b)
03.统计检验
step1:计算样本均值向量
> mean_vector<-colMeans(m)
> mean_vector
h w b
169.52067 63.61668 80.90221
step2:计算马氏距离
#根据样本均值向量与总体均值向量的马氏距离公式:前面的20是样本量,t()矩阵转置,solve()用来计算总体协方差矩阵的逆
m_d_square<-20*t(mean_vector-mean1)%*%solve(cov_t)%*%(mean_vector-mean1)
m_d_square
step3:求出这个距离所对应的chi-square分布的概率(曲线下面积),拒绝域右侧概率
函数解释:
- dchisq: 计算分位数所对应的密度函数的函数值,不是算概率的
- pchisq: 计算某个分位数所对应的概率,计算的是累积概率,如算卡方值为5的累积概率
- qchisq: 求某个概率的分位数,也就是某个概率下X轴上所对应的点
- rchisq: 产生服从卡方分布的随机数
- lower.tail logical; if TRUE (default), probabilities are P[X ≤ x], otherwise, P[X > x].
- lower.tail的翻译:首先是一个逻辑参数,默认是TRUE,如果设置成TRUE,则计算的是小于等于某个值的概率,也就是左侧的概率,如果设置成FALSE,则计算X>某个值的概率,也就是右侧的概率。
依据上述解释,应当使用pchisq()
> pchisq(q=m_d_square,df=3,lower.tail = FALSE)
[,1]
[1,] 0.06685167
显然,P=0.067>0.05
step4:得出结论
无统计学差异。
多元统计中,均值向量的检验还可以使用ICSNP包的Hotelling's T2 Test.
但是这个Hotelling's T2 检验不能用总体协方差矩阵,也就是说不适合做已知协方差阵的情况,这个的算法是通过样本的协方差矩阵来估计总体的协方差矩阵,所以说它适合未知总体协方差矩阵的情况。实际上,总体已知的情况还是太过理想了,现实中几乎不存在的,之所以有这个例子,是为了理解整个计算和推理的过程。
(2)未知样本所在总体的协方差阵
当总体协方差未知时,用样本的协方差估计总体的协方差,这时在算样本协方差时,离均差乘积和除以n-1,而不是n。因为只有除n-1才是对总体协方差的无偏估计。
因此,对于任一个体均值向量与总体均值向量马氏距离的计算用的是总体的协方差阵。马氏距离的关键就在明白协方差阵A到底是用什么计算的,样本均值向量所对应的总体协方差阵是总体协方差阵除以n,记为∑/n,所以,要计算样本均值向量与总体均值向量的马氏距离,就一定要用∑/n。然而,∑是未知的,需要用样本的cov来估计。一旦如此,样本均值向量与总体均值向量的马氏距离便不服从卡方分布,而是服从自由度为P和n-1的Hotelling-T2分布。一般软件计算样本协方差是都是除以n-1。
仍然使用上面的例子:
分别用逐步手工计算法和HotellingsT2函数法,然后比较二者的计算结果。
在用手工计算马氏距离时其他的都无需改变,只要用样本协方差阵取代总体协方差阵即可。因为R语言中cov()函数本来就是离均差乘积和除以n-1的。当样本量足够大时,这样算出来的协方差阵就相当于总体的协方差阵了。
set.seed(2.71828)
mean1<-c(172,65,82)
height<-rnorm(2000,mean = 172,sd=5)
weight<-rnorm(2000,mean = 65,sd=5)
bust<-rnorm(2000,mean = 82,sd=5)
men<-data.frame(height,weight,bust)
men
cov_t<-cov(men)
h<-rnorm(20,mean = 172,sd=5)
w<-rnorm(20,mean = 65,sd=5)
b<-rnorm(20,mean = 82,sd=5)
m<-data.frame(h,w,b)
mean_vector<-colMeans(m)
mean_vector
#使用总体协方差算马氏距离
m_d_square<-20*t(mean_vector-mean1)%*%solve(cov_t)%*%(mean_vector-mean1)
m_d_square
pchisq(q=m_d_square,df=3,lower.tail = FALSE)
#使用HotellingsT2检验算马氏距离
library(ICSNP)
HotellingsT2(m, mu = c(172,65,82), test = "chi")
#使用样本协方差算马氏距离
m_d_square2<-20*t(mean_vector-mean1)%*%solve(cov(m))%*%(mean_vector-mean1)
m_d_square2
pchisq(q=m_d_square2,df=3,lower.tail = FALSE)
结论:
- 使用总体协方差阵和使用样本协方差阵得到的马氏距离不同;
- 使用样本协方差阵和使用HotellingT2()得到的马氏距离相同;
- HotellingT2其实就是马氏距离;
- 通过距离来进行统计检验就是一种思路。