相關(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)
##可視化方法
#"circle", "square", "ellipse", "number", "shade", "color", "pie"
corrplot(cor_data, method="pie",title="method=pie")
##展示的方式
#"full", "lower", "upper"
corrplot(cor_data, type="upper",title="type=upper")
##混合圖形樣式
#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)
##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")
##顏色
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)
##添加數(shù)字
corrplot(cor_data,method="color",order="hclust",addrect=4,
col=col1(100),
tl.col="black",addCoef.col="grey",addCoefasPercent=T)
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")
##展示的方式
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())
#添加相關(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)
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))
##設(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")
##控制變量標(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)
樣品間相似性(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)
R相關(guān)性分析和相關(guān)性熱圖 - 簡(jiǎn)書(shū) (jianshu.com)