R語(yǔ)言進(jìn)行相關(guān)性分析

相關(guān)性分析

相關(guān)性分析是指對(duì)兩個(gè)或多個(gè)具備相關(guān)性的變量元素進(jìn)行分析青灼,從而衡量?jī)蓚€(gè)變量因素的相關(guān)密切程度。相關(guān)性分析旨在研究?jī)蓚€(gè)或兩個(gè)以上隨機(jī)變量之間相互依存關(guān)系的方向和密切程度崎场。
一般來(lái)講研究對(duì)象(樣品或處理組)之間使用距離分析,而元素(物種或環(huán)境因子)之間進(jìn)行相關(guān)性分析享言。兩個(gè)變量之間的相關(guān)性可以用簡(jiǎn)單相關(guān)系數(shù)(例如皮爾森相關(guān)系數(shù)等)進(jìn)行表示市殷,相關(guān)系數(shù)越接近1,兩個(gè)元素相關(guān)性越大矮湘,相關(guān)系數(shù)越接近0斟冕,兩個(gè)元素越獨(dú)立。

相關(guān)性指標(biāo)

(1)Pearson相關(guān)系數(shù)(皮爾遜積差相關(guān)系數(shù))

Pearson相關(guān)系數(shù)是用于表示相關(guān)性大小的最常用指標(biāo)缅阳,數(shù)值介于-1~1之間磕蛇,越接近0相關(guān)性越低,越接近-1或1相關(guān)性越高十办。正負(fù)號(hào)表明相關(guān)方向秀撇,正號(hào)為正相關(guān)、負(fù)號(hào)為負(fù)相關(guān)向族。適用于兩個(gè)正態(tài)分布的連續(xù)變量呵燕。

(2)Spearman等級(jí)相關(guān)系數(shù)(斯皮爾曼秩相關(guān)系數(shù))

利用兩變量的秩次大小來(lái)進(jìn)行分析,屬于非參數(shù)統(tǒng)計(jì)方法炸枣。適用于不滿足Pearson相關(guān)系數(shù)正態(tài)分布要求的連續(xù)變量虏等。也可以用于有序分類變量的之間的相關(guān)性測(cè)量。

(3)Kendall's Tau相關(guān)系數(shù)

Kendall's Tau相關(guān)系數(shù)是一種非參數(shù)檢驗(yàn)适肠,適用于兩個(gè)有序分類變量霍衫。

(4)其它

此外衡量?jī)蓚€(gè)變量之間關(guān)系的方法還有:卡方檢驗(yàn)、Fisher精確檢驗(yàn)等侯养。

cor函數(shù)

Pearson敦跌、Spearman、Kendall相關(guān)系數(shù)都可以通過(guò)cor函數(shù)實(shí)現(xiàn),cov協(xié)方差函數(shù)參數(shù)同cor函數(shù)柠傍。

(1)用法

cor(x,y=NULL,use="everything",method= c("pearson","kendall","spearman"))
cor(x, use='everything', method='pearson')  #計(jì)算矩陣相關(guān)系數(shù) 
cor(mtcars$mpg, mtcars$cyl)  #計(jì)算兩兩相關(guān)系數(shù) 

  • x:矩陣或數(shù)據(jù)框麸俘。
  • use:指定缺失數(shù)據(jù)的處理方式【宓眩可選項(xiàng):all.obs(假設(shè)不存在缺失數(shù)據(jù))从媚、everything(數(shù)據(jù)存在缺失值時(shí),相關(guān)系數(shù)計(jì)算結(jié)果會(huì)顯示missing)患整、complete.obs(行刪除)拜效、pairwise.complete.obs(成對(duì)刪除)。
  • method:指定相關(guān)系數(shù)的類型各谚〗艉叮可選類型為pearson、spearman昌渤、kendall赴穗。

(2)R Script

> testdata1[1:5,1:5] #隨意找的數(shù)據(jù)
              CF1      CF2      CF3      CF4       CM1
