Spearman correlation and ties

前端 未结 7 1843
南旧
南旧 2020-12-04 16:45

I\'m computing Spearman\'s rho on small sets of paired rankings. Spearman is well known for not handling ties properly. For example, taking 2 sets of 8 rankings, even if 6 a

7条回答
  •  盖世英雄少女心
    2020-12-04 17:23

    cor.test with method="spearman" actually calculates Spearman coefficient corrected for ties. I've checked it by "manually" calculating tie-corrected and tie-uncorrected Spearman coefficients from equations in Zar 1984, Biostatistical Analysis. Here's the code - just substitute your own variable names to check for yourself:

    ym <- data.frame(lousy, dors) ## my data
    
    ## ranking variables
    ym$l <- rank(ym$lousy)
    ym$d <- rank(ym$dors)
    
    
    ## calculating squared differences between ranks
    ym$d2d <- (ym$l-ym$d)^2
    
    
    
    ## calculating variables for equations 19.35 and 19.37 in Zar 1984
    
    lice <- as.data.frame(table(ym$lousy))
    
    lice$t <- lice$Freq^3-lice$Freq
    
    dorsal <- as.data.frame(table(ym$dors))
    
    dorsal$t <- dorsal$Freq^3-dorsal$Freq
    
    n <- nrow(ym)
    sum.d2 <- sum(ym$d2d)
    Tx <- sum(lice$t)/12
    Ty <-sum(dorsal$t)/12
    
    
    ## calculating the coefficients
    
    rs1 <- 1 - (6*sum.d2/(n^3-n))  ## "standard" Spearman cor. coeff. (uncorrected for ties) - eq. 19.35
    
    rs2 <- ((n^3-n)/6 - sum.d2 - Tx - Ty)/sqrt(((n^3-n)/6 - 2*Tx)*((n^3-n)/6 - 2*Ty)) ## Spearman cor.coeff. corrected for ties - eq.19.37
    
    
    ##comparing with cor.test function
    cor.test(ym$lousy,ym$dors, method="spearman") ## cor.test gives tie-corrected coefficient!
    

提交回复
热议问题