vlambda博客
学习文章列表

R语言入门之三:假设检验(Hypothesis testing)


在生活和工作中,我们每天都要做决策。有些事情比较简单,但有些事情让人进退两难。即使有一些数据的帮助,我们也难以辨别真相。这时候,我们就需要用到假设检验,为决策提供客观分析的框架,而不是做出主观的决定。

 

假设分为原假设(Null hypothesis)和备择假设(Alternative hypothesis)。原假设是需要检验的假设,一般记作H0。备择假设是和原假设相反的假设,记作H1或者Ha。我们通过接受或者拒绝原假设做决策。

 

有了假设就需要检验。我们先从学生T检验(Student’s T-test)开始说起。这里的Student是英国统计学家威廉·西里·戈斯特(William Sealy Gosset)的笔名。1908年戈斯特在爱尔兰都柏林酒厂工作的时候,为了检验酿酒质量,提出了t检验。T检验主要用于检验连续型变量的平均值。它可以用于检验一个样本的平均值,也可以用于检验两个样本的平均值。

 

统计学检验都有假设条件。只有在满足假设条件的基础上,才能进行统计检验。在使用t检验之前,要检查正态分布和独立性。

 

1 单一样本检验

 

我们来看一下单一样本的t检验。需要检验的假设是:

H0:样本的平均值=某个数值

H1:样本的平均值不等于这个数值

 

举例来说,我们想知道中国股市上市公司的市净率(PB)的平均值是否为2?这就用到R语言里的

t.test(data$variable,mu=mu_null)

 

你可以设定双边检验还是单边检验。一般都是双边检验。缺省的alpha值是0.05。

 

在stock_total数据集里,包括了A股PB的数据。我们来看t检验:

t.test(stock_total$PB, mu=2)

 

输出:

One Sample t-test

data:  stock_total$PB

t = 6.8902, df = 3488, p-value = 6.585e-12

alternative hypothesis: true mean is not equal to 2

95 percent confidence interval:

 3.485899 4.667892

sample estimates:

mean of x

4.076895


从输出的结果看,p-value很小,说明这个检验统计显著。95%的置信区间是(3.486,4.668),说明我们有95%的信心相信市净率在3.5到4.7之间。

 

因此,在0.05统计显著水平,我们拒绝原假设(p-value很小)。我们认为A股真实的市净率数值不是2。

 

2 双样本检验

 

双样本检验的原假设是两个样本的平均值相等,备择假设是两个样本的平均值不同。在双样本检验中,我们还需要检验方差是否相同。也就是说,

H0:两个样本的方差相同

H1:两个样本的方差不同

 

举例来说,我们想知道北京上市公司的PB是不是和上海上市公司的市盈率显著不同。这就要用到R语言的命令:

var.test(data$var1, data$var2)

 

双样本独立t检验R语言的命令是:

t.test(data$var1,data$var2,var.equal=FALSE, paired=FALSE)

 

在默认的情况下,var.equal=FALSE。如果方差不同,你也可以改为TURE。默认情况下,paired=FALSE。如果数据成对出现,就可以改为TRUE。

 

我们来看北京和上海上市公司PB是否相同的例子。为了比较,我们用subset()函数把数据分为北京上市公司和上海上市公司两个部分

stock_Beijing <- subset(stock_total, Location=="北京")

stock_Shanghai <- subset(stock_total,Location=="上海")

 

然后检验方差

var.test(stock_Beijing$PB,stock_Shanghai$PB, alternative = "two.sided")

 

输出:

F test to compare two variances

data: stock_Beijing$PB and stock_Shanghai$PB

F = 1.2885, num df = 307, denom df = 275,p-value = 0.0318

alternative hypothesis: true ratio ofvariances is not equal to 1

95 percent confidence interval:

1.022395 1.621469

sample estimates:

ratio of variances

1.288503

 

由于这里的p值小于0.05,原假设成立。也就是说我们认为北京和上海上市公司PB的方差相同。

 

检验方差的目的是为了检验平均值。现在我们可以开始检验平均值了。

t.test(stock_Beijing$PB, stock_Shanghai$PB,var.equal=TRUE, paired=FALSE)  

 

输出:

Two Sample t-test

data: stock_Beijing$PB and stock_Shanghai$PB

t = 0.1922, df = 582, p-value = 0.8477

alternative hypothesis: true difference inmeans is not equal to 0

95 percent confidence interval:

-0.9412316 1.1454283

sample estimates:

mean of x mean of y

3.869008 3.766910

 

在0.05显著水平,由于p值很大,我们接受原假设。也就是说北京上海上市公司的PB相同。

 

3  多样本的ANOVA

 

当样本数量多于两个的时候,我们就要用到方差分析(Analysis of Variance,简称ANOVA)。其假设包括:

  • 样本独立

  • 样本内的数据独立同分布(Independent and identically distributed)

  • 残差项正态分布

  • 每个样本的方差相同

 

举例来说,我们想看不同A股行业的PB是否显著不同。怎么回答这个问题呢?R语言中有aov()函数计算ANOVA。但是lm()函数包括了更广义的线性回归模型。我们可以使用lm()函数。而且,我们最好将类别变量转变为因子(factor),这样可以避免R语言把类别型变量当作连续型变量。

res<- lm(PB~factor(Industry),data=stock_total)

anova(res)

 

其结果如下:

Analysis of Variance Table

Response: PB

                             Df  Sum Sq Mean Sq F value  Pr(>F)  

Factor(Industry)   27  16339  605.16  1.9226 0.00287 **

Residuals          3461 1089390 314.76                  

---

Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’1

 

从检验结果可以看出,在0.05显著水平,我们可以拒绝原假设。也就是说,不同行业之间PB平均值存在显著不同。

 

我们可以看一下残差的分析

par(mfrow=c(2,2))

plot(res)


                           

同图中我们可以看出,残差项不是正态分布。看起来我们的分析有点问题,还需要改进。

 

4 类别型变量的检验

 

类别型变量的因变量Y可以是二元或者多元的。比方说,它可以是生病或者不生病,或者是衣服的型号(S,M,L,XL,XXL)等。而自变量X既可以是类别型,也可以是连续型。

 

当我们需要检验两个类别型变量是否相关时,就需要用到卡方检验(Chi-squared test)。卡方检验的原假设是两个变量相互独立。备择假设是两个变量相互不独立。

 

我们可以先创建R*C表格。其中R是表格的行数,C为表格的列数。最常见的是2*2的表格。接下来,通过每一个单元格的数值,计算卡方检验的统计值。

 

比方说,我们可以将股票数据中的行业(Industry)和上市公司地点(Location)这两个类别型变量制成R*C表格。为了展示清晰,我们用slice()函数只选了前10个股票

S100<-slice(stock_total,1:10)

tab1 <- tableby( Location~ Industry,

    data=S100,control=my_controls)

summary(tab1, text=T)

 

然后制成表格,如表1所示

表1

 

接下来,我们用chisq.test()函数计算卡方检验的统计值。这里用的就不是前10个股票的数据了,而是使用了全部数据。

> chisq.test(stock_total$Industry,stock_total$Location)

 

输出:

Pearson's Chi-squared test

data: stock_total$Industry and stock_total$Location

X-squared = 1937.1, df = 810, p-value <2.2e-16

 

通过结果我们可以看出,在0.05显著水平,我们拒绝原假设。也就是说,上市公司的行业和所在地之间有相关性。