一、先谈谈概念性的东西1、何为相关性在医药研究中常常涉及到一些变量间的关系分析如儿童年龄与体重关系、血药浓度与时间的关系等。而变量之间的关系通常可以分为确定性关系与非确定性的关系两大类[1]。确定性关系是指当一个变量取值后另一变量有一个确定的值与之对应比如圆的半径与周长之间就有“2πr”的确定关系。但是我们实际科研中遇到的变量之间属于不确定关系的往往是大多数如人的身高与体重、年龄与血压等。即一个变量取值后另一个变量只会落一个包含某种规律的取值范围内而并不能对应一个准确的值这种不能用精确函数来表达的变量关系我们通常称之为不确定关系。当然非确定性关系也并非完全不能用函数的方式去模拟例如回归分析。2、何为相关性分析在数据处理的过程中我们一般将描述和分析变量相关关系的性质及其相关程度的过程称为相关分析。最简单的相关性分析方法就是绘制一个散点图直观的观察两个变量之间的相关性。在统计与分析之中我们不仅要了解变量之间是否相关通常还需要相关的程度、方向因此需要数字化一些的方法——统计推断。我们通常用样本相关系数r反映两个变量之间线性关系的强弱|r|的值越接近与1则变量之间的相关性程度就越高越接近于0则变量之间的相关性程度就越低。当|r|0时两变量之间呈完全线性相关此时散点图的所有对应点应该在同一条直线上。当0|r|1时则表示两变量之间存在一定的相关性关系。当r0时则两变量之间完全不存在线性相关关系但不排除有其他曲线关系。比如下面这个就是r1时的极端例子##### 构建一个数据集 ##### suppressMessages(library(ggplot2)) mydata - as.data.frame(cbind(1:10, 2:11)) head(mydata) ## V1 V2 ## 1 1 2 ## 2 2 3 ## 3 3 4 ## 4 4 5 ## 5 5 6 ## 6 6 7 #### 做个线性回归的计算 lm.model - lm(V1 ~ V2,data mydata) summary(lm.model) ## Warning in summary.lm(lm.model): essentially perfect fit: summary may be ## unreliable ## ## Call: ## lm(formula V1 ~ V2, data mydata) ## ## Residuals: ## Min 1Q Median 3Q Max ## -5.661e-16 -1.157e-16 4.273e-17 2.153e-16 4.167e-16 ## ## Coefficients: ## Estimate Std. Error t value Pr(|t|) ## (Intercept) -1.000e00 2.815e-16 -3.553e15 2e-16 *** ## V2 1.000e00 3.961e-17 2.525e16 2e-16 *** ## --- ## Signif. codes: 0 *** 0.001 ** 0.01 * 0.05 . 0.1 1 ## ## Residual standard error: 3.598e-16 on 8 degrees of freedom ## Multiple R-squared: 1, Adjusted R-squared: 1 ## F-statistic: 6.374e32 on 1 and 8 DF, p-value: 2.2e-16 ### 把斜率a和截距b取出来 a - lm.model$fitted.values[1] b - lm.model$fitted.values[2] a ## 1 ## 1 b ## 2 ## 2 ggplot(data mydata,aes(V1,V2))geom_point()geom_line() ggtitle(label paste(y , a, * x , b, sep ))#可以看到线性相关性是比较强的3、相关系数最常见的两种算法1、Pearson相关系数2、Spearman相关系数知道大家对公式及计算方法不感兴趣我也是如此但是你需要知道的是Spearman系数不要求两变量分布符合正态分布这就导致Spearman系数适用范围更广的同时计算精确度也相应的更低。二、R语言实现及可视化——ggcorrplot针对上述的各种相关性分析SPSS与Graphpad中也有较为完善的操作流程供大家使用。这里我们给大家推荐一个R语言中进行相关性可视化的神器——ggcorplot2[2]tips:下面的corr就是我们刚才提到的r值########## ggcorrplot 用法 ############3 #参考https://github.com/kassambara/ggcorrplot if(!require(ggcorrplot))install.packages(ggcorrplot) data(mtcars)#加载数据 class(mtcars) ## [1] data.frame head(mtcars) ## mpg cyl disp hp drat wt qsec vs am gear carb ## Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 ## Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 ## Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 ## Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1 ## Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2 ## Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1 corr - round(cor(mtcars), 1)#计算每列变量间的相关性 head(corr[, 1:6]) ## mpg cyl disp hp drat wt ## mpg 1.0 -0.9 -0.8 -0.8 0.7 -0.9 ## cyl -0.9 1.0 0.9 0.8 -0.7 0.8 ## disp -0.8 0.9 1.0 0.8 -0.7 0.9 ## hp -0.8 0.8 0.8 1.0 -0.4 0.7 ## drat 0.7 -0.7 -0.7 -0.4 1.0 -0.7 ## wt -0.9 0.8 0.9 0.7 -0.7 1.0 p.mat - cor_pmat(mtcars) head(p.mat[, 1:4]) ## mpg cyl disp hp ## mpg 0.000000e00 6.112687e-10 9.380327e-10 1.787835e-07 ## cyl 6.112687e-10 0.000000e00 1.802838e-12 3.477861e-09 ## disp 9.380327e-10 1.802838e-12 0.000000e00 7.142679e-08 ## hp 1.787835e-07 3.477861e-09 7.142679e-08 0.000000e00 ## drat 1.776240e-05 8.244636e-06 5.282022e-06 9.988772e-03 ## wt 1.293959e-10 1.217567e-07 1.222320e-11 4.145827e-05ggcorrplot(corr)#最简单的相关性热图ggcorrplot(corr, method circle)#让热图的方框变成圆圈ggcorrplot(corr, hc.order TRUE, outline.color white)#设置边界颜色ggcorrplot(corr, hc.order TRUE,#设置是否聚类 type lower,#设置三角形对着的方式 outline.color white)ggcorrplot( corr, hc.order TRUE, type lower, outline.color white, ggtheme ggplot2::theme_gray, colors c(#6D9EC1, white, #E46726) )#设置主题和颜色ggcorrplot(corr, hc.order TRUE, type lower, lab TRUE)#是否展示C值ggcorrplot(corr, hc.order TRUE, type lower, p.mat p.mat)#是否展示p值ggcorrplot( corr, p.mat p.mat, hc.order TRUE, type lower, insig blank )#是否将不显著的色块移除最后考虑到站内的粉丝有一部分是冲着在线工具来的在线版的ggcorrplot工具我也已发布并测试成功下一条推送我将发布工具使用教程。以下附上测试视频时长01:24测试视频参考[1]: 高祖新 言方荣 医药统计分析与SPSS软件应用[M].北京人民卫生出版社2018169-187.[2]: https://github.com/kassambara/ggcorrplot