R语言学习笔记_04

假设检验

在R的内置函数中几乎囊括了所有常用的假设检验,常用的假设检验包括:

  • 相关性分析包括Pearson相关系数、Spearman相关系数、Kendall相关系数等。
  • 对于类别数据常用卡方独立性检验、Fisher精确检验和Cochran-Mantel-Haenszel检验等。
  • 对于定量数据常用参数检验包括t检验,方差分析,Wilcoxon秩和检验等。

相关性分析

R可以计算多种相关系数,包括Pearson相关系数、Spearman相关系数、Kendall相关系数、偏相关系数、多分格(polychoric)相关系数和多系列(polyserial)相关系数。

> states<- state.x77[,1:6]
# 计算协方差矩阵
> cov(states)
           Population Income Illiteracy Life Exp  Murder  HS Grad
Population   19931684 571230    292.868 -407.842 5663.52 -3551.51
Income         571230 377573   -163.702  280.663 -521.89  3076.77
Illiteracy        293   -164      0.372   -0.482    1.58    -3.24
Life Exp         -408    281     -0.482    1.802   -3.87     6.31
Murder           5664   -522      1.582   -3.869   13.63   -14.55
HS Grad         -3552   3077     -3.235    6.313  -14.55    65.24

# 计算相关性,默认pearson
> cor(states)
           Population Income Illiteracy Life Exp Murder HS Grad
Population     1.0000  0.208      0.108  -0.0681  0.344 -0.0985
Income         0.2082  1.000     -0.437   0.3403 -0.230  0.6199
Illiteracy     0.1076 -0.437      1.000  -0.5885  0.703 -0.6572
Life Exp      -0.0681  0.340     -0.588   1.0000 -0.781  0.5822
Murder         0.3436 -0.230      0.703  -0.7808  1.000 -0.4880
HS Grad       -0.0985  0.620     -0.657   0.5822 -0.488  1.0000

# 指定Spearman相关系数
> cor(states, method="spearman")
           Population Income Illiteracy Life Exp Murder HS Grad
Population      1.000  0.125      0.313   -0.104  0.346  -0.383
Income          0.125  1.000     -0.315    0.324 -0.217   0.510
Illiteracy      0.313 -0.315      1.000   -0.555  0.672  -0.655
Life Exp       -0.104  0.324     -0.555    1.000 -0.780   0.524
Murder          0.346 -0.217      0.672   -0.780  1.000  -0.437
HS Grad        -0.383  0.510     -0.655    0.524 -0.437   1.000

在计算好相关系数以后,如何对它们进行统计显著性检验呢?常用的原假设为变量间不相关(即总体的相关系数为0)。你可以使用cor.test()函数对单个的Pearson、Spearman和Kendall相关系数进行检验。

> cor.test(states[,3], states[,5])

    Pearson's product-moment correlation

data:  states[, 3] and states[, 5]
t = 7, df = 48, p-value = 1e-08
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.528 0.821
sample estimates:
  cor 
0.703 

独立性检验

R提供了多种检验类别型变量独立性的方法。比较常用三种检验分别为卡方独立性检验、Fisher精确检验和Cochran-Mantel-Haenszel检验。

  • 卡方检验
> library(vcd)
> mytable <- xtabs(~Treatment+Improved, data=Arthritis)
> 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, df = 2, p-value = 0.001
# p值小于0.05拒绝原假设,表明患者接受的治疗和改善的水平看上去存在着某种关系

需要注意一些滥用卡方检验的场景:
(1)当样本量较少(N<40)时,需要使用fiser精确检验;
(2)或者有的列联表资料本身是配对的(比较两种检测方法分别对两组患者进行检测,由于患者同时接受了两种方法的检测,研究者关心的是两种方法之间的一致性问题)可以使用Mcnemar卡方检验或者kappa检验;
(3)对于等级资料又与其表示方法与分类资料类似,卡方检验仅仅是回答"构成比"或"率"上的差异是否具有统计学意义,而不能回答效应指标强度高低问题,若使用卡方检验则变成了两组数据之间的"构成比"是否存在明显差异,而无法明确"孰高孰低"的问题,这种情况可以将分级资料进行秩转换然后使用秩和检验或者采用Riddit分析

  • Fisher精确检验

可以使用fisher.test()函数进行Fisher精确检验。Fisher精确检验的原假设是:边界固定的列联表中行和列是相互独立的。其调用格式为fisher.test(mytable),其中的mytable是一个二维列联表。需要注意,当我们的数据样本量小于40或者最小理论频数小于5此时应该使用Fisher精确检验

> mytable <- xtabs(~Treatment+Improved, data=Arthritis)
# 默认使用双侧检验
> fisher.test(mytable)

    Fisher's Exact Test for Count Data

data:  mytable
p-value = 0.001
alternative hypothesis: two.sided
  • Cochran-Mantel-Haenszel检验

mantelhaen.test()函数可用来进行Cochran-Mantel-Haenszel卡方检验,其原假设是,两个名义变量在第三个变量的每一层中都是条件独立的。下列代码可以检验治疗情况和改善情况在性别的每一水平下是否独立。

> mytable <- xtabs(~Treatment+Improved+Sex, data=Arthritis)
> mytable
, , Sex = Female

         Improved
Treatment None Some Marked
  Placebo   19    7      6
  Treated    6    5     16

, , Sex = Male

         Improved
Treatment None Some Marked
  Placebo   10    0      1
  Treated    7    2      5