rna13468 66.97984 80.07318 54.87525 91.65463  1.401584
rna885   26.53467 44.51450 33.65076 40.72113 60.633389
rna32332  0.00000 37.71825 11.89813  0.00000  1.403419
rna8744  42.44415 52.31791 60.35968 54.00533 39.524090
rna16488  0.00000  0.00000  0.00000  0.00000  0.000000
> cor_data <- cor(testdata1,method="pearson")
> round(cor_data[1:5,1:5],3)
       CF1    CF2    CF3    CF4    CM1
CF1  1.000  0.668  0.697  0.952 -0.129
CF2  0.668  1.000  0.923  0.664 -0.534
CF3  0.697  0.923  1.000  0.647 -0.386
CF4  0.952  0.664  0.647  1.000 -0.203
CM1 -0.129 -0.534 -0.386 -0.203  1.000
> cor_data <- cor(testdata1,method="spearman")
> round(cor_data[1:5,1:5],3)
       CF1    CF2    CF3    CF4    CM1
CF1  1.000  0.728  0.706  0.904 -0.055
CF2  0.728  1.000  0.785  0.734 -0.373
CF3  0.706  0.785  1.000  0.605 -0.212
CF4  0.904  0.734  0.605  1.000 -0.182
CM1 -0.055 -0.373 -0.212 -0.182  1.000

corrplot

(1)用法

corrplot(corr,  #相關(guān)性系數(shù)矩陣 
    method = c("circle", "square", "ellipse", "number", "shade", "color", "pie"), 
#可視化的方法,可以是圓形膀息、方形般眉、橢圓形、數(shù)值履婉、陰影煤篙、顏色或餅圖形 
    type = c("full", "lower", "upper"), 
#指定展示的方式,可以是完全的毁腿、下三角或上三角 
    add = FALSE, 
    col = NULL,  #指定圖形展示的顏色辑奈,默認(rèn)以均勻的顏色展示 
    bg = "white",  #背景色 
    title = "",  #標(biāo)題 
    is.corr = TRUE,  #是否為相關(guān)系數(shù)繪圖 
    diag = TRUE,  #是否展示對(duì)角線上的結(jié)果 
    outline = FALSE,  #是否繪制圓形、方形或橢圓形的輪廓 
    mar = c(0,0,0,0),  #設(shè)置圖形的四邊間距 
    addgrid.col = NULL, 
#當(dāng)選擇的方法為顏色或陰影時(shí)已烤,默認(rèn)的網(wǎng)格線顏色為白色鸠窗,否則為灰色 
    addCoef.col = NULL, 
#為相關(guān)系數(shù)添加顏色,默認(rèn)不添加相關(guān)系數(shù)胯究,只有方法為number時(shí)稍计,該參數(shù)才起作用 
    addCoefasPercent = FALSE,  #是否將相關(guān)系數(shù)轉(zhuǎn)換為百分比格式 
    order = c("original", "AOE", "FPC", "hclust", "alphabet"), 
#指定相關(guān)系數(shù)排序的方法,可以是原始順序original裕循、特征向量角序AOE臣嚣、第一主成分順序FPC、
#層次聚類順序hclust和字母順序剥哑,一般AOE排序結(jié)果都比FPC要好 
    hclust.method = c("complete", "ward", "single", "average", 
                      "mcquitty", "median", "centroid"), 
#當(dāng)order為hclust時(shí)硅则,該參數(shù)可以是層次聚類中的7種之一 
    addrect = NULL,  #當(dāng)order為hclust時(shí),可以為添加相關(guān)系數(shù)圖添加矩形框 
    rect.col = "black",  #指定矩形框的顏色 
    rect.lwd = 2,  #指定矩形框的線寬
    tl.pos = NULL, 
#指定文本標(biāo)簽(變量名稱)的位置株婴,當(dāng)type=full時(shí)怎虫,默認(rèn)標(biāo)簽位置在左邊和頂部(lt),
#當(dāng)type=lower時(shí),默認(rèn)標(biāo)簽在左邊和對(duì)角線(ld)大审,當(dāng)type=upper時(shí)蘸际,默認(rèn)標(biāo)簽在頂部和對(duì)角線,
#d表示對(duì)角線徒扶,n表示不添加文本標(biāo)簽 
    tl.cex = 1,  #指定文本標(biāo)簽的大小 
    tl.col = "red",  #指定文本標(biāo)簽的顏色 
    tl.offset = 0.4, tl.srt = 90, 
    cl.pos = NULL, 
#圖例(顏色)位置粮彤,當(dāng)type=upper或full時(shí),圖例在右側(cè)姜骡,當(dāng)type=lower時(shí)驾诈,圖例在底部,
#不需要圖例時(shí)溶浴,只需指定該參數(shù)為n 
    cl.lim = NULL, 
    cl.length = NULL, cl.cex = 0.8, cl.ratio = 0.15, 
    cl.align.text = "c",cl.offset = 0.5, 
    addshade = c("negative", "positive", "all"), 
#只有當(dāng)method=shade時(shí),該參數(shù)才有用管引,參數(shù)值可以是negative/positive和all士败,分別表示對(duì)負(fù)相關(guān)系數(shù)、
#正相關(guān)系數(shù)和所有相關(guān)系數(shù)添加陰影褥伴。注意:正相關(guān)系數(shù)的陰影是45度谅将,負(fù)相關(guān)系數(shù)的陰影是135度
    shade.lwd = 1,  #指定陰影的線寬 
    shade.col = "white",  #指定陰影線的顏色 
    p.mat = NULL, sig.level = 0.05, 
    insig = c("pch","p-value","blank", "n"), 
    pch = 4, pch.col = "black", pch.cex = 3, 
    plotCI = c("n","square", "circle", "rect"), 
    lowCI.mat = NULL, uppCI.mat = NULL, ...) 

