干货分享 | R-数据处理基础篇-单组相关性分析及其结果的可视化
The following article is from TheWhoOPs Author 申泽西
目录
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$evaptemper = 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()
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()
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()
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()
8. 本篇总结
本篇主要解决了以下几个问题:
如何在R语言中计算相关系数及p值?
如何在R语言中绘制散点图?
如何在R语言中给散点图加1:1辅助线?
如何在R语言中给散点图加拟合线?
如何在R语言中在散点图里加文字注解?
如何在R语言中实现多幅图绘制在一副图中?
挖个坑,这块大家是不是看到图里还缺点啥?对,是的,缺图例!有啥影响呢?比如,1:1线,如果不在图名中说明,其他人很难理解那段虚线存在的意义是个啥?
那么,如何加图例呢?请大家关注【TheWhoOPs】公众号与哔哩哔哩Up主【WhoOPs-R语言教学】的直播间我们这周日就这个Bug进行线上讲解~
9. 本篇所使用到的R包
library('ggplot2')library('data.table')
10. 小节练习
本篇数据中还有很多个指标,比如降水,气温,GPP等,大家如果有兴趣可以用其他几组指标做下以上练习哈~
-END-
转载自 TheWhoOps
经作者授权转载
文章仅代表作者观点,与本公众号无关,版权归原作者所有
原文标题:R-数据处理基础篇-单组相关性分析及其结果的可视化
排版:梁雨廷
责任编辑:李倩
审编:鲁嘉颐
终审: 颜子明 黄宗财 梁龙武
猜你喜欢
1.招贤纳士 | 临沂大学资源环境学院2020年高层次人才招聘
4.期刊专刊 | 2020年人大复印报刊资料地理学类最受欢迎文章集萃(下)
扫描二维码,关注我们
都是成年人了,要记得告诉地小联你也“在看”哦~👇