假设检验

2018-09-03

2018-09-03
假设检验

1 假设检验


1.1 假设检验基本概念

  假设检验(Hypothesis Testing)是数理统计学中根据一定假设条件由样本推断总体的一种方法。在总体的分布未知或分布中含未知参数的情况下,为了推断总体分布中的未知信息,提出了关于未知信息的假设,然后根据样本信息对假设做出接受或拒绝的判断。假设检验分为参数假设检验和非参数假设检验两种。

  1. 参数假设检验是指总体分布已知,检验总体中未知参数的假设。

  2. 非参数假设检验是指总体分布未知,检验总体分布形式及其参数的假设。

1.2 假设检验基本思想与步骤

  假设检验的基本思想是小概率反证法思想。小概率思想是指小概率事件(P<0.01或P<0.05)在一次试验中基本上不会发生。反证法思想是先提出假设(检验假设H0),再用适当的统计方法确定假设成立的可能性大小,如可能性小,则认为假设不成立,若可能性大,则还不能认为不假设成立。

  具体作法是:

  1. 根据问题的需要对所研究的总体作某种假设,记作\(H_0\)

  2. 选取合适的统计量,这个统计量的选取要使得在假设H0成立时,其分布为已知;

  3. 由实测的样本,计算出统计量的值,并根据预先给定的显著性水平进行检验,作出拒绝或接受假设H0的判断。

  常用的假设检验方法有\(u\)—检验法、\(t\)检验法、\(χ^2\)检验法(卡方检验)、\(F\)—检验法,秩和检验等。

1.3 假设检验的两类错误

  第1类错误:\(H_0\)为真的时候拒绝\(H_0\)。第1类错误的概率也是检验的显著性水平,通常记作\(\alpha\)

  第2类错误:\(H_0\)为假的时候接受\(H_0\)。通常记作\(\beta\)

1.4 其他术语

  检验的功效:\(H_0\)为假的时候拒绝了\(H_0\)。概率为\(1-\beta\)

  拒绝域:拒绝原假设的检验统计量的值集。

  接受域:接受原假设的检验统计量的值集。

1.5 假设检验的种类

  双边检验: \[H_0:\mu=\mu_0\\H_1:\mu \ne \mu_0\]

  单边检验:

  1. 左侧检验

\[H_0:\mu \geq \mu_0\\H_1:\mu < \mu_0\]

  2. 右侧检验

\[H_0:\mu \leq \mu_0\\H_1:\mu > \mu_0\]

2 参数检验


2.1 单样本

2.1.1 单样本正态总体的参数检验

  1. 单样本正态总体的均值检验

  情形一:总体方差已知

  \(Z\)检验是一般用于大样本(即样本容量大于30)平均值差异性检验的方法。它是用标准正态分布\(N(\mu,\sigma^2)\)的理论来推断差异发生的概率,从而比较两个均数的差异是否显著。也被称作\(u\)检验。

  \(Z\)检验的步骤:

  第一步:建立虚无假设,即先假定两个平均数之间没有显著差异。

  第二步:计算统计量\(Z\)值,对于不同类型的问题选用不同的统计量计算方法。

  \(Z\)统计量:

\[Z=\frac{X-\mu}{\sigma/\sqrt{n}}\]   其中:

  \(X\)是检验样本的平均数;

  \(μ\)是已知总体的平均数;

  \(\sigma\)是总体的标准差;

  \(n\)是样本容量。

  第三步:判断

  若为双边检验:\(|Z| \geq Z_{\alpha/2}\) 时,拒绝原假设,否则接受原假设;

  若为左侧检验:\(Z \leq -Z_{\alpha}\) 时,拒绝原假设,否则接受原假设;

  若为右侧检验:\(Z \geq Z_{\alpha}\) 时,拒绝原假设,否则接受原假设;

  也可以计算\(Z\)统计量对应的P值,然后和\(\alpha\)进行比较,当\(P>\alpha\)时,接受原假设,当\(P<\alpha\)时,拒绝原假设。

  R中无直接函数可以检验,但是可以用参数估计中的区间估计来检验,\(Z\)检验使用例子:

library(UsingR)  
x<-rnorm(50,0,5)  
simple.z.test(x,5)
## [1] -1.8012897  0.9705179

  结果说明在置信度为95%的情况下总体的均值区间为\([-2.947929, 3.250022]\)(每执行一次代码,x都会重新随机取数,所以执行结果每次都不一样)。

  情形二:总体方差未知

  \(t\)检验是用\(t\)分布理论来推论差异发生的概率,从而比较两个平均数的差异是否显著。\(t\)检验分为单总体检验和双总体检验。这里单样本采用单总体检验,即简单\(t\)检验。

  第一步:建立虚无假设,即先假定两个平均数之间没有显著差异。

  第二步:计算统计量\(t\)值,对于不同类型的问题选用不同的统计量计算方法。

  \(t\)统计量: \[ t=\frac{\bar{X}-\mu}{S/\sqrt{n-1}} \]

  其中:

  \(\bar{X}\)是检验样本的平均数;

  \(μ\)是样本的平均数;

  \(S\)是样本的标准差;

  \(n\)是样本容量。

  第三步:判断

  若为双边检验:\(|t| \geq t_{\alpha/2}\) 时,拒绝原假设,否则接受原假设;

  若为左侧检验:\(t \leq -t_{\alpha}\) 时,拒绝原假设,否则接受原假设;

  若为右侧检验:\(t \geq t_{\alpha}\) 时,拒绝原假设,否则接受原假设。

  也可以计算\(t\)统计量对应的P值,然后和\(\alpha\)进行比较,当\(P>\alpha\)时,接受原假设,当\(P<\alpha\)时,拒绝原假设。

  例:一种汽车配件的平均长度要求为10cm,高于或低于该标准均被认为是不合格的。汽车生产企业在购进配件时,通常是经过招标,然后对中标的配件提供商提供的样品进行检验,以决定是否购进。现对一个配件提供商提供的45个样本进行了检验。得到样本均值为9.89,样本标准差为0.4932。假定该供货商生产的配件长度服从正态分布,在0.01的显著性水平下,检验该供货商提供的配件是否符合要求?

  分析:假设汽车配件长度的均值为\(\mu_0=10\),该供应商的配件长度均值为\(\mu_1\),总体分布已知,所以为均值检验。

  假设如下:

\[ H_0: \mu_1=\ \mu_0 \\ H_1: \mu_1\ne\mu_0 \]

x=9.89
s=0.4932
df=45
alpha=0.01
u=10
t=(x-u)/s*sqrt(df-1)
# pt()算出t统计量对应的P值。
p = pt(t,df=45)
p
## [1] 0.07299552

  p = 0.07,可见P值>0.01,故接受原假设,即在0.01 的显著性水平下,检验该供货商提供的配件符合要求。

  2. 单样本正态总体的方差检验

  卡方统计量是指数据的分布与所选择的预期或假设分布之间的差异的度量。

  第一步:建立虚无假设,即先假定方差之间没有显著差异。

  第二步:计算统计量\(\chi^2\)值,对于不同类型的问题选用不同的统计量计算方法。

  \(\chi^2统计量\)\[ \chi^2 = \frac{(n-1)S^2}{\sigma^2} \]

  其中:

  \(\sigma\)是已知标准差;

  \(S\)是样本的标准差;

  \(n\)是样本容量。

  第三步:判断

  若为双边检验:\(\chi^2_{1-\alpha/2}<\chi^2<\chi^2_{\alpha/2}\) 时,接受原假设,否则拒绝原假设;

  若为左侧检验:\(\chi^2 < \chi^2_{1-\alpha}\) 时,拒绝原假设,否则接受原假设;

  若为右侧检验:\(\chi^2 > \chi^2_{\alpha}\) 时,拒绝原假设,否则接受原假设。

  也可以计算\(\chi^2\)统计量对应的P值,然后和\(\alpha\)进行比较,当\(P>\alpha\)时,接受原假设,当\(P<\alpha\)时,拒绝原假设。

  例:啤酒生产企业采用自动生产线灌装啤酒,每瓶的装填量为500ml,但由于受某些不可控因素的影响,每瓶的装填量会有差异。此时,不仅每瓶的平均装填量很重要,装填量的方差同样很重要。如果方差很大,会出现装填量太多或太少的情况,这样要么生产企业不划算,要么消费者不满意。假定生产标准规定每瓶装填量的标准差不应超过和不应低于15ml。企业质检部门抽取了16瓶啤酒进行检验,得到的样本标准差为S=14.87ml。试以0.05 的显著性水平检验装填量的标准差是否符合要求?

  分析:假设符合要求的标准差为\(\sigma_0\),样本的标准差为\(\sigma_1\)

  假设如下: \[ H_0: \sigma_1= \sigma_0\\ H_1: \sigma_1\ne\ \sigma_0\\ \]

sigma2=15^2
s2=14.87^2
df=15
alpha=0.05
chi2=df*s2/sigma2
# pchisq()算出卡方统计量对应的P值,pt()算出t统计量对应的P值,默认显著性水平为0.05。
p = pchisq(chi2,df=15)
p
## [1] 0.5297799

  P值为0.53,接受原假设\(H_0\),即在0.05的显著性水平下检验装填量的标准差符合要求。

2.1.2 单样本二项分布总体的参数检验(单样本比率检验)

  步骤同单样本一样。

  \(Z\)统计量: \[ Z=\frac{p-p_0}{\sqrt{p_0(1-p_0)/n}} \]   例:有一批大学生创业企业平均获得风险资本的可能性为\(P_0=0.15\),现随机抽取500 家新近创立的企业,对其进行针对性的培训,结果有150家获得风险投资,试检验培训是否对风险投资的获得性有显著提升?

  分析:假设培训后的风险资本的获得性均值为\(P_1\),该题为二项分布检验。 \[ H_0: P_1\ \le\ P_0\\ H_1: P_1\ >\ P_0 \]

