基于R语言的假设检验(一)
假设检验是根据一定假设条件由样本推断总体的一种方法,该假设检验方法需要完成如下5个步骤:
1)提出原假设和备择假设;
2)选定置信水平alpha,一般可以是0.025,0.05或0.1;
3)构造并计算检验统计量;
4)查找某种分布函数的临界值表
5)通过比较统计量和临界值,确定统计量是否落在拒绝域中。
一般是通过比较P值与置信水平的关系,如果P值小于置信水平,则认为需要拒绝原假设,否则不能拒绝原假设。假设检验包含左尾、右尾和双尾三种检验。
由于自然界中绝大多数的随机变量都服从或近似服从正态分布,所以在这样的分布情况下介绍假设检验中有关均值和方差的两个内容:
单样本均值的假设检验
1)提出原假设和备择假设
2)构造并计算检验统计量
总体方差已知时
总体方差未知时
3)计算P值(当已知总体均值时,使用正态分布(pnorm),否则使用t分布(pt))
右尾
左尾
应用
有关单样本均值的假设检验可以通过R中的t.test()函数实现,该函数的语法和参数如下:
t.test(x, y = NULL,
alternative = c("two.sided", "less", "greater"),
mu = 0, paired = FALSE, var.equal = FALSE,
conf.level = 0.95, ...)
x,y为指定分析的数据对象;
alternative指定假设检验的三种形式,默认为双尾检验;
mu为零假设条件下的总体均值,默认为0;
paried指定是否进行配对假设检验,默认不进行配对检验;
var.equal指定两样本方差是否相等,默认不等;
conf.level指定置信水平,默认为0.95。
set.seed(1234)
x <- rnorm(1000, mean = 2.5, sd = 3)
#检验总体均值是否为3
t.test(x, mu = 3)
#检验总体均值是否为2.5
t.test(x, mu = 2.5)
上图的结果返回检验的P值和x的置信区间,从P值可知,样本均值为3的假设检验并没有通过,即认为总体均值不为3。
两样本均值的假设检验
1)提出原假设和备择假设
2)构造并计算检验统计量
两总体方差相等且已知时
两总体方差相等且未知时
3)计算P值
与单样本P值计算方法一致
应用
t.test()函数还可以实现两样本的假设检验。
set.seed(1234)
x <- rnorm(1000, mean = 2.5, sd = 3)
y <- rt(500,3)
z <- rnorm(500, mean = 2.4, sd = 3)
#检验两样本均值是否相等
t.test(x, y)
t.test(x, z)
从上图的结果中显示x和y的均值不等(P值远远小于0.05),而x和z的均值相等(P=0.8342>0.05)。
#两样本均值的配对检验
t.test(y, z, paired = TRUE)
t.test(y-z)
上图结果显示,配对样本y与z的均值也不相等(P值远小于0.05)。
以上t.test()函数只是假设总体方差未知的情况下,计算单样本或两样本的均值假设检验,如果已知总体方差的话,可以使用BSDA包中的z.test()函数。
单样本方差的假设检验
1)提出原假设和备择假设
2)构造并计算检验统计量
总体均值已知时
总体均值未知时
P值计算
P值的计算同单样本P值计算方法一致
应用
R中没有自带的函数可以实现单样本的方差假设检验,这里自定义函数实现检验功能:
univariate.var.test=function(x,var,mu=Inf,
alternative="two.sided"){
n=length(x)
#均值未知时的自由度
df=n-1
#均值未知时的方差估计值
var.est=var(x)
#总体均值已知的情况
if(mu<Inf){
df=n;var.est=sum((x-mu)^2)/n
}
#计算卡方统计量
chi2=df*var.est/var
options(digits=3)
#返回结果
return(data.frame(Pop.var = var,
Samp.var = var.est,df = df,
Chi2.stat = chi2,
P = 2*min(pchisq(chi2,df),
pchisq(chi2,df,lower.tail=F))))
#单侧检验时的P值
if(alternative=="greater") result$P=pchisq(chi2,df,lower.tail=F)
else if(alternative=="less") result$P=pchisq(chi2,df)
result
}
#检验总体方差是否为10
univariate.var.test(x, var = 10)
#检验总体方差是否为9.3
univariate.var.test(x, var = 9.3)
#检验总体均值为2.5时,方差是否为9.6
univariate.var.test(x, var = 9.3, mu = 2.5)
独立两样本方差的假设检验
1)提出原假设和备择假设
2)构造并计算检验统计量
两总体均值已知时
两总体均值未知时
P值计算
P值的计算同单样本P值计算方法一致
应用
有关两样本总体方差的假设检验可以通过R中的var.test()函数实现,该函数的语法和参数如下:
var.test(x, y, ratio = 1,
alternative = c("two.sided", "less", "greater"),
conf.level = 0.95, ...)
x,y位需要检验的数据对象;
ratio指定两样本方差比值,默认值为1;
alternative指定假设检验的三种方式,默认为双尾检验;
level指定置信水平,默认为0.95。
set.seed(1234)
x <- rnorm(1000, mean = 2.5, sd = 3)
y <- rt(500,3)
z <- rnorm(500,mean = 2.6, sd = 3.25)
#检验两总体方差之间是否相等
var.test(x,y)
var.test(x,z)
本文基于参数方法的假设检验讲解基本结束,下期中将会涉及到非参数方法的假设检验。
参考资料
统计建模与R语言
http://www.tuicool.com/articles/AN7fyem
总结:文中涉及到的R包和函数
stats包
t.test()
var.test()
BSDA包
z.test()