(2)R Script

library(corrplot)
##默認(rèn)參數(shù)
corrplot(cor_data)

image
##可視化方法
#"circle", "square", "ellipse", "number", "shade", "color", "pie"
corrplot(cor_data, method="pie",title="method=pie")

image
##展示的方式
#"full", "lower", "upper"
corrplot(cor_data, type="upper",title="type=upper")

image
##混合圖形樣式
#corrplot.mixed(matrix,lower="number",upper="circle")
#tl.col修改對(duì)角線的顏色,lower.col修改下三角的顏色,number.cex修改下三角字體大小
corrplot.mixed(cor_data,lower="ellipse",upper="pie")
corrplot.mixed(cor_data,lower="number",upper="pie", 
               tl.col="green",lower.col="skyblue",number.cex=1) 

image
##order
#"original", "AOE", "FPC", "hclust", "alphabet"
#如果是hclust:
#addrect=4 是分組矩形
#rect.col = "black" 矩形框的顏色 
#rect.lwd = 2 矩形框的線寬
#hclust.method = c("complete", "ward", "single", "average", 
#"mcquitty", "median", "centroid")
corrplot(cor_data,order="hclust",hclust.method="average",addrect=4)
corrplot(cor_data,order="AOE")

image
##顏色
col1 <- colorRampPalette(c("blue","white","red"))
corrplot(cor_data,order="hclust",addrect=4,
         col=col1(100),
         bg="khaki1",addgrid.col="green",
         tl.col="purple",tl.cex=0.7)

image
##添加數(shù)字
corrplot(cor_data,method="color",order="hclust",addrect=4,
         col=col1(100),
         tl.col="black",addCoef.col="grey",addCoefasPercent=T)

image

ggcorrplot

ggcorrplot包內(nèi)只有2個(gè)函數(shù),一個(gè)cor_pmat()用于計(jì)算p值重慢,一個(gè)ggcorrplot()用于繪圖饥臂。ggcorrplot相當(dāng)于精簡(jiǎn)版的corrplot包,只有主題更加豐富多樣似踱。

(1)用法

ggcorrplot(corr, method = c("square", "circle"), type = c("full", "lower", "upper"), 
  ggtheme = ggplot2::theme_minimal, title = "",
  show.legend = TRUE, legend.title = "Corr", 
  show.diag = FALSE, 
  colors = c("blue", "white", "red"), outline.color = "gray",
  hc.order = FALSE, hc.method = "complete", 
  lab = FALSE, lab_col = "black", lab_size = 4, p.mat = NULL, sig.level = 0.05,
  insig = c("pch", "blank"), pch = 4, pch.col = "black", pch.cex = 5,
  tl.cex = 12, tl.col = "black", tl.srt = 45, digits = 2 )