binom.test(x =150,n = 500,p = 0.15,alternative = "greater",conf.level = 0.95 )
## 
##  Exact binomial test
## 
## data:  150 and 500
## number of successes = 150, number of trials = 500, p-value <
## 2.2e-16
## alternative hypothesis: true probability of success is greater than 0.15
## 95 percent confidence interval:
##  0.2662351 1.0000000
## sample estimates:
## probability of success 
##                    0.3

  p < 0.05, 拒绝原假设\(H_0\),即在0.05的显著性水平下试检验培训对风险投资的获得性显著提升。

2.2 两样本

2.2.1 两样本正态总体的参数检验

  1. 两样本正态总体的均值检验

  情形一:总体方差已知

  \(Z\)统计量:

\[Z=\frac{\bar{X}-\bar{Y}-\mu}{\sqrt{\frac{\sigma_1^2}{n_1}+\frac{\sigma_2^2}{n_2}}}\]

  情形二:总体方差未知但两方差相等

  同独立样本t检验(双样本均值检验)

  2. 两样本正态总体的方差检验

  \(F\)检验(\(F-test\)),最常用的别名叫做联合假设检验,此外也称方差比率检验、方差齐性检验。通常的F检验例子包括:假设一系列服从正态分布的总体,都有相同的标准差。该检验在方差分析(ANOVA)中也非常重要。

  第一步:建立虚无假设,即先假定方差之间没有显著差异。

  第二步:计算统计量\(F\)值,对于不同类型的问题选用不同的统计量计算方法。

  F统计量:

\[ F=\frac{S_1^2}{S_2^2} \]

  其中:

  \(S_1、S_2\)是标准差。前提是两样本容量相等。

  第三步:判断

  若为双边检验:\(F_{1-\alpha/2}<F<F_{\alpha/2}\) 时,接受原假设,否则拒绝原假设;

  若为左侧检验:\(F < F_{1-\alpha}\) 时,拒绝原假设,否则接受原假设;

  若为右侧检验:\(F > F_{\alpha}\) 时,拒绝原假设,否则接受原假设。

  也可以计算\(F\)统计量对应的P值,然后和\(\alpha\)进行比较,当\(P>\alpha\)时,接受原假设,当\(P<\alpha\)时,拒绝原假设。

  例:某电商平台希望了解不同等级的消费者在线评论点评时间(从确认购物完成到填写点评的天数)是否有显著的差异。从钻石客户和金牌客户组中随机的抽取出若干。从系统中获得这些客户的点评时间(单位:天)为:

  钻石客户组:13.7;1.8;3.8;4.6;20.7;3.7;5.8;4.4;0.7;5.6;2.8;3.9;11.7;7.9;

  金牌客户组:2.9;4.8;14.8;2.9;4.9;6.8;0.2;3.8;4.9;3.8;15.8;21.8;3.9;8.6;1.2;

  假设各组的客户点评时间分别构成正态总体,试比较钻石客户组和金牌客户组点评时间的波动是否存在显著差异(取alpha=0.05)。

  分析:假设钻石客户组的点评时间标准差为\(\sigma_1\),金牌客户组的点评时间标准差为\(\sigma_2\),总体分布已知,所以为方差检验。

  假设如下: \[ H_0: \sigma_1=\sigma_2 \\ H_1: \sigma_1\ne\sigma_2 \]

# 导入数据
diamond <- c(13.7,1.8,3.8,4.6,20.7,3.7,5.8,4.4,0.7,5.6,2.8,3.9,11.7,7.9)
gold <- c(2.9,4.8,14.8,2.9,4.9,6.8,0.2,3.8,4.9,3.8,15.8,21.8,3.9,8.6,1.2)

# 两总体方差检验
var.test(diamond, gold)
## 
##  F test to compare two variances
## 
## data:  diamond and gold
## F = 0.79933, num df = 13, denom df = 14, p-value = 0.6922
## alternative hypothesis: true ratio of variances is not equal to 1
## 95 percent confidence interval:
##  0.2653913 2.4634202
## sample estimates:
## ratio of variances 
##          0.7993305

  P值=0.69>0.05,故接受原假设,即在0.05的显著性水平下,钻石客户组和金牌客户组点评时间的波动没有显著差异。

  注意:

  var.test(x,y) #用于来自正态总体的两个样本

  bartlett.test(x) #用于来自正态总体的多个样本

2.2.2 成对样本(均值)t检验

  \(t\)统计量: \[ t=\frac{\bar{d}-\mu_0}{s_d/\sqrt{n}} \]

  1. 有原始数据的配对t检验

  例:判断简便法和常规法测定尿铅含量的差别有无统计意义,对12份人尿同时用两种方法进行测定,所得结果如下表所示,请分析两种测定方法的测量结果是否不同?

