《Discovering Statistics Using R》笔记11-不同Pearson相关系数的差异性检验

笔记说明

读《Discovering Statistics Using R》第六章 Correlation中的6.7节 Comparing correlations做的笔记。

示例数据

有个心理学家对考试焦虑对考试成绩的影响比较感兴趣。她设计了一个量表评估考试焦虑程度。考试前用量表测量学生的焦虑程度(变量Anxiety),用成绩百分位数反映考试表现(变量Exam)。数据在这里:Exam Anxiety
Revise变量表示修改所花的小时数。

#数据导入
library(rio)
examData <- import("data/Exam Anxiety.dat")
str(examData)
## 'data.frame':    103 obs. of  5 variables:
##  $ Code   : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ Revise : int  4 11 27 53 4 22 16 21 25 18 ...
##  $ Exam   : int  40 65 80 80 40 70 20 55 50 40 ...
##  $ Anxiety: num  86.3 88.7 70.2 61.3 89.5 ...
##  $ Gender : chr  "Male" "Female" "Male" "Male" ...

Gender变量表示学生性别。为后续处理方便将其变为factor类型:

examData$Gender <- factor(examData$Gender)
str(examData)
## 'data.frame':    103 obs. of  5 variables:
##  $ Code   : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ Revise : int  4 11 27 53 4 22 16 21 25 18 ...
##  $ Exam   : int  40 65 80 80 40 70 20 55 50 40 ...
##  $ Anxiety: num  86.3 88.7 70.2 61.3 89.5 ...
##  $ Gender : Factor w/ 2 levels "Female","Male": 2 1 2 2 2 1 1 1 1 1 ...

看一下男女各有多少人:

table(examData$Gender)
## Female   Male 
##     51     52 

两组独立样本Pearson相关系数的差异性检验

假设我们想考察焦虑程度和考试表现之间的相关性关系(用Pearson相关系数表示)在男性女性之间是否有差异。
先在男性、女性人群中分别画出散点图并计算样本Pearson相关系数:

library(ggplot2)
scatter <- ggplot(examData, aes(Anxiety, Exam)) + geom_point() + facet_grid(.~ Gender)
scatter
by(examData[,c("Exam","Anxiety")], examData$Gender, cor)
## examData$Gender: Female
##               Exam    Anxiety
## Exam     1.0000000 -0.3813845
## Anxiety -0.3813845  1.0000000
## ------------------------------------------------------------------------------ 
## examData$Gender: Male
##               Exam    Anxiety
## Exam     1.0000000 -0.5056874
## Anxiety -0.5056874  1.0000000

,
对两独立样本相关系数进行差异性检验,我们利用《Discovering Statistics Using R》笔记7-Pearson相关系数中提到的Fisher-Z变换:


(其中为反双曲正切函数)
变换后得到的统计量近似服从均值为,标准差为的正态分布。

将两独立样本的Pearson相关系数都进行Z变换得到和。这两个统计量都服从正态分布,且相互独立,则二者差值统计量也服从正态分布。差值统计量的均值为。差值统计量的方差为、的方差之和,即。对差值统计量进行标准化得到:

在无效假设下,服从标准正态分布。由此可计算P值。
R中没有现成的函数进行两独立样本Pearson相关系数的差异性检验,但我们可以根据上述原理自己写一个实现此功能的函数:

zdifference<-function(r1, r2, n1, n2){
  zd <- (atanh(r1) - atanh(r2)) / sqrt(1/(n1 - 3) + 1/(n2 - 3)) 
  p <- 1 - pnorm(abs(zd))  
  print(paste("Z Difference: ", zd))  
  print(paste("One-Tailed P-Value: ", p))
}
zdifference(-0.506, -0.381, 52, 51)
## [1] "Z Difference:  -0.768709306290097"
## [1] "One-Tailed P-Value:  0.221032949510287"

Z检验下,双侧检验的P值即为单侧检验P值的两倍,本例中即为0.442.此检验结果表示不同性别人群间,考试焦虑程度和考试成绩间的Pearson相关系数的差异无统计学意义。

同组样本的不同Pearson相关系数的差异性检验

具体的检验场景是这样的:同一组样本有三个定量变量x,y,z,比较x,y间的Pearson相关系数和z,y间的Pearson相关系数是否有差异。
示例数据中,假设我们想考察考试焦虑和考试成绩之间的Pearson相关系数与修改时间和考试成绩之间的Pearson相关系数是否有差异。
首先看一下散点图和各自相关系数:

pairs(examData[,c("Exam","Anxiety","Revise")])
cor(examData[,c("Exam","Anxiety","Revise")])
##               Exam    Anxiety     Revise
## Exam     1.0000000 -0.4409934  0.3967207
## Anxiety -0.4409934  1.0000000 -0.7092493
## Revise   0.3967207 -0.7092493  1.0000000

我们可以用t检验来检验同组样本的两不同pearson相关系数是否不同:

对应自由度为N-3
式子看起来比较复杂,实际上只需要以下数字:xyz三个变量两两间的相关系数和样本量N。
R中没有现成的函数进行同组样本不同Pearson相关系数的差异性检验,但我们可以根据上述原理自己写一个实现此功能的函数:(注意比较的是rxy和rzy)

tdifference <- function(rxy, rxz, rzy, n){
  df <- n - 3  
  td <- (rxy - rzy) * sqrt((df * (1 + rxz))/(2*(1  -rxy^2- rxz^2- rzy^2 + (2*rxy*rxz*rzy))))  
  p <-pt(td, df)  
  print(paste("t Difference: ", td)) 
  print(paste("One-Tailed P-Value: ", p))  
}
tdifference(-0.441, -0.709, 0.397, 103)
## [1] "t Difference:  -5.09576822523987"
## [1] "One-Tailed P-Value:  8.21913727738007e-07"

P值很小,考试焦虑和考试成绩之间的Pearson相关系数与修改时间和考试成绩之间的Pearson相关系数的差异有统计学意义。

你可能感兴趣的:(《Discovering Statistics Using R》笔记11-不同Pearson相关系数的差异性检验)