(2)R Script

library(ggcorrplot)
##計(jì)算p值
cor_p <- cor_pmat(cor_data)
round(cor_p[1:5,1:5],3)
##默認(rèn)繪圖square
ggcorrplot(cor_data)
##可視化方法
ggcorrplot(cor_data,method="circle")
##使用聚類順序
ggcorrplot(cor_data,hc.order=TRUE,outline.color="white")

image
##展示的方式
ggcorrplot(cor_data,hc.order=TRUE,outline.color="white",
           type="lower")
##更改顏色
ggcorrplot(cor_data,hc.order=TRUE,outline.color="white",
           type="lower",colors = c("#6D9EC1", "white", "#E46726"))
##更改主題
ggcorrplot(cor_data,hc.order=TRUE,outline.color="white",
           type="lower",colors = c("#6D9EC1", "white", "#E46726"),
           ggtheme = ggplot2::theme_void())

image
#添加相關(guān)系數(shù)
ggcorrplot(cor_data,hc.order=TRUE,outline.color="white",
           type="lower",colors = c("#6D9EC1", "white", "#E46726"),
           lab = TRUE)
#不顯著的畫(huà)x
ggcorrplot(cor_data,hc.order=TRUE,outline.color="white",
           type="lower",colors = c("#6D9EC1", "white", "#E46726"),
           p.mat = cor_p)

image

ggcorr

(1)R Script

##計(jì)算相關(guān)系數(shù)
ggcorr(testdata1,method=c("pairwise","spearman"))
##指定顏色標(biāo)度中包含的斷點(diǎn)數(shù)
ggcorr(testdata1,method=c("pairwise","spearman"),
       nbreaks = 5)
##設(shè)置圖例
ggcorr(testdata1,method=c("pairwise","spearman"),
       name="12345", legend.position="bottom", legend.size=12) +
  guides(fill=guide_colorbar(barwidth=18, title.vjust=0.75)) +
  theme(legend.title=element_text(size=14))

image
##設(shè)置顏色
ggcorr(testdata1,method=c("pairwise","spearman"),
       low="steelblue", mid="white", high="darkred")
##畫(huà)圓形
ggcorr(testdata1,method=c("pairwise","spearman"),
       geom = "circle",min_size=2,max_size=6)
##添加相關(guān)系數(shù)
ggcorr(testdata1,method=c("pairwise","spearman"),
       label=TRUE,label_size=3,label_color="white")

image
##控制變量標(biāo)簽
ggcorr(testdata1,method=c("pairwise","spearman"),
       hjust=0.75, size=5, color="grey50",layout.exp=1)
##顯示較高的相關(guān)系數(shù)
ggcorr(testdata1,method=c("pairwise","spearman"),
       label=TRUE, hjust=0.75,geom="blank") +
  geom_point(size=10, aes(color=coefficient>0, 
                          alpha=abs(coefficient)>0.5)) +
  scale_alpha_manual(values=c("TRUE"=0.25,"FALSE"=0)) +
  guides(color=FALSE,alpha=FALSE)

image

樣品間相似性(similarity)和距離(distance)

(1)表示距離的方法

  • 歐式距離(Euclidean Distance)
    √(a2+b2+c^2)
    dist(t(x),p=2)
  • 曼哈頓距離(Manhattan Distance)
    |a1-a2|+|b1-b2|+|c1-c2|
    dist(t(x),"manhattan")
  • 切比雪夫距離(Chebyshev Distance)
    max(|a1-a2|,|b1-b2|,|c1-c2|)
    dist(t(x),"maximum")
  • 閔可夫斯基距離(Minkowski Distance)
    dist(t(x),"minkowski")
  • 標(biāo)準(zhǔn)化歐氏距離(Standardized Euclidean distance)
    先將數(shù)據(jù)各維分量標(biāo)準(zhǔn)化到均值方差相等隅熙,即(x-μ)/δ,標(biāo)準(zhǔn)化后的值=(標(biāo)準(zhǔn)化前的值-分量的均值)/分量的標(biāo)準(zhǔn)差核芽。
    x1 = scale(t(x), center=T,scale=T)
    dist(x1)
  • 馬氏距離(Mahalanobis Distance)
  • 蘭式距離
    dist(t(x), method = "canberra")
  • 夾角余弦(Cosine)
  • 漢明距離(Hamming distance)
    兩個(gè)等長(zhǎng)字符串s1與s2之間的漢明距離定義為將其中一個(gè)變?yōu)榱硗庖粋€(gè)所需要作的最小替換次數(shù)囚戚。
    x <- c(1, 0, 0)
    y <- c(1, 0, 1)
    hamming.distance(x, y) #1
  • 杰卡德相似系數(shù)(Jaccard similarity coefficient)
    dist(t(x), method = "Jaccard")
  • 相關(guān)系數(shù)(Correlation coefficient)與相關(guān)距離(Correlation distance)
    1-cor(x)
  • 信息熵(Information Entropy)
    信息熵是衡量分布的混亂程度或分散程度的一種度量。分布越分散(分布越平均)轧简,信息熵就越大驰坊。分布越有序(分布越集中),信息熵就越小哮独。
  • kl散度