#输入两组值
x <- c(2.41,2.90,2.75,2.23,3.67,4.49,5.16,5.45,2.06,1.64,1.06,0.77)
y <- c(2.80,3.04,1.88,3.43,3.81,4.00,4.44,5.41,1.24,1.83,1.45,0.92)
#配对样本t检验
t.test(x,y,paired=T)
## 
##  Paired t-test
## 
## data:  x and y
## t = 0.16232, df = 11, p-value = 0.874
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -0.3558501  0.4125167
## sample estimates:
## mean of the differences 
##              0.02833333

  配对t检验的结果为:t=0.16232,显著性P值=0.874>0.05,不能拒绝原假设H0,说明不能认为两种方法测定尿铅含量的结果不相同。

  2. 无原始数据的配对t检验

  例:慢性支气管炎病人血中胆碱酯酶活性常常偏高。某校药理教研室将同性别同年龄的病人与健康人配成8对,测量该值加以比较,配对两组人差值的均值为0.625,标准差为0.78,问可否通过这一资料得出较明确的结论?

#依次输入配对样本的差值d、标准差s、配对数n
d <- 0.625
s <- 0.78
n <- 8
#算t值,两配对样本的标准差相等
t <- d / (s/sqrt(n))
#输入自由度n-1,pt()函数得到p值
df <- n-1
p <- pt(t,df)
p
## [1] 0.9711069

  p值为0.971>0.05,不能拒绝原假设,不能认为慢性支气管炎病人与健康人血中胆碱酯酶活性不同。

2.2.3 独立样本t检验(双样本均值检验)

  \(t\)统计量:

\[ t=\frac{\bar{X_1}-\bar{X_2}}{\sqrt{\frac{(n_1-1)S_1^2+(n_2-1)S_2^2}{n_1+n_2-2}}(\frac{1}{n_1}+\frac{1}{n_2})} \]

  1. 有原始数据的独立样本t检验

  例:某产铸造车间为提高铸件的耐磨性而试制了一种镍合金铸件以取代铜合金铸件,为此,从两种铸件中各抽取一个容量为11和9的样本,测得其硬度如下。

  镍合金: 76.43 68.21 73.58 69.69 65.29 70.83 72.75 71.34 75.68 68.35 70.19

  铜合金: 68.27 68.07 65.61 73.66 66.27 69.34 71.37 69.77 72.12

  根据专业经验,硬度服从正态分布,且方差保持不变,试在显著性水平α = 0.05 下判断镍合金的硬度是否有显著提高?

  分析:假设镍合金的硬度均值为\(\mu_1\),铜合金的硬度均值为\(\mu_2\),总体分布已知,所以为t检验。

  假设如下: \[ H_0: \mu_1 \le \mu_2 \\ H_1: \mu_1>\mu_2 \]

# 导入数据
Cu <- c(68.27, 68.07, 65.61, 73.66, 66.27, 69.34, 71.37, 69.77, 72.12)
Ni <- c(76.43, 68.21, 73.58, 69.69, 65.29, 70.83, 72.75, 71.34, 75.68, 68.35, 70.19)
y=c(Cu,Ni)
group=as.factor(c(rep(1,length(Cu)),rep(2,length(Ni))))

# 方差齐性检验
bartlett.test(y~group)
## 
##  Bartlett test of homogeneity of variances
## 
## data:  y by group
## Bartlett's K-squared = 0.40862, df = 1, p-value = 0.5227
t.test(y ~ group,alternative="greater", var.equal=TRUE)
## 
##  Two Sample t-test
## 
## data:  y by group
## t = -1.265, df = 18, p-value = 0.889
## alternative hypothesis: true difference in means is greater than 0
## 95 percent confidence interval:
##  -4.113737       Inf
## sample estimates:
## mean in group 1 mean in group 2 
##        69.38667        71.12182

  p-value = 0.889,可见P值>0.05,故接受原假设,即在0.05 的显著性水平下,镍合金的硬度没有显著提高。

  2. 无原始数据的独立样本t检验

  例:测量某两个地区水中碳酸钙的含量,分别从两个地区随机抽取20份样品进行碳酸钙检测,分别得到两个地区碳酸钙含量的均数和标准差。试判断两个地区水中碳酸钙的含量是否有差异?

#输入对照组实验组均值x1,x2;组数n1,n2;方差s1,s2
x1<-20.95; x2<-21.79; n1<-20; n2<-20; s1<-5.89; s2<-3.43
#计算两独立样本共同的标准差
sc <- sqrt((1/n1+1/n2)*((n1-1)*s1**2+(n2-1)*s2**2)/(n1+n2-2))
#t值,自由度df,p值
t <- (x2-x1)/sc
df <- n1+n2-2
p <- pt(t,df)
p
## [1] 0.7076209

  t=0.5511486,p值0.708>0.05,不拒绝原假设,不能认为两个地区水中碳酸钙的含量有差异。

