查看原文
其他

R-数据处理基础篇-单组相关性分析及其结果的可视化

申泽西 TheWhoOPs 2021-09-21

目录

  • 0. 问题导入

  • 1. 示例数据

  • 2. 导入示例数据

  • 3. 相关性分析

  • 4. 单例相关性分析结果可视化-散点图

  • 5. 散点图+1:1线

  • 6. 散点图+1:1线+拟合线

  • 7. 散点图+1:1线+拟合线+文字注解

  • 8. 本篇总结

  • 9. 本篇所使用到的R包

  • 10. 小节练习

  • 11. 致谢

0. 问题导入

日常数据分析过程中,为了验证两种指标的相关性,我们往往会进行相关性分析。那么如何在R中进行相关性分析呢?此外,又如何将相关性结果的完整信息进行定量可视化呢?本篇给出解决方案~

1. 示例数据

本数据为基于GLDAS再分析数据集与NDVI遥感影像在随机点的时间序列,时间长度为2002-4 ~ 2015-12,时间分辨率为月。

关注公众号【TheWhoOPs】,后台回复【相关性分析数据】获取本篇示例数据。点我下载示例数据

2. 导入示例数据

本篇采用data.table 包中的fread函数将csv文件导入,通过设置data.table = F 的属性,使得导入的data属性为data.frame。

dir.create('/Users/jerseyshen/Documents/JianShu_Project/20200226')
setwd('/Users/jerseyshen/Documents/JianShu_Project/20200226')
library(data.table)
data = fread('data.csv',data.table = F)
data = data[,-1]
head(data)
ndvi soil1 soil2 soil3 soil4 rain
1 0.237984169 -0.01210715 0.03579731 0.1269299 0.07318894 -0.01543584
2 0.370455335 0.38147139 0.31089661 0.2241396 0.10204067 0.20701857
3 0.331657733 0.41044975 0.48385978 0.4471074 0.25112199 0.62105802
4 0.216662956 0.32583872 0.41198999 0.4231082 0.42613716 0.37216417
5 0.054132382 0.24177292 0.20540345 0.2979310 0.43549429 0.06553887
6 -0.005636952 0.41268755 0.29207486 0.2508858 0.37087816 0.25502620
longwave shortwave root_sm evap temper gpp
1 0.059414987 0.215758745 0.06890271 -0.07747205 0.009909431 -0.04072053
2 0.009142641 0.244385277 0.31129426 0.23793998 0.172678808 0.18329118
3 -0.097150000 0.353491078 0.48706357 0.59985033 0.314583437 0.24478460
4 -0.031527285 0.355970841 0.42948289 0.51469995 0.348457057 0.47172457
5 -0.291598633 0.297255464 0.27643746 0.38420614 0.326270291 0.37802032
6 0.010729154 -0.009709685 0.32028271 0.31684306 0.119881673 0.15986512

3. 相关性分析

R语言中相关性分析的函数为cor.test, 本篇通过分析示例数据中的蒸散发(evap)与温度(temper)的相关性来示例cor.test 函数的用法。

evap = data$evap
temper = data$temper
cor = cor.test(evap,temper)$estimate
p_value = cor.test(evap,temper)$p.value

其中,cor为evap与temper的相关系数,p_value为显著性水平为0.05时的p值。

4. 单例相关性分析结果可视化-散点图

在这一步,我们完成单例相关性分析结果可视化-散点图的绘制(图2)。然而,没有了拟合线及1:1线的助力,似乎整幅图缺少了点什么。

df = data.frame(temper,evap)
p1 = ggplot(data = df,aes(x = temper,y =evap))+
geom_point(size = 3.5,color = 'blue',shape = 1)+
theme_bw()+
xlab('Temperature')+
ylab('Evaporation')

png('plot1.png',
height = 15,
width = 15,
units = 'cm',
res = 800)
print(p1)
dev.off()

图1 单例相关性分析结果可视化-散点图

5. 散点图+1:1线

这一步,我们完成了1:1线的添加

p2 = ggplot(data = df,aes(x = temper,y =evap))+
geom_point(size = 3.5,color = 'blue',shape = 1)+
geom_abline(slope = 1, intercept = 0,linetype = 'dashed',size = 0.5)+
theme_bw()+
xlab('Temperature')+
ylab('Evaporation')