> mantelhaen.test(mytable)

    Cochran-Mantel-Haenszel test

data:  mytable
Cochran-Mantel-Haenszel M^2 = 15, df = 2, p-value = 7e-04

组间差异的参数检验

在研究中最常见的行为就是对两个组进行比较。接受某种新药治疗的患者是否较使用某种现有药物的患者表现出了更大程度的改善?某种制造工艺是否较另外一种工艺制造出的不合格品更少?两种教学方法中哪一种更有效?这里我们将关注结果变量为连续型的组间比较,并假设其呈正态分布。

  • 独立样本的t检验

与其他多数统计软件不同的是,这里的t检验默认假定方差不相等,并使用Welch的修正自由度。你可以添加一个参数var.equal=TRUE以假定方差相等,并使用合并方差估计。默认的备择假设是双侧的(即均值不相等,但大小的方向不确定)。你可以添加一个参数alternative="less"alternative="greater"来进行有方向的检验。

> library(MASS)
> head(UScrime)
    M So  Ed Po1 Po2  LF  M.F Pop  NW  U1 U2 GDP Ineq   Prob Time    y
1 151  1  91  58  56 510  950  33 301 108 41 394  261 0.0846 26.2  791
2 143  0 113 103  95 583 1012  13 102  96 36 557  194 0.0296 25.3 1635
3 142  1  89  45  44 533  969  18 219  94 33 318  250 0.0834 24.3  578
4 136  0 121 149 141 577  994 157  80 102 39 673  167 0.0158 29.9 1969
5 141  0 121 109 101 591  985  18  30  91 20 578  174 0.0414 21.3 1234
6 121  0 110 118 115 547  964  25  44  84 29 689  126 0.0342 21.0  682

# 一个假设方差不等的双侧检验,比较了南方(group 1)和非南方(group 0)各州的监禁概率
> t.test(Prob ~ So, data=UScrime)

    Welch Two Sample t-test

data:  Prob by So
t = -4, df = 25, p-value = 7e-04
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -0.0385 -0.0119
sample estimates:
mean in group 0 mean in group 1 
         0.0385          0.0637 

  • 非独立样本的t检验

较年轻(14-24岁男性的失业率是否比年长35-39岁男性的失业率更高?在这种情况下,这两组数据并不独立。你不能说亚拉巴马州的年轻男性和年长男性的失业率之间没有关系。在两组的观测之间相关时,你获得的是一个非独立组设计(dependentgroups design)。前-后测设计(pre-post design)或重复测量设计(repeated measures design)同样也会产生非独立的组。

> library(MASS)
> sapply(UScrime[c("U1","U2")], function(x)(c(mean=mean(x),sd=sd(x))))
       U1    U2
mean 95.5 33.98
sd   18.0  8.45

# 指定paired进行配对样本的t检验
> with(UScrime, t.test(U1, U2, paired=TRUE))

    Paired t-test

data:  U1 and U2
t = 32, df = 46, p-value <2e-16
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 57.7 65.3
sample estimates:
mean of the differences 
                   61.5 

方差分析的内容较多在后面做单独介绍

组间差异的非参数检验

  • 两组比较

如果数据无法满足t检验或ANOVA的参数假设,可以转而使用非参数方法。举例来说,若结果变量在本质上就严重偏倚或呈现有序关系,可以使用Wilcoxon秩和检验(Mann-Whitney U检验)

> wilcox.test(Prob ~ So, data=UScrime)

    Wilcoxon rank sum test

data:  Prob by So
W = 81, p-value = 8e-05
alternative hypothesis: true location shift is not equal to 0

Wilcoxon符号秩检验是非独立样本t检验的一种非参数替代方法。它适用于两组成对数据和
无法保证正态性假设的情境。调用格式与Mann-Whitney U检验完全相同,不过还可以添加参数
paired=TRUE。

> with(UScrime, wilcox.test(U1, U2, paired=TRUE))

    Wilcoxon signed rank test with continuity correction

data:  U1 and U2
V = 1128, p-value = 2e-09
alternative hypothesis: true location shift is not equal to 0
  • 多组比较

在要比较的组数多于两个时,必须转而寻求其他方法。如果无法满足ANOVA设计的假设,那么可以使用非参数方法来评估组间的差异。如果各组独立,则Kruskal-Wallis检验将是一种实用的方法。如果各组不独立(如重复测量设计或随机区组设计),那么Friedman检验会更合适。

> states <- data.frame(state.region, state.x77)
> head(states)
           state.region Population Income Illiteracy Life.Exp Murder HS.Grad Frost   Area
Alabama           South       3615   3624        2.1     69.0   15.1    41.3    20  50708
Alaska             West        365   6315        1.5     69.3   11.3    66.7   152 566432
Arizona            West       2212   4530        1.8     70.5    7.8    58.1    15 113417
Arkansas          South       2110   3378        1.9     70.7   10.1    39.9    65  51945
California         West      21198   5114        1.1     71.7   10.3    62.6    20 156361
Colorado           West       2541   4884        0.7     72.1    6.8    63.9   166 103766


> kruskal.test(Illiteracy ~ state.region, data=states)

    Kruskal-Wallis rank sum test

data:  Illiteracy by state.region
Kruskal-Wallis chi-squared = 23, df = 3, p-value = 5e-05

摘抄自R语言实战(第二版)

你可能感兴趣的:(R语言学习笔记_04)