2.2.4 两样本比率检验

  1. 两样本比率的均值Z检验

  \(Z\)统计量: \[ Z=\frac{p_1-p_2}{\sqrt{p(1-p)(\frac{1}{n_1}+\frac{1}{n_2}})}\\ p=(x1+x2) / (n1+n2)\\ p1=x1/n1,p2=x2/n2. \]

z.prop = function(x1,x2,n1,n2){
  num=  (x1/n1) - (x2/n2)
  p = (x1+x2) / (n1+n2)
  denominator = sqrt(1 * (1-0) * (1/n1 + 1/n2))
  z.prop = num/ denominator
  return(z.prop)
}
z.prop(21,24,47,58)
## [1] 0.1682228

  检验结果显示P值=0.168>0.05,接受原假设,所以两组数据均值没有显著差异。

  2. prop.test(x,n)处理两样本比率的卡方检验

  总结:

  * 如果题目中无原始数据集,可以采取直接计算公式算出P值。

  * pchisq()算出卡方统计量对应的P值,pt()算出t统计量对应的P值,默认显著性水平为0.05。而qpois()求在显著性水平和对比值下的泊松分布中的次数,qnorm()算出在显著性水平下的Z统计量的值,qbinom()算出在显著性水平下的二项分布中的次数。rnorm()生成正态分布随机数,rexp()生成指数分布随机数,runif()生成均匀分布随机数,rbinom()生成二项分布随机数。

  * 对于t.test(),p.value得到显著性水平,conf.int得到其区间估计。

3 非参数的假设检验


  非参数检验是指总体不服从正态分布,且分布情况不明时,用来检验数据是否来自同一个总体假设等一类检验方法。非参数检验通常是将数据转换成秩(顺序的意思)来进行分析的,秩就是该数据按照升幂排列之后,每个观测值的位置。

3.1 单样本泊松分布总体的均值检验

  泊松分布适合于描述单位时间内随机事件发生的次数。

  例:假设一次银行业务排队中前一个小时有100人来,后一个小时有110人来,后一小时的人数是否明显高于前一小时?

  H0:后一小时客户数量与前一小时无差异(因为明显后一小时人数比前一小时的多,所以无小于符号)

  H1:后一小时客户数量显著高于前一小时

poisson.test(x = 110,T = 100,alternative = "greater",conf.level = 0.95)
## 
##  Exact Poisson test
## 
## data:  110 time base: 100
## number of events = 110, time base = 100, p-value = 0.1706
## alternative hypothesis: true event rate is greater than 1
## 95 percent confidence interval:
##  0.9333556       Inf
## sample estimates:
## event rate 
##        1.1

  P值 = 0.1706>0.05,在0.95的置信区间下接受原假设,后一小时人数与前一小时无差异。

# 与前一小时50人注册量有显著差异的临界值,qpois()函数求在显著性水平和对比值下的泊松分布次数
qpois(0.95,lambda =100)
## [1] 117

  后一小时的客户数需要提升到117以上才能明显高于前一小时的客户数。

3.2 分布一致性检验

3.2.1 离散分布

  卡方检验

  总体分布的卡方检验适用于配合度检验,是根据样本数据的实际频数推断总体分布与期望分布或理论分布是否有显著差异。

  它的零假设\(H0\):样本来自的总体分布形态和期望分布或某一理论分布没有显著差异。

  总体分布的卡方检验的原理是:如果从一个随机变量尤中随机抽取若干个观察样本,这些观察样本落在X的k个互不相交的子集中的观察频数服从一个多项分布,这个多项分布当k趋于无穷时,就近似服从\(X\)的总体分布。

  因此,假设样本来自的总体服从某个期望分布或理论分布集的实际观察频数同时获得样本数据各子集的实际观察频数,并依据下面的公式计算统计量 : \[ Q=\sum_{i=1}^k\frac{(O_i-E_i)^2}{E_i} \]   其中,\(O_i\)表示观察频数;\(E_i\)表示期望频数或理论频数。可见Q值越大,表示观察频数和理论频数越不接近;Q值越小,说明观察频数和理论频数越接近。

3.2.2 连续分布

  1. Kolmogorov-Smirnov分布一致性检验:ks.test(x, y)

  该检验的目的是: 对于单样本,检验其是否符合某种分布 。对于双样本,检验其是否属于同一分布。

  ks检验,理论上可以检验任何分布。 既可以做当样本检验,也可以做双样本检验。