(2)dist用法

This function computes and returns the distance matrix computed by using the specified distance measure to compute the distances between the rows of a data matrix.
這個(gè)函數(shù)用特定的方法計(jì)算矩陣的行之間的距離拳芙,并返回距離矩陣。

dist(x, method = "euclidean", diag = FALSE, upper = FALSE, p = 2) 

  • method:可以是"euclidean", "maximum", "manhattan", "canberra", "binary", "minkowski"
  • diag:是否顯示對(duì)角線的值
  • upper:是否顯示上三角的值
  • p:The power of the Minkowski distance

(3)scale用法

scale(x, center = TRUE, scale = TRUE) 

scale是對(duì)矩陣的每一列進(jìn)行標(biāo)準(zhǔn)化皮璧,如果要對(duì)行標(biāo)準(zhǔn)化需要先轉(zhuǎn)置舟扎。如heatmapdata <- t(scale(t(heatmapdata)))

(4)R Script

sampleDist <- dist(t(testdata1)) 
sampleDistMatrix <- as.matrix(sampleDist) 
colnames(sampleDistMatrix) <- NULL 
colors <- colorRampPalette(rev(brewer.pal(9,"Blues")))(255) 
pheatmap(sampleDistMatrix, 
         clustering_distance_rows=sampleDist, 
         clustering_distance_cols=sampleDist, 
         color = colors) 

image

R相關(guān)性分析和相關(guān)性熱圖 - 簡(jiǎn)書(shū) (jianshu.com)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市恶导,隨后出現(xiàn)的幾起案子浆竭,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件邦泄,死亡現(xiàn)場(chǎng)離奇詭異删窒,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)顺囊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門肌索,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人特碳,你說(shuō)我怎么就攤上這事消恍。” “怎么了乡翅?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵滋迈,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我益愈,道長(zhǎng)梢灭,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任蒸其,我火速辦了婚禮敏释,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘摸袁。我一直安慰自己钥顽,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布靠汁。 她就那樣靜靜地躺著蜂大,像睡著了一般。 火紅的嫁衣襯著肌膚如雪膀曾。 梳的紋絲不亂的頭發(fā)上县爬,一...
    開(kāi)封第一講書(shū)人閱讀 48,970評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音添谊,去河邊找鬼财喳。 笑死,一個(gè)胖子當(dāng)著我的面吹牛斩狱,可吹牛的內(nèi)容都是我干的耳高。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼所踊,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼泌枪!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起秕岛,我...
    開(kāi)封第一講書(shū)人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤碌燕,失蹤者是張志新(化名)和其女友劉穎误证,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體修壕,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡愈捅,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了慈鸠。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蓝谨。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖青团,靈堂內(nèi)的尸體忽然破棺而出譬巫,到底是詐尸還是另有隱情,我是刑警寧澤督笆,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布芦昔,位于F島的核電站,受9級(jí)特大地震影響娃肿,放射性物質(zhì)發(fā)生泄漏烟零。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一咸作、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧宵睦,春花似錦记罚、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至烟馅,卻和暖如春说庭,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背郑趁。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工刊驴, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人寡润。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓捆憎,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親梭纹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子躲惰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容