专栏首页机器学习AI算法工程R语言-中国各城市PM2.5数据间的相关分析

R语言-中国各城市PM2.5数据间的相关分析

中国各城市PM2.5数据间的相关分析

相关分析(correlation analysis)是研究现象之间是否存在某种依存关系,并对具体有依存关系的现象探讨其相关方向以及相关程度,是研究随机变量之间的相关关系的一种统计方法。分类:

  • 线性相关分析:研究两个变量间线性关系的程度,用相关系数r来描述。常用的三种计算方式有Pearson相关系数、Spearman和Kendall相关系数。
  • 偏相关分析:当两个变量同时与第三个变量相关时,将第三个变量的影响剔除,只分析另外两个变量之间相关程度的过程。如控制年龄和工作经验的影响,估计工资收入与受教育水平之间的相关关系。

在变量较多的复杂情况下,变量之间的偏相关系数比简单相关系数更加适合于刻画变量之间的相关性。

PM2.5细颗粒物指环境空气中空气动力学当量直径小于等于2.5微米的颗粒物。它能较长时间悬浮于空气中,其在空气中含量浓度越高,就代表空气污染越严重。与较粗的大气颗粒物相比,PM2.5粒径小,面积大,活性强,易附带有毒、有害物质(例如,重金属、微生物等),且在大气中的停留时间长、输送距离远,因而对人体健康和大气环境质量的影响更大。

近日,京津冀遭遇“雾霾锁成”,廊坊、保定、石家庄、邢台、邯郸成为污染最严重地区。

很多网站提供了PM2.5(细颗粒物)及空气质量指数(AQI)的实时查询,比如:PM25.in北京市环境检测中心等等。这些网站只是对数据进行了展示,有的还做了很漂亮的可视化,但却没有做进一步的数据分析。

舍恩伯格在《大数据时代》一书中这样写道:“我们没有必要非得知道现象背后的原因,而是要让数据自己发声。”以及“相关关系能够帮助我们更好地了解这个世界。”他认为,建立在相关关系分析法上面的预测是大数据的核心。通过找到“关联物”并监控它,我们就能够预测未来。

近年来,在生物学、社交网络和健康科学等领域常采用偏相关分析法应对高维变量的系统关联性问题;这种方法对分析我国几百个城市间的PM2.5数据之间的关联关系是否有效?下面,借助我从网上找到的PM2.5数据,通过R语言软件包对数据分别进行线性相关分析和偏相关分析。R是用于统计分析、绘图的语言和操作环境。R语言的spaceExt包的glasso.miss函数采用LASSO加罚的极大似然函数法,基于BIC准则确定惩罚参数,可以测算出几百个城市的PM2.5数据之间的偏相关系数稀疏矩阵,这个矩阵可以用来描述不同城市间PM2.5的复杂关系。

  1. 载入程序包&读入PM2.5数据
library(spaceExt)

library(igraph)

pm=read.csv(file.choose(),header = T)
  1. 数据查看
#查看部分数据摘要

ct=c(which(colnames(pm)=="北京市"),which(colnames(pm)=="天津市"),which(colnames(pm)=="石家庄市"))

knitr::kable(summary(pm[,ct]))

北京市

天津市

石家庄市

Min. : 30.00

Min. : 37.0

Min. : 34.0

1st Qu.: 64.75

1st Qu.: 71.0

1st Qu.: 89.0

Median : 94.00

Median :105.0

Median :134.0

Mean :122.98

Mean :124.4

Mean :160.2

3rd Qu.:155.75

3rd Qu.:162.0

3rd Qu.:216.0

Max. :394.00

Max. :372.0

Max. :487.0

NA’s :1

NA

NA

boxplot(pm[,ct],col=3:5)
#移除PM2.5数据缺失较多的城市

sel=which(rowSums(is.na(pm))>120)

pm_s = pm[,sel]#数据标准化

pm_sc<-scale(pm_s[,-1]) 
  1. 线性相关分析
cor_pm = cor(pm_sc)

g1=graph.adjacency(cor_pm>0.8, mode="lower", weighted=NULL, diag=FALSE, add.colnames=NULL, add.rownames=NA)

cl=c("#FFFF37","#00FF7F","#FF8000","#FF0080","#FF77FF","#4DFFFF","deepskyblue","chocolate","#FFAD86","#C07AB8")