#单样本检验
#记录一台设备无故障工作时常,并从小到大排序。问这些时间是否服从lambda=1/1500的指数分布?
x <- c(420,500,920,1380,1510,1650,1760,2100,2300,2350)
ks.test(x,"pexp",1/1500)
## 
##  One-sample Kolmogorov-Smirnov test
## 
## data:  x
## D = 0.30148, p-value = 0.2654
## alternative hypothesis: two-sided
#双样本检验
#有两个分布,分别抽样了一些数据,问他们是否服从相同的分布。
x = runif(100)
y = runif(100)
ks.test(x,y)
## 
##  Two-sample Kolmogorov-Smirnov test
## 
## data:  x and y
## D = 0.12, p-value = 0.4676
## alternative hypothesis: two-sided

  单样本检验结果的P值=0.2654,接受原假设,则这些时间是否服从lambda=1/1500的指数分布,双样本检验检验结果的P值=0.5806,接受原假设,则他们服从相同的分布。

  2. Shapiro-Wilk正态性检验:shapiro.test(x)

  正态W检验方法:当p值大于a为正态分布,样本含量在[3, 5000]之间。比如方差分析中经常需要检验样本是否服从正态分布。

# 用data frame的格式输入数据
medicine <- data.frame(
  Response=c(30,38,35,41,27,24,32,26,31,29,27,35,21,25,17,21,20,19),
  Treatment=factor(c(rep("a",6),rep("b",8),rep("c",4)))
)

attach(medicine)

shapiro.test(Response[Treatment=="a"])
## 
##  Shapiro-Wilk normality test
## 
## data:  Response[Treatment == "a"]
## W = 0.96129, p-value = 0.8296
shapiro.test(Response[Treatment=="b"])
## 
##  Shapiro-Wilk normality test
## 
## data:  Response[Treatment == "b"]
## W = 0.99106, p-value = 0.9965
shapiro.test(Response[Treatment=="c"])
## 
##  Shapiro-Wilk normality test
## 
## data:  Response[Treatment == "c"]
## W = 0.97137, p-value = 0.85

  从上面运行结果可以看出每组数据的正态性检验结果的P值都大于0.05,原假设为该数据服从正态分布,所以不能拒绝原假设,这三组数据都服从正态分布。

3.3 离散一致性检验

  mood.test(x, y) 该检验假设两样本中位数相同,因此需要将两个中位数的差异消除再比较 diff=median(x)-median(y); y=y+diff; mood.test(x,y);

  ansari.test(x,y) 用于两样本,也需要将两个中位数的差异消除再比较;

  fligner.test(x) x是一个列表,用于多样本,不需要消除中位数的差异。

3.4 列联表数据独立性检验:卡方独立性检验

  chisq.test() 可以做列联表数据独立性检验,只要将数据写成矩阵的形式就可以了。

列联表数据 患肺癌 未患肺癌 合计
吸烟 60 32 92
不吸烟 3 11 14
合计 63 43 106
#根据列联表判断吸烟与致癌是否有关系
#p值很小,拒绝无关系的假设,应该有关系
x = matrix(c(60,3,32,11),nrow=2)
chisq.test(x)
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  x
## X-squared = 7.9327, df = 1, p-value = 0.004855
#如果一个单元格内的数据小于5,那么卡方检验无效。
#此时应做Fisher精确检验
fisher.test(x)
## 
##  Fisher's Exact Test for Count Data
## 
## data:  x
## p-value = 0.00282
## alternative hypothesis: true odds ratio is not equal to 1
## 95 percent confidence interval:
##   1.626301 40.358904
## sample estimates:
## odds ratio 
##    6.74691

  使用chisq.test()函数对二维表的行变量和列变量进行卡方独立性检验。

# Listing 7.13 - Chis-square test of independence
library(vcd)
mytable <- xtabs(~Treatment+Improved, data=Arthritis)
# 这里是要检验的两个列属性:Treatment ,Improved,构建一个交叉相乘表。
mytable
##          Improved
## Treatment None Some Marked
##   Placebo   29    7      7
##   Treated   13    7     21
chisq.test(mytable)
## 
##  Pearson's Chi-squared test
## 
## data:  mytable
## X-squared = 13.055, df = 2, p-value = 0.001463

  从结果显示P值非常小,可认为是Treatment,Improved不独立,存在某种相关关系。

  此外,还有针对配对数据的McNemar检验,为配对卡方检验,检验变化的强度,\(H_0\):频数没有发生变化。要求为单元格内的数据不得小于5,总数要大于100。

