对于二元数据

r语言数据分析最大最小值(用R语言做数据分析)(1)

可以计算样本的相关系数Rxy,假设样本来自总体(X,Y),那么总体的相关系数为:

r语言数据分析最大最小值(用R语言做数据分析)(2)

那么样本的相关系数与总体的相关系数有什么关系呢?

当样本的个数n充分大,Rxy可以作为p(X,Y)的估计,也就是说:当样本个数较大时,样本相关,总体也相关。但当样本个数较小时,就无法得到相应的结论。现在的问题是:当样本个数n至少取到多少时,样本相关才能保证总体也相关呢?

Ruben(鲁宾)给出了总体相关系数的区间估计的近似逼近函数,设n是样本个数,r是样本相关系数,μ是标准正态分布的上α/2分位点,即μ=Zα/2,则计算:

r语言数据分析最大最小值(用R语言做数据分析)(3)

求方程ay^2-2by c=0的根

r语言数据分析最大最小值(用R语言做数据分析)(4)

按照公式编写出"ruben.R"的脚本程序:

ruben.test<-function(n,r,alpha=0.05){

u<-qnorm(1-alpha/2)

r_start<-r/sqrt(1-r^2)

a<-2*n-3-u^2

b<-r_start*sqrt((2*n-3)*(2*n-5))

c<-(2*n-5-u^2)*r_start^2-2*u^2

y1<-(b-sqrt(b^2-a*c))/a

y2<-(b sqrt(b^2-a*c))/a

data.frame(n=n,r=r,conf=1-alpha,L=y1/sqrt(1 y1^2),U=y2/sqrt(1 y2^2))

}

当n=6,r=0.8时,调入已编写好的ruben.R的函数,并计算得到:

> source("ruben.R")

> ruben.test(6,0.8)

n r conf L U

1 6 0.8 0.95 -0.09503772 0.9727884

置信区间为(-0.095,0.97),去置信下界是负数,即是r=0.8,也不能说明总体I相关的。

当n=25,r=0.7时,计算并得到:

> ruben.test(25,0.7)

n r conf L U

1 25 0.7 0.95 0.4108176 0.8535657

置信区间为(0.41,0.85),此时,基本上能说总体是相关的。

关于置信区间的近似逼近方法还有David(大卫)提出 的图表方法,Kendall(肯德尔)和Stuart(斯图亚特)提出的Fisher逼近方法。

确认总司是否相关最有效的方法是作总体(X,Y)^T的相关性检验。当(X,Y)^T是二元正态总体,且p(X,Y)=0,则统计量

r语言数据分析最大最小值(用R语言做数据分析)(5)

服从自由度为n=2的t分布。

利用统计量t服从自由度为n=2的t分布的性质,可以对数据X和Y的相关性进行检验,由于相关系数Rxy被称为Pearson(皮尔森)相关系数,因此,此检验方法也被称为Pearson相关性检验。对于相关性检验,还有Spearman秩检验和Kendall秩检验。R语言中国,cor.test()函数提供了上述三种检验方法,其使用方法为:

r语言数据分析最大最小值(用R语言做数据分析)(6)

其中x,y是数据长度相同的向量,alternative是备择假设(《每天一点统计学——假设检验概论》),缺省值为”two.sided“,method是选择的检验方法,缺省值为Pearson检验。conf.level是置信区间水平,缺省值为0.95。

cor.test()函数还有另一种使用格式:

r语言数据分析最大最小值(用R语言做数据分析)(7)

其中formula是公式,data是数据框,subset是可选择向量,表示观察值的子集。

> x<-c(67,54,72,64,39,22,58,43,46,34)

> y<-c(24,15,23,19,16,11,20,16,17,13)

> ore<-data.frame(x,y)

> attach(ore)

> cor.test(x,y)

Pearson's product-moment correlation

data: x and y

t = 6.6518, df = 8, p-value = 0.0001605

alternative hypothesis: true correlation is not equal to 0

95 percent confidence interval:

0.6910290 0.9813009

sample estimates:

cor

0.9202595

其中p值为0.0001605<0.05,拒绝原假设,认为X与Y相关。计算得出的置信区间为(0.69,0.98),从这点上也可以看出X与Y是相关的。

另外还可用下面两种方法检验相关性。

> cor.test(x,y,method = "spearman")

> cor.test(x,y,method = "kendall")

,