com = walktrap.community(g1, steps = 3) 
#子群划分

V(g1)$sg = com$membership + 1

V(g1)$color = cl[V(g1)$sg] 
  1. 偏相关分析
res=glasso.miss(pm_sc,rho=0.5,emIter=10 ,penalize.diagonal=FALSE)
## [1] "Em step: 1"

## [1] "Em step: 2"

## [1] "Em step: 3"

## [1] "Em step: 4"

## [1] "Em step: 5"

## [1] "Em step: 6"

## [1] "Em step: 7"

## [1] "Em step: 8"

## [1] "Em step: 9"

## [1] "Em step: 10"
  1. 图网络模型可视化

上图展现的是相关系数大于0.8的各城市间的关联关系,其中不同颜色是使用随机游走方法进行的子群划分。

这幅图用LASSO加罚的极大似然函数法,采用BIC准则方法确定惩罚参数(L1范数=0.5),估计PM2.5数据的高维偏相关稀疏矩阵,然后对矩阵进行的可视化。遗憾的是,没有出来期望中的效果;或许是数据不合理,或许是L1范数值不合适,也有可能是这种复杂的偏相关分析法在分析我国几百个城市间的PM2.5数据之间的关联关系是无效的。总之,线性相关分析可以得出不同城市间的简单相关关系,而我期望的通过偏相关分析得出不同城市间的复杂相关关系如果成功了,可以更深刻的揭示在PM2.5治理过程中,哪些城市更应得到特殊的重视。


本文分享自微信公众号 - 大数据挖掘DT数据分析(datadw)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-09-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 使用python 的结巴(jieba)库进行中文分词

    “结巴”中文分词:做最好的 Python 中文分词组件 "Jieba" (Chinese for "to stutter") Chinese text segm...

    机器学习AI算法工程
  • 你还在用“人工特征工程+线性模型”?

    作者:李沐M 11年的时候我加入百度,在凤巢使用机器学习来做广告点击预测。当时非常惊讶于过去两年内训练数据如此疯狂的增长。大家都在热情的谈特征,每次新特征的...

    机器学习AI算法工程
  • 常见面试算法:朴素贝叶斯

    贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类。本章首先介绍贝叶斯分类算法的基础——贝叶斯定理。最后,我们通过实例来讨论贝叶斯...

    机器学习AI算法工程
  • Kafka 已落伍,转角遇见 Pulsar!

    自 LinkedIn 2011 年创建了 Apache Kafka 后,这款消息系统一度成为大规模消息系统的唯一选择。为什么呢?因为这些消息系统每天需要传递数百...

    大数据技术与架构
  • C++雾中风景14:CRTP, 模板的黑魔法

    C++11 引入了一个典型的CRTP的类:std::enable_shared_from_this 当我们有类需要被智能指针share_ptr管理,且需要通过...

    HappenLee
  • Spring Data JPA @Query注解的用法

    1、默认配置下, 使用了@Query注解后就不会再使用方法名解析的方式了,上面这种事依然是面向对象查询,sql语句中写实体类名和属性名, :后加变量,表示这是一...

    似水的流年
  • SAP ABAP的CI/CD解决方案

    如今国外很多partners已经在尝试Jenkins + abapGit + 公有云搭建ABAP CI/CD环境了。ABAP系统的改动通过abapGit提交,触...

    Jerry Wang
  • 左手用R右手Python系列——七周数据分析师学习笔记R语言、Python版

    上一篇我重点写了秦路老师在七周数据分析师系列课程中MySQL模块的实战作业SQL语法,对比了自己的冗余思路与老师的最佳思路。 MySQL入门学习笔记——七周数据...

    数据小磨坊
  • Monolith !一个异常强大的体素编辑三维引擎(种草篇)

    什么是体素?在了解体素之前,我们来回顾一下像素,一张图片是由一个个像素点排列组合而成,通常的一张彩色照片,一个像素点包含是一个R G B 三种颜色通道的数值,那...

    UDM Lab
  • Golang语言--计算运行的时间

    函数time.Since() 计算golang运行的时间是非常有用的性能衡量指标,特别是在并发基准测试中。下面将介绍如何简单地使用Go语言来计算程序运行的时间。...

    李海彬

扫码关注云+社区

领取腾讯云代金券