相关系数可以用来描述定量变量之间的关系
相关系数的符号表明关系的方向,其值的大小表示关系的强弱程度
一般认为0.3一下的为弱相关,0.3-0.7之间的为中相关,0.7以上的为强相关
下面描述的关系都是线性相关,如果结果返回为不相关仅仅表示没有线性相关性
相关的类型
R语言可以计算多种相关系数,包括Peason相关系数,Spearman相关系数,kendall相关系数,偏相关系数,多分格相关系数和多系列相关系数。
1,Pearson,Spearman和Kendall相关
Pearson积差相关系数衡量了两个定量变量之间的线性相关程度
Spearman等级相关系数则衡量分级定序变量之间的相关程度
Kenddall’s Tau相关系数也是一种非参数的等级相关度量
Pearson,Spearman和Kendall相关的区别
两个连续变量间呈现线性相关时,使用Pearson积差相关系数,
不满足积差相关分析的使用条形时(双变量成正太分布,为线性相关),需使用Spearman秩相关来描述变量间的相关变化关系
Spearman相关系数又称秩相关系数,是利用两变量的秩次大小作线性相关分析,对原始变量的分布不作要求,属于非参数统计方法,
相对于Pearson相关使用范围要广些,对于服从Pearson相关系数的数据也可以计算Spearman相关系数,但是效果要低一些
(因为Spearman忽略了原始变量的值的大小,只看重此值在整个变量数据的名次位置)
Kendall’s tau-b等级相关系数,用于反映分类变量相关性指标,适用于两个分类变量均为有序分类的情况
1,若非等间距测度的连续变量,因为分布不明-可用等级相关也可用Pearson相关,对于完全等级离散变量必用等级相关
2,当资料不服从双变量正态分布或总体分布型未知或原始数据时用等级表示时,宜用Spearman或Kendall相关
3,若不恰当用了Kendall等级相关分析则可能得出相关系数偏小的结论。对于一般情况默认数据服从正太分布的,用Pearson分析方法
斯皮尔曼等级相关是根据等级资料研究两个变量间相关关系的方法。它是依据两列成对等级的各对等级数之差来进行计算的,所以又称为“等级差数法”
斯皮尔曼等级相关对数据条件的要求没有积差相关系数严格,只要两个变量的观测值是成对的等级评定资料,或者是由连续变量观测资料转化得到的等级资料,
不论两个变量的总体分布形态、样本容量的大小如何,都可以用斯皮尔曼等级相关来进行研究。
Kendall’s相关系数
肯德尔(Kendall)W系数又称和谐系数,是表示多列等级变量相关程度的一种方法。适用这种方法的数据资料一般是采用等级评定的方法收集的,
例如让K个评委(被试)评定N件事物,或1个评委(被试)先后K次评定N件事物。等级评定法每个评价者对N件事物排出一个等级顺序,
最小的等级序数为1 ,最大的为N,若并列等级时,则平分共同应该占据的等级,如,平时所说的两个并列第一名,他们应该占据1,2名,
所以它们的等级应是1.5,又如一个第一名,两个并列第二名,三个并列第三名,则它们对应的等级应该是1,2.5,2.5,5,5,5,这里2.5是2,3的平均,5是4,5,6的平均。
肯德尔(Kendall)U系数又称一致性系数,是表示多列等级变量相关程度的一种方法。
该方法同样适用于让K个评委(被试)评定N件事物,或1个评委(被试)先后K次评定N件事物所得的数据资料,
只不过评定时采用对偶评定的方法,即每一次评定都要将N个事物两两比较,评定结果如下表所示,
表格中空白位(阴影部分可以不管)填入的数据为:若i比j好记1,若i比j差记0,两者相同则记0.5。一共将得到K张这样的表格,
将这K张表格重叠起来,对应位置的数据累加起来作为最后进行计算的数据,这些数据记为γij。
这三种相关系数的计算
cor()函数可以计算这三种相关系数
cov()函数可以用来计算协方差
cor()函数的格式为
cor(x,use=,method=)
参数x表示矩阵或数据框
参数use指定缺失数据的处理方式。可选的方式为all.obs(假设不存在缺失数据–遇到缺失数据时将报错),
everything(遇到缺失数据时,相关系数的计算结果将被设为missing),complete.obs(行删除),以及pairwise.complete.obs(成对删除)
method 指定相关系数的类型,可选类型有pearson,spearman或kendall
默认参数为use="everything"和method=“pearson”
示例
> #使用的数据为state.x77表中的数据
> states <- state.x77[,1:6]
> options(digits = 2)
> #计算协方差
> cov(states)
Population Income Illiteracy Life Exp Murder HS Grad
Population 19931684 571230 292.87 -407.84 5663.5 -3551.5
Income 571230 377573 -163.70 280.66 -521.9 3076.8
Illiteracy 293 -164 0.37 -0.48 1.6 -3.2
Life Exp -408 281 -0.48 1.80 -3.9 6.3
Murder 5664 -522 1.58 -3.87 13.6 -14.5
HS Grad -3552 3077 -3.24 6.31 -14.5 65.2
> #计算相关系数
> cor(states)
Population Income Illiteracy Life Exp Murder HS Grad
Population 1.000 0.21 0.11 -0.068 0.34 -0.098
Income 0.208 1.00 -0.44 0.340 -0.23 0.620
Illiteracy 0.108 -0.44 1.00 -0.588 0.70 -0.657
Life Exp -0.068 0.34 -0.59 1.000 -0.78 0.582
Murder 0.344 -0.23 0.70 -0.781 1.00 -0.488
HS Grad -0.098 0.62 -0.66 0.582 -0.49 1.000
> #计算Spearman的相关系数
> cor(states,method = "spearman")
Population Income Illiteracy Life Exp Murder HS Grad
Population 1.00 0.12 0.31 -0.10 0.35 -0.38
Income 0.12 1.00 -0.31 0.32 -0.22 0.51
Illiteracy 0.31 -0.31 1.00 -0.56 0.67 -0.65
Life Exp -0.10 0.32 -0.56 1.00 -0.78 0.52
Murder 0.35 -0.22 0.67 -0.78 1.00 -0.44
HS Grad -0.38 0.51 -0.65 0.52 -0.44 1.00
注意,上述结果并未指明相关系数是否显著不为0,由于这个原因需要对相对关系数进行显著性检验
偏相关
偏相关是指在控制一个或多个定量变量时,另外两个定量变量之间的相互关系
在多元变量分析的情况下,一个变量与另一个变量之间的关系,可能还会受到第三个变量的影响,
比如施肥量与产量之间的关系,可能还会受天气的影响,还会受土地的肥沃程度影响。
如果单纯的考虑它们之间的相关系数,就不能真实反映它们的关系程度。
应该是考虑在天气情况和土地肥沃程度保持不变的情况下,施肥量与产量的相关系数会趋于更加真实,
这里的相关系数就是偏相关系数。
偏相关的计算
ggm包中的pcor()函数计算偏相关,其格式为
pcor(u,s)
参数U是一个数值向量,前两个数值表示要计算的相关系数的下标,其余的数值为条件变量(即要排除影响的变量)的下标
参数s为变量的协方差阵
例子
> library(ggm)
> colnames(states)
[1] "Population" "Income" "Illiteracy" "Life Exp" "Murder" "HS Grad"
> pcor(c(1,5,2,3,6),cov(states))
[1] 0.35
>
其他类型的相关
polycor包中的hetcor()函数可以计算一种混合的相关矩阵,其中包括数值型变量的Pearson积差相关系数
数值型变量和有序变量之间的多系列相关系数,有序变量之间的多分格相关系数以及二分变量之间的四分相关系数
2,相关性的显著性检验
关系的显著性:指两(或多)变量之间关系的统计显著水平,一般要求P<0.05.
如果不显著(p>0.05),不管其相关系数多强都没有讨论的意义。
使用函数cor.test()函数对单个的Pearson,Spearman和Kendall相关系数进行检验。
函数cor.test()的使用格式为
cor.test(x,y,alternative = ,method = )
参数x,y表示要检验的相关性的变量
alternative则用来指定进行双侧检验或单侧检验(取值为two.side,less,greater)
method用以指定要计算的相关类型("pearson,kendall,spearman)
当研究的假设为总体的相关系数小于0时,使用alternative=“less”
当研究的假设为总体的相关系数大于0时,使用alternative=“greater”
当研究的假设为总体的相关系数不为0时,使用alternative=“two.side”(其为默认设置)
注意cor.test()函数每次只能检验一种相关关系,不能像cor()函数那样一次性计算多种变量之间的相关系数生成相关系数矩阵
例子
>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.53 0.82
sample estimates:
cor
0.7
> cor(states[,3],states[,5])
[1] 0.7
#cor.test(states[,3],states[,5])返回的p-value=1e-08
#如果总体的相关度为0的话,表示预计在一千万次机会(即p=1e-08)中只有一次的机会见到0.7这样大的相关样本相关度
#0.7为样本的相关度
psych包中提供的corr.test()函数可以一次性的多对多的生成相关系数矩阵和显著性水平矩阵
例子
> states <- state.x77[,1:6]
> library(psych)
Warning message:
程辑包‘psych’是用R版本3.6.1 来建造的
> corr.test(states,use="complete")
Call:corr.test(x = states, use = "complete")
Correlation matrix
Population Income Illiteracy Life Exp Murder HS Grad
Population 1.00 0.21 0.11 -0.07 0.34 -0.10
Income 0.21 1.00 -0.44 0.34 -0.23 0.62
Illiteracy 0.11 -0.44 1.00 -0.59 0.70 -0.66
Life Exp -0.07 0.34 -0.59 1.00 -0.78 0.58
Murder 0.34 -0.23 0.70 -0.78 1.00 -0.49
HS Grad -0.10 0.62 -0.66 0.58 -0.49 1.00
Sample Size
[1] 50
Probability values (Entries above the diagonal are adjusted for multiple tests.)
Population Income Illiteracy Life Exp Murder HS Grad
Population 0.00 0.59 1.00 1.0 0.10 1
Income 0.15 0.00 0.01 0.1 0.54 0
Illiteracy 0.46 0.00 0.00 0.0 0.00 0
Life Exp 0.64 0.02 0.00 0.0 0.00 0
Murder 0.01 0.11 0.00 0.0 0.00 0
HS Grad 0.50 0.00 0.00 0.0 0.00 0
To see confidence intervals of the correlations, print with the short=FALSE option
> head(states)
Population Income Illiteracy Life Exp Murder HS Grad
Alabama 3615 3624 2.1 69 15.1 41
Alaska 365 6315 1.5 69 11.3 67
Arizona 2212 4530 1.8 71 7.8 58
Arkansas 2110 3378 1.9 71 10.1 40
California 21198 5114 1.1 72 10.3 63
Colorado 2541 4884 0.7 72 6.8 64
其他显著性检验
偏相关系数的显著性检验
在多元正态性的假设下,psych包中的pcor.test()函数可以用来检验在控制一个或多个额外变量时的两个变量之间的独立性
pcor.test()的格式为
pcor.test(r,q,n)
参数r是由pcor()函数得到的偏相关系数,q为要控制的变量数(以数值表示位置),n为样本大小
psych包中的r.test()函数提供了多种实用的显著性检验方法此函数可以用来检验:
某种相关系数的显著性,两个独立相关系数的差异是否显著,两个基于一个共享变量得到的非独立相关系数的差异是否显著
两个基于完全不同的变量得到的非独立相关系数的差异是否显著
四,t检验
在研究中常见的行为就是对两个组进行比较。
接受某种新药治疗的患者是否较使用某种现有药物的患者表现出了更大程度的改善?某种制造工艺是否较另外一种制造工艺出的不合格品更少。
像这种一个变量是二分变量(只有两种类型的类别变量)一个变量(此变量是结果变量)是连续型变量,并假设结果变量呈正态分布。则可以使用t检验进行显著性检验
由于t检验的前提假设是总体服从正态分布,因此在进行t检验之前要进行正态分布检验。
检验数据是否符合正态分布的方法
1,可以通过画直方图,观察是否为倒钟型。
2,画QQ图,观察形状是否是一条连接主对角线的线,若是,那便是接近正态分布的
3,hapiro.test,这种检验方式适合于样本量比较小(N<20)的时候使用
一个针对两组的独立样本t检验可以用于检验两个总体的均值相等的假设(就是假设两组的总体均值相等看假设是否成立,如果不成立则显著)。
这里假设两组数据时独立的,并且是从正态总体中抽得。
t检验的格式为
t.test(y~x,data)
参数y是一个数值型变量,x是一个二分变量
t检验的格式还可以为
t.test(y1,y2)
参数y1和y2为数值型向量(即各组的结果变量)可选参数data的取值为一个包含了这些变量的矩阵或数据框
与其他多数统计软件不同的是,这里的t检验默认假设方差不相等。并使用了Welsh的修正自由度。可以添加一个参数var.cqual=TRUE以假设方差相等
例子
> library(MASS)
> 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.039 -0.012
sample estimates:
mean in group 0 mean in group 1
0.039 0.064
#此时返回的p值小于0.001可以拒绝原假设
#注意由于结果是一个比例值,可以在执行t检验之前尝试对其进行正态化变换
2,非独立性样本的t检验
例如,检验较年轻男性的失业率是否比年长男性的失业率更高,这种情况下两组数据就不独立。你不能说年轻男性和年长男性的失业率之间没有关系
在两组的观测之间相关时,你获得的是一个非独立组设计,前后侧设计或重复侧量设计同样也会产生非独立的组
非独立样本的t检验假定组间的差异呈正态分布。
其格式为
t.test(y1,y2,paired = TRUE)
其中的y1和y2为两个非独立组的数值向量。
例子
> library(MASS)
> sapply(UScrime[c("U1","U2")],function(x)(c(mean=mean(x),sd=sd(x))))
U1 U2
mean 95 34.0
sd 18 8.4
> t.test(UScrime$U1,UScrime$U2,paired = TRUE)
Paired t-test
data: UScrime$U1 and UScrime$U2
t = 32, df = 46, p-value <2e-16
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
58 65
sample estimates:
mean of the differences
61
更多关于t检验可以参考R语言t检验及R语言t检验的公式详解
多于两个组的情况
如果想在多于两个的组之间进行比较。如果能够假设数据是从正态总体中独立抽样而得的。可以使用方差分析(ANOVA)
五,组间差异的非参数检验
如果数据无法满足t检验或ANOVA的参数假设,可以转而使用非参数方法。例如若结果变量在本质上就严重偏倚或呈现有序关系,那么就可以使用组间差异的非参数检验
当t检验的假设合理时,参数检验的功效更强(更容易发现存在的差异)。而非参数检验在假设非常不合理时(如对于等级有序数据)更适用
1,两组的比较
若两个组数据独立,可以使用Wilcoxon秩和检验(更广为人知的名字是Mann-Whitney U检验)其格式为
wilcox.test(y~x,data)
或
wilcox.test(y1,y2)
例子使用Mann-Whitney U 检验回答关于南北州监禁率的问题
> with(UScrime,by(Prob,So,median))
So: 0
[1] 0.038
-------------------------------------------------------------------
So: 1
[1] 0.056
> 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
从返回的p值来看可以拒绝南方各州和非南方各州监禁率相同的假设(p < 0.001)
非独立样本的非参数检验
例子
sapply(UScrime[c("U1","U2")],median)
U1 U2
92 34
> 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检验
Kruskal-Wallis检验的调用格式为:
kruskal.test(y~A,data)
而Friedman检验的格式为
friedman.test(y~A | B, data)
其中y是数值型结果变量,A是一个分组变量,而B是一个用以认定匹配观测的区组变量
例子使用Kruskal-Wallis检验回答文盲率的问题
> #首先需要将各地区的名称添加到数据集中。这些信息包含在随R基础安装分发的state.region数据集中
> 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 15.1 41 20 50708
Alaska West 365 6315 1.5 69 11.3 67 152 566432
Arizona West 2212 4530 1.8 71 7.8 58 15 113417
Arkansas South 2110 3378 1.9 71 10.1 40 65 51945
California West 21198 5114 1.1 72 10.3 63 20 156361
Colorado West 2541 4884 0.7 72 6.8 64 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
此例子拒绝了不存在差异的原假设,但是这个检验并没有告诉你哪些地区显著地与其他地区不同
1,可以使用Wilcoxon检验每次比较两组数据。
2,使用wmc()函数同步进行多组比较,它每次用Wilcoxon检验两组,并通过p.adj()函数调整概率值
小结:
R可以计算多种相关系数,包括Peason相关系数,Spearman相关系数,kendall相关系数
函数cov()可以计算相关系数
ggm包中的pcor()函数可以计算偏相关系数
相关性的显著性检验
关系的显著性:指两(或多)变量之间关系的统计显著水平,一般要求P<0.05.
使用函数cor.test()函数对单个的Pearson,Spearman和Kendall相关系数进行显著性检验
psych包中提供的corr.test()函数可以一次性的多对多的生成相关系数矩阵和显著性水平矩阵
pcor.test()函数可以进行偏相关系数的显著性检验。
t检验
像这种一个变量是二分变量(只有两种类型的类别变量)一个变量(此变量是结果变量)是连续型变量,并假设结果变量呈正态分布。则可以使用t检验进行显著性检验
t检验的格式为
t.test(y~x,data)
这个是描述相关系数比较好的文章放在这里:相关系数