3.5 皮尔森拟合优度卡方检验

  该检验的主要目的是: 由样本评估群体是否符合某种分布情况。

  原假设为总体\(X\)的分布函数为\(F(x)\),然后根据样本的经验分布和所假设的理论分布之间的吻合程度来决定是否接受原假设,这种检验通常称为拟合优度检验。分布拟合的\(\chi^2\)检验法的基本原理和步骤如下:

  1. 将总体\(X\)的取值范围分成m个互不重叠的小区间,记作\(A_1,A_2,...,A_m\).

  2. 把落入第\(i\)个小区间\(A_i\)的样本值个数记作\(f_i\),称为实测频数。所有实测频数之和等于样本容量\(n\)

  3. 根据所假设的理论分布,可以算出总体\(X\)的值落入每个\(A_i\)的频率\(p_i\), 则\(np_i\)就是落入小区间\(A_i\)的理论频数。

  皮尔逊证明了:若原假设中的理论分布\(F(x)\)已经完全给定,那么当\(n\)趋于无穷大时,统计量\(\chi^2=\sum^m_{i=1}\frac{(f_i-np_i)^2}{np_i}\)的分布渐近\(m-1\)个自由度的\(\chi^2\)分布。根据计算实践,要求\(n\)不小于50,以及\(np_i\)都不小于5。否则需要合并区间。

  例:孟德尔的遗传基本规律,黄色纯系豌豆和绿色纯系豌豆杂交,子二代中,黄、绿之比近似为3:1,现在抽取他的一组观察结果为:黄:绿=70:27.观察结果和3:1有差异,我们需要检验这种差异是否显著,不显著的话说明该实验结果满足遗传基本规律。

  分析:孟德尔的遗传基本规律相当于二项分布,我们需要检验这一次实验数据是否满足这个二项分布。

chi2 <- function(n,p,f){
  chisum = 0
  for (i in 1:length(p)){
     chisum <- chisum + (f[i]-n*p[i])^2/(n*p[i])
  }
  p = pchisq(chisum,df=1)
  return(p)
}

chi2(97,c(3/4,1/4),c(70,27))
## [1] 0.4809636

  检验结果显示P值大于0.05,所以接受原假设,说明该实验结果满足遗传基本规律。

3.6 符号检验

  中位数符号检验:当我们以中位数将数据分为两边,一边为正,一边为负,那么样本出现在两边的概率应该都为1/2。因此,使用p=0.5的二项检验就可以做符号检验了。

  分析:样本的中位数\(M\)作为城市生活水平的中间值。

  假设: \[H_0:M \geq 99\\ H_1:M<99\]

#统计了66个城市的生活花费指数,北京的生活花费指数为99 。
#请问北京是否位于中位数以上。(99是否为该数据集的中位数。)
x = c(66, 75, 78, 80, 81, 81, 82, 83, 83, 83, 83,
      84, 85, 85, 86, 86, 86, 86, 87, 87, 88 ,88,
      88, 88 ,88 ,89 ,89 ,89 ,89 ,90 ,90 ,91, 91,
      91, 91, 92, 93, 93, 96, 96, 96, 97, 99, 100,
      101 ,102, 103, 103, 104, 104, 104, 105, 106, 109, 109,
      110 ,110 ,110 ,111 ,113 ,115 ,116 ,117, 118, 155 ,192)
mean(x)
## [1] 96.45455
binom.test(sum(x>99),length(x),p=0.5,alternative = "less")
## 
##  Exact binomial test
## 
## data:  sum(x > 99) and length(x)
## number of successes = 23, number of trials = 66, p-value =
## 0.009329
## alternative hypothesis: true probability of success is less than 0.5
## 95 percent confidence interval:
##  0.0000000 0.4563087
## sample estimates:
## probability of success 
##              0.3484848

  检验结果显示P值为0.009<0.05,拒绝原假设。所以该数据集的中位数小于99。北京的生活水平高于中位水平。

3.7 wilcoxon秩和检验

  符号检验只考虑了符号,没有考虑差异的大小。wilcoxon解决了这个问题。

  假设数据是连续分布的,数据是关于中位数对称的。两样本秩和检验 :假定第一个样本有m个观测值,第二个有n个观测值。把两个样本混合之后把这m+n个观测值升幂排序,记下每个观测值在混合排序下面的秩。之后分别把两个样本所得到的秩相加。记第一个样本观测值的秩的和为WX,而第二个样本秩的和为WY。这两个值可以互相推算,称为Wilcoxon统计量。

#单样本检验
#某电池厂商生产的电池中位数为140.
#现从新生产的电池中抽取20个测试。请问电池是否合格
x <- c(137,140,138.3,139,144.3,139.1,141.7,137.3,133.5,
       138.2,141.1,139.2,136.5,136.5,135.6,
       138,140.9,140.6,136.3,134.1)
wilcox.test(x,mu=140,alternative = "less",
            exact=F,correct=F,confi.int=T)
