斯皮爾曼等級相關係數 (Spearman's rank correlation coefficient)

套路35: 斯皮爾曼等級相關係數 (Spearman's rank correlation coefficient)

1. 使用時機: 斯皮爾曼等級相關係數是用以反映兩組變數之間關係密切程度的統計指標。
2. 分析類型: 無母數分析(non-parametric analysis) 直接使用資料數值算統計叫parametric方法,把資料排序之後用排序的名次算統計叫non-parametric方法。
3. 斯皮爾曼等級相關係數前提假設: 無。
4. 範例資料: 某研究餵食量對斑馬魚(zebrafish)存活的影響。在恆溫下投入飼料X (mg)斑馬魚存活比例Y的資料如下:
X (mg)        
0.1
0.15
0.2
0.25
0.3
0.35
0.4
0.45
0.5
0.55
Y (存活比例)
1
0.95
0.95
0.9
0.85
0.7
0.65
0.6
0.55
0.42
5. 畫圖看資料分佈:
第一步: 輸入建立資料,儲存在變數名稱為datdata frame中。
  v1 <- c(0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55)
  v2 <- c(1, 0.95, 0.95, 0.9, 0.85, 0.7, 0.65, 0.6, 0.55, 0.42)
  dat <- data.frame(v1, v2)
: 安裝ggplot2程式套件。
第三步: 呼叫ggplot2程式套件備用。
  library(ggplot2)
第四步: 使用函數ggplot代入datv1v2x-y散佈圖及回歸線
  ggplot(dat, aes(x = v1, y = v2)) +
  geom_point(shape = 1) +    # 畫空心圓
  geom_smooth(method = lm)   # 加回歸線
  # 灰色區域是回歸線的95%信賴區間。
6. 使用R計算斯皮爾曼等級相關係數方法一:
第一步: 輸入建立資料
  v1 <- c(0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55)
  v2 <- c(1, 0.95, 0.95, 0.9, 0.85, 0.7, 0.65, 0.6, 0.55, 0.42)
第二步: 使用基本模組(base)函數cor代入v1v2計算斯皮爾曼等級相關係數
  cor(v1, v2, method = "spearman")
[1] -0. 9969651  # 計算結果斯皮爾曼等級相關係數 = -0.9969651
  # 無提供p
第三步: 檢定斯皮爾曼等級相關係數是否為零(XY無關): H0: ρ = 0HA: ρ ≠ 0使用基本(base)模組函數cor.test代入v1v2計算斯皮爾曼等級相關係數並進行假設檢定
  cor.test(v1, v2, alternative = "two.sided", method = "spearman", exact = FALSE)
第四步: 判讀結果
         Spearman's rank correlation rho
data:  v1 and v2
S = 329.5, p-value = 3.698e-10   # p < 0.05H0: ρ = 0不成立,XY有關
alternative hypothesis: true rho is not equal to 0
sample estimates:  rho  -0.9969651  # 計算結果斯皮爾曼等級相關係數 = -0.9969651
  # 如計算結果p < 0.05H0: ρ = 0,不成立,XY有關
  # 如計算結果p > 0.05H0: ρ = 0,成立,XY無關
  # 如果要檢定: H0: ρ ≥ 0 & HA: ρ < 0H0: ρ > 0 & HA: ρ ≤ 0alternative = "less"
  # 如果要檢定: H0: ρ ≤ 0 & HA: ρ > 0H0: ρ < 0 & HA: ρ ≥ 0alternative = "greater"
  # 由於有數值相同資料(排序相同: tied rank)所以要設定exact = FALSE
7. 使用R計算斯皮爾曼等級相關係數方法二:
第一步: 輸入建立資料
  v1 <- c(0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55)
  v2 <- c(1, 0.95, 0.95, 0.9, 0.85, 0.7, 0.65, 0.6, 0.55, 0.42)
第二步: 安裝fBasics程式套件
第三步: 呼叫fBasics程式套件備用
  library(fBasics)
第四步: 閱讀fBasics程式套件spearmanTest函數的使用說明
  help(spearmanTest)
第五步: 使用fBasics程式套件spearmanTest函數代入v1v2計算斯皮爾曼等級相關係數
  spearmanTest(v1, v2)
第六步: 判讀結果
Title:
  Spearman's rho Correlation Test
Test Results:
  SAMPLE ESTIMATES:
    rho: -0.997
  STATISTIC:
    S: 329.4992
  P VALUE:
    Alternative Two-Sided: 3.698e-10
     Alternative   Less: 1.849e-10
     Alternative   Greater: 1
  # 如計算結果p < 0.05H0: ρ = 0,不成立,XY有關
  # 如計算結果p > 0.05H0: ρ = 0,成立,XY無關
  # 如果要檢定: H0: ρ ≥ 0 & HA: ρ < 0H0: ρ > 0 & HA: ρ ≤ 0alternative = "less"
  # 如果要檢定: H0: ρ ≤ 0 & HA: ρ > 0H0: ρ < 0 & HA: ρ ≥ 0alternative = "greater"
  # 由於有數值相同資料(排序相同: tied rank)此方法無法計算exact p value
8. 檢定二組樣本數不同之斯皮爾曼等級相關係數統計上是否有差: H0: ρ1 = ρ2HA: ρ1ρ2
第一步: 輸入建立資料
  v1 <- c(0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55)
  v2 <- c(1, 0.95, 0.95, 0.9, 0.85, 0.7, 0.65, 0.6, 0.55, 0.41)
  v3 <- c(0.1, 0.16, 0.21, 0.26, 0.31, 0.37, 0.41, 0.47, 0.51, 0.56, 0.6, 0.64, 0.69, 0.74)
  v4 <- c(0.99, 0.94, 0.93, 0.9, 0.86, 0.74, 0.66, 0.6, 0.55, 0.5, 0.45, 0.4, 0.35, 0.3)
第二步: 使用基本(base)模組函數cor代入v1v2v3v4算出兩組斯皮爾曼等級相關係數r1r2
  r1 <- cor(v1, v2, method = "spearman")
  r2 <- cor(v3, v4, method = "spearman")
第三步: 安裝cocor程式套件。
第四步: 呼叫cocor程式套件備用。
  library(cocor)
第五步: 閱讀cocor模組的cocor.indep.groups函數使用說明
  help(cocor.indep.groups)
第六步: 使用cocor模組的cocor.indep.groups函數代入相關係數r1r2及樣本數(n1 = 10, n2 = 14)進行假設檢定
  cocor.indep.groups(r1, r2, 10, 14, alternative = "two.sided", test = "all", alpha = 0.05, conf.level = 0.95, null.value = 0, data.name = NULL, var.labels = NULL, return.htest = FALSE)
第七步: 判讀結果
  Results of a comparison of two correlations based on independent groups
Comparison between r1.jk = -0.997 and r2.hm = -1
Difference: r1.jk - r2.hm = 0.003
Group sizes: n1 = 10, n2 = 14
Null hypothesis: r1.jk is equal to r2.hm
Alternative hypothesis: r1.jk is not equal to r2.hm (two-sided)
Alpha: 0.05
fisher1925: Fisher's z (1925)
  z = Inf, p-value = 0.0000
  Null hypothesis rejected
zou2007: Zou's (2007) confidence interval
  95% confidence interval for r1.jk - r2.hm: 0.0007 0.0133
  Null hypothesis rejected (Interval does not include 0)
  # 如計算結果p < 0.05H0: ρ1 = ρ2,不成立,二相關係數統計上有差
  # 如計算結果p > 0.05H0: ρ1 = ρ2,成立,二相關係數統計上沒差
  # 如果要檢定: H0: ρ1ρ2 & HA: ρ1 < ρ2H0: ρ1 > ρ2 & HA: ρ1 ρ2alternative = "less"
  # 如果要檢定: H0: ρ1ρ2 & HA: ρ1 > ρ2H0: ρ1 < ρ2 & HA: ρ1 ρ2alternative = "greater"
9. 範例資料2: Bacteria_Genera.txt為空白分隔純文字資料檔內含不同實驗樣本中細菌組成比例
第一步: 輸入建立資料使用read.table函數直接從檔案讀入資料或將資料貼到函數中如下所示然後將資料放入變數dataset_g
    dataset_g <- read.table(header = T, text = "
  Acidipila Aciditerrimonas Acinetobacter Amaricoccus Aminicenantes Angustibacter
A1 0 0 0 0 0.046488287 0
A2 0.019110994 0 0 0.027027027 0.019110994 0
A3 0 0 0 0 0.016568013 0
B1 0.091030514 0.016349563 0 0 0 0.032699126
B2 0.09476955 0 0.032037955 0.027745683 0 0
B3 0.097683083 0 0.017834409 0 0 0.017834409
C1 0.090243422 0.018420861 0 0 0.026051032 0
C2 0.08234428 0 0.023290479 0.016468856 0 0.016468856
C3 0.06573422 0 0.017568209 0.017568209 0 0
D1 0.122666303 0.025039154 0 0 0 0
D2 0.099660276 0.022011273 0.026958193 0.022011273 0 0
D3 0.082080737 0.013874177 0 0 0 0
E1 0.05484085 0.019389168 0 0.027420425 0 0
E2 0.096534949 0.015457963 0.026773978 0.037864122 0 0
E3 0.072001213 0 0 0 0 0.033036422")
  # 資料為空白分隔的純文字。
  #  header = T資料有標題。
  # 資料第一列Acidipila前有一空白。
  # 變數名稱(dataset_g) 是使用者自定。
10. 相關係數的應用I: 相關係數矩陣(correlation matrix)顯示多變數資料中任二變數間的相關性
第一步:使用as.matrix函數代入變數dataset_g將資料轉換成Rmatrix資料型態放入變數m
  m <- as.matrix(dataset_g)
  # 變數名稱(m)是使用者自定。
第二步: 安裝Hmisc程式套件。
第三步: 呼叫Hmisc程式套件備用。
  library(Hmisc)
第四步: 閱讀Hmisc程式套件的rcorr函數使用說明
  help(rcorr)
第五步: 執行rcorr函數代入變數m資料計算任二變數資料之相關係數矩陣及相對應之p值矩陣
  res <- rcorr(m, type = "spearman")
第六步: 判讀結果
11. 相關係數的應用II: 相關係數矩陣(correlation matrix)顯示多變數資料中任二變數間的相關性
第一步:使用前述cor函數代入變數dataset_g計算任二變數資料相關係數結果放入變數M
  M <- cor(dataset_g, method = "spearman")
  # 變數名稱(M)是使用者自定。
第二步: 安裝corrplot程式套件。
第三步: 呼叫corrplot程式套件備用。
  library(corrplot)
第四步: 閱讀corrplot函數使用說明
  help(corrplot)
第五步: 執行corrplot函數代入M計算並畫出相關矩陣
  corrplot(M, type = "upper", method = "ellipse", order = "hclust", tl.col = "black")
第六步: 儲存圖檔
  # 右上往左下斜(藍色): 正相關。左上往右下斜(紅色): 負相關。橢圓越細長相關係數越接近+1-1
12. 相關係數的應用III: 數值分佈矩陣(scatter plot matrix)及相關係數矩陣顯示多變數資料中任二變數間的數值分佈及相關性
第一步: 使用as.matrix函數將資料轉換成Rmatrix資料型態(data type)放入變數m
  m <- as.matrix(dataset_g)
  # 變數名稱(m)是使用者自定。
第二步: 安裝PerformanceAnalytics程式套件。
第三步: 呼叫PerformanceAnalytics程式套件備用。
  library(PerformanceAnalytics)
第四步: 閱讀PerformanceAnalytics程式套件chart.Correlation函數的使用說明
  help(chart.Correlation)
第五步: 執行PerformanceAnalytics程式套件的chart.Correlation函數代入變數m資料計算任二變數資料之數值分佈矩陣相關係數矩陣
  chart.Correlation(m, histogram = TRUE, method = "spearman", pch = 19)
第六步: 儲存圖檔
  # 上圖中每個變量的分佈顯示在對角線上。
  # 在對角線的底部(下三角): 顯示具有迴歸線的雙變量(X-Y)散佈圖。
  # 在對角線的頂端(上三角): 相關係數加上作為恆星的顯著性水準。
  # 每個顯著性級別都與一個符號相關聯: p(0: "***", 0.001: "**", 0.01: "*", 0.05: ".", 0.1: " ")
13. 相關係數的應用IV: 使用相關係數矩陣作變數群聚分析(cluster analysis)及相關係數熱圖(heatmap)
第一步: 使用基本模組(base)函數cor計算相關係數矩陣放入變數res
  res <- cor(dataset_g, method = "spearman")
  # 變數名稱(res)是使用者自定。
第二步: 使用基本模組(base)函數colorRampPalette選擇顏色
  col <- colorRampPalette(c("blue", "white", "red"))(20)
  # 變數名稱(col)是使用者自定。
第三步: 使用heatmap函數代入mcol進行群聚分析並繪製熱圖
  heatmap(x = res, col = col, symm = TRUE)
第四步: 儲存圖檔
  # 上圖中紅色為正相關(相關係數正值)藍色為反相關(相關係數負值)白色為無關(相關係數近0)

來勁了嗎? 想知道更多?? 補充資料(連結):
2. 關於correlation coefficient (https://en.wikipedia.org/wiki/Correlation_coefficient)
3. 斯皮爾曼等級相關係數計算公式 (https://en.wikipedia.org/wiki/Spearman%27s_rank_correlation_coefficient)
4. 關於R基礎R繪圖及統計快速入門:
   b. Cookbook for R: http://www.cookbook-r.com/
   d. Statistical tools for high-throughput data analysis (STHDA): http://www.sthda.com/english/
e. The Handbook of Biological Statistics: http://www.biostathandbook.com/
f. An R Companion for the Handbook of Biological Statistics: http://rcompanion.org/rcompanion/index.html
5. 關於cocor Diedenhofen B, Musch J. 2015. cocor: a comprehensive solution for the statistical comparison of correlations. PLoS One. 10(3):e0121945. doi: 10.1371/journal.pone.0121945.
6. Zar, JH. 2010. Biostatistical Analysis, Fifth Edition, Pearson.

留言

這個網誌中的熱門文章

統計不球人 目錄 (Table of Contents)

如何選擇統計方法 1

單因子多樣本中位數差異檢定 (Kruskal-Wallis test)