美文网首页
《Discovering Statistics Using R》

《Discovering Statistics Using R》

作者: 新云旧雨 | 来源:发表于2020-05-02 00:05 被阅读0次

    笔记说明

    读《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
    

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

    z_r=\frac{1}{2} ln(\frac{1+r}{1-r})z_r=tanh^{-1}r
    (其中tanh^{-1}为反双曲正切函数)
    变换后得到的统计量z_r近似服从均值为tanh^{-1}r,标准差为\frac{1} {\sqrt{N-3}}的正态分布。

    将两独立样本的Pearson相关系数都进行Z变换得到z_{r_1}z_{r_2}。这两个统计量都服从正态分布,且相互独立,则二者差值统计量z_{r_1}-z_{r_2}也服从正态分布。差值统计量的均值为z_{r_1}-z_{r_2}。差值统计量的方差为z_{r_1}z_{r_2}的方差之和,即\frac{1} {N_1-3}+\frac{1} {N_2-3}。对差值统计量进行标准化得到:
    z_{Difference}=\frac{z_{r_1}-z_{r_2}}{\sqrt{\frac{1}{N_1-3}+\frac{1}{N_2-3}}}
    在无效假设ρ_1=ρ_2下,z_{difference}服从标准正态分布。由此可计算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相关系数是否不同:
    t_{Difference}=(r_{xy}-r_{zy})\sqrt{\frac{(N-3)(1+r_{xz})}{2(1-r^2_{xy}-r^2_{xz}-r^2_{yz}+2r_{xy}r_{xz}r_{yz})}}
    对应自由度为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》

          本文链接:https://www.haomeiwen.com/subject/ifhcghtx.html