png('plot2.png',
height = 15,
width = 15,
units = 'cm',
res = 800)
print(p2)
dev.off()

图2 单例相关性分析结果可视化-散点图+1:1线

6. 散点图+1:1线+拟合线

R语言中添加拟合线的方法有4种,分别是:

  • 1. lm

  • 2. glm

  • 3. gam

  • 4. loess

下边我们就四种方法分别进行拟合,以对比其区别。

p3 = ggplot(data = df,aes(x = temper,y =evap))+
geom_point(size = 3.5,color = 'blue',shape = 1)+
geom_abline(slope = 1,intercept = 0,linetype = 'dashed',size = 0.5)+
theme_bw()+
xlab('Temperature')+
ylab('Evaporation')

p31 = p3+geom_smooth(method = 'lm',color = '#ED0000FF',fill = '#ED0000FF',alpha = 0.25)+
ggtitle("(a) Method = lm")
p32 = p3+geom_smooth(method = 'glm',color = '#ED0000FF',fill = '#ED0000FF',alpha = 0.25)+
ggtitle("(b) Method = glm")
p33 = p3+geom_smooth(method = 'gam',color = '#ED0000FF',fill = '#ED0000FF',alpha = 0.25)+
ggtitle("(c) Method = gam")
p34 = p3+geom_smooth(method = 'loess',color = '#ED0000FF',fill = '#ED0000FF',alpha = 0.25)+
ggtitle("(d) Method = loess")

library(gridExtra)
library(grid)

png('plot3.png',
height = 20,
width = 20,
units = 'cm',
res = 800)
grid.arrange(p31,p32,p33,p34,
ncol= 2,nrow = 2)
dev.off()

图3 散点图+1:1线+拟合线

7. 散点图+1:1线+拟合线+文字注解

labels = data.frame(
x = rep(-0.5,8),
y = rep(c(0.5,0.4),4),
labels = rep(c(paste0('Cor = ',round(cor,2)),
paste0('p.value = ',formatC(p_value))),4)
)
add_label = geom_text(data = labels,aes(x = x,y = y,label = labels),size =4,hjust = 0)
p41 = p31+add_label
p42 = p32+add_label
p43 = p33+add_label
p44 = p34+add_label

png('plot4.png',
height = 20,
width = 20,
units = 'cm',
res = 800)
grid.arrange(p41,p42,p43,p44,
ncol= 2,nrow = 2)
dev.off()

图4 散点图+1:1线+拟合线+文字注解

8. 本篇总结

本篇主要解决了以下几个问题:

  1. 如何在R语言中计算相关系数及p值?

  2. 如何在R语言中绘制散点图?

  3. 如何在R语言中给散点图加1:1辅助线?

  4. 如何在R语言中给散点图加拟合线?

  5. 如何在R语言中在散点图里加文字注解?

  6. 如何在R语言中实现多幅图绘制在一副图中?

挖个坑,这块大家是不是看到图里还缺点啥?对,是的,缺图例!有啥影响呢?比如,1:1线,如果不在图名中说明,其他人很难理解那段虚线存在的意义是个啥?

那么,如何加图例呢?请大家关注【TheWhoOPs】公众号与哔哩哔哩Up主【WhoOPs-R语言教学】的直播间我们这周日就这个Bug进行线上讲解~

9. 本篇所使用到的R包

library('ggplot2')
library('data.table')

10. 小节练习

本篇数据中还有很多个指标,比如降水,气温,GPP等,大家如果有兴趣可以用其他几组指标做下以上练习哈~

11. 致谢

首先,感谢大家的持续关注,小编会继续努力,持续更新下去的!

大家如果觉得有帮助啊,还麻烦大家关注点赞,也可以扩散到朋友圈,多多引导朋友加入咱们这个技术平台, 代码共享推动科研进程, 多谢大家啦~

大家如果在使用本代码的过程有遇到问题的,可以留言评论,也可以私信我哈~~祝大家身体健康,多多保重!!

扫描二维码

联系作者


: . Video Mini Program Like ,轻点两下取消赞 Wow ,轻点两下取消在看

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存