## 
##  Wilcoxon signed rank test
## 
## data:  x
## V = 34, p-value = 0.007034
## alternative hypothesis: true location is less than 140
#配对双样本检验
#在农场中选择了10块农田,将每一块农田分成2小块,分别用不同的化肥种菜。
#请问化肥会不会提高蔬菜产量。
x <- c(459,367,303,392,310,342,421,446,430,412)
y <- c(414,306,321,443,281,301,353,391,405,390)
wilcox.test(x-y,alternative = "greater")
## 
##  Wilcoxon signed rank test
## 
## data:  x - y
## V = 47, p-value = 0.02441
## alternative hypothesis: true location is greater than 0
#非配对双样本检验
#10名非铅工人和10名铅工人的血铅值是否存在显著差异
x <- c(24,26,29,34,43,58,63,72,87,101)
y <- c(82,87,97,121,164,208,213)
wilcox.test(x,y,alternative="less")
## 
##  Wilcoxon rank sum test with continuity correction
## 
## data:  x and y
## W = 4.5, p-value = 0.001698
## alternative hypothesis: true location shift is less than 0

  单样本检验结果P值0.007<0.05,所以拒绝原假设,电池不合格。

  配对双样本检验结果P值0.024<0.05,所以拒绝原假设,化肥会提高蔬菜产量。

  非配对双样本检验结果P值0.002<0.05,所以拒绝原假设,10名非铅工人和10名铅工人的血铅值存在显著差异。

  在R中,wilcox.test()函数可以用来做Wilcoxon秩和检验,也可以用于做Mann-Whitney U检验。当参数为单个样本,或者是两个样本相减,或者是两个参数,paired=TRUE时,是Wilcoxon秩和检验。当paired = FALSE(独立样本)时,就是Mann-Whitney U检验。

  Mann-Whitney U检验案例 :对10例肺癌病人和12例矽肺0期工人用X光片测量肺门横径右侧距RD值(cm)。问肺癌病人的RD值是否高于矽肺0期工人的RD值?

# 源代码:
lc <- c(2.78,3.23,4.2,4.87,5.12,6.21,7.18,8.05,8.56,9.6)
si <- c(3.23,3.5,4.04,4.15,4.28,4.34,4.47,4.64,4.75,4.82,4.95,5.1)

wilcox.test(lc,si,alternative="greater",exact=F)
## 
##  Wilcoxon rank sum test with continuity correction
## 
## data:  lc and si
## W = 86.5, p-value = 0.04318
## alternative hypothesis: true location shift is greater than 0

  检验结果显示P值0.043<0.05,所以拒绝原假设,肺癌病人的RD值高于矽肺0期工人的RD值。

  Kurskal-Wallis检验是Wilcoxon方法(其实是Mann-Whitney检验)用于多个样本。当对两个样本进行比较的时候,Kurskal-Wallis检验与Mann-Whitney检验是等价的。

  Kurskal-Wallis检验案例 : 用三种药物杀灭蟑螂,每组实验用200只活蟑螂,用药后计算每组蟑螂的死亡数和死亡率。问三种药物杀灭蟑螂的效果有无差别?

drug <-rep(c("甲药","乙药","丙药"),each=5)
data <- c(32.5,35.5,40.5,46,49,16,20.5,22.5,29,36,6.5,9.0,12.5,18,24)
ndata <- data.frame(drug,data)
table(ndata)
##       data
## drug   6.5 9 12.5 16 18 20.5 22.5 24 29 32.5 35.5 36 40.5 46 49
##   丙药   1 1    1  0  1    0    0  1  0    0    0  0    0  0  0
##   甲药   0 0    0  0  0    0    0  0  0    1    1  0    1  1  1
##   乙药   0 0    0  1  0    1    1  0  1    0    0  1    0  0  0
kruskal.test(ndata$data~ndata$drug)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  ndata$data by ndata$drug
## Kruskal-Wallis chi-squared = 9.74, df = 2, p-value = 0.007673

  检验结果显示P值0.007<0.05,所以拒绝原假设,三种药物杀灭钉螺的效果有差别。

  总结:这里几个例题比较几组实验数据是否有显著差异,感觉上和方差分析一样,其实这里的非参数检验未知样本的分布,而方差分析是在检验前需要进行正态性检验和方差齐性检验。

  以上的部分例题参考于网络。

4 本章汇总


名称 类别 功能
rnorm() 函数 生成正态分布数
simple.z.test() 函数 区间估计
sqrt() 函数 求平方根
pt() 函数 算出t统计量对应的P值
pchisq() 函数 算出卡方统计量对应的P值
binom.test() 函数 二项检验
var.test() 函数 方差参数检验
t.test() 函数 t检验
as.factor() 函数 转换为因子变量
bartlett.test() 函数 方差齐性检验
poisson.test() 函数 泊松检验
qpois() 函数 泊松分布统计量
ks.test() 函数 检验单样本是否符合某种分布 。 检验双样本是否属于同一分布。
runif() 函数 随机生成一组数据
shapiro.test() 函数 正态性检验
mood.test() 函数 检验两样本中位数是否相同
ansari.test() 函数 检验两样本中位数是否相同
fligner.test() 函数 检验两样本中位数是否相同
chisq.test() 函数 列联表数据独立性检验:卡方独立性检验
matrix() 函数 生成矩阵对象
fisher.test() 函数 Fisher’s精确检验
vcd 表格绘制
xtabs() 函数 构建一个交叉相乘表
wilcox.test() 函数 非参数的秩检验
kruskal.test() 函数 非参数的秩检验