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

  • A+

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

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

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

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

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

近日,京津冀遭遇“雾霾锁成”,廊坊、保定、石家庄、邢台、邯郸成为污染最严重地区。 中国各城市PM2.5数据间的相关分析

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

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

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

载入程序包&读入PM2.5数据

  1. library(spaceExt)
  2. library(igraph)
  3. pm=read.csv(file.choose(),header = T)

数据查看

  1. #查看部分数据摘要
  2. ct=c(which(colnames(pm)=="北京市"),which(colnames(pm)=="天津市"),which(colnames(pm)=="石家庄市"))
  3. 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
  1. boxplot(pm[,ct],col=3:5)

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

  1. #移除PM2.5数据缺失较多的城市
  2. sel=which(rowSums(is.na(pm))>120)
  3. pm_s = pm[,sel]
  4. #数据标准化
  5. pm_sc<-scale(pm_s[,-1])

线性相关分析

  1. cor_pm = cor(pm_sc)
  2. g1=graph.adjacency(cor_pm>0.8, mode="lower", weighted=NULL, diag=FALSE,
  3.                    add.colnames=NULL, add.rownames=NA)
  4. cl=c("#FFFF37","#00FF7F","#FF8000","#FF0080","#FF77FF","#4DFFFF","deepskyblue","chocolate","#FFAD86","#C07AB8")
  5. com = walktrap.community(g1, steps = 3) #子群划分
  6. V(g1)$sg = com$membership + 1
  7. V(g1)$color = cl[V(g1)$sg]

偏相关分析

  1. res=glasso.miss(pm_sc,rho=0.5,emIter=10 ,penalize.diagonal=FALSE)
  1. ## [1] "Em step: 1"
  2. ## [1] "Em step: 2"
  3. ## [1] "Em step: 3"
  4. ## [1] "Em step: 4"
  5. ## [1] "Em step: 5"
  6. ## [1] "Em step: 6"
  7. ## [1] "Em step: 7"
  8. ## [1] "Em step: 8"
  9. ## [1] "Em step: 9"
  10. ## [1] "Em step: 10"
  1. # res$bic  ##bic returned
  2. p=-res$wi
  3. d=1/sqrt(diag(res$wi))
  4. coc=-diag(d)%*%p%*%diag(d)
  5. colnames(coc)=colnames(pm_sc)
  6. g=graph.adjacency(coc>0, mode="lower", weighted=NULL, diag=FALSE,
  7.                    add.colnames=NULL, add.rownames=NA)
  8. cl=c("#FFFF37","#00FF7F","#FF8000","#FF0080","#FF77FF","#4DFFFF","deepskyblue","chocolate","#FFAD86","#C07AB8")
  9. com = walktrap.community(g, steps = 3) #子群划分
  10. V(g)$sg = com$membership + 1
  11. V(g)$color = cl[V(g)$sg]

图网络模型可视化

  1. par(mar = c(0, 0, 0, 0))
  2. ot(g1,  layout = layout.fruchterman.reingold,
  3.    vertex.size=6,
  4.    vertex.label.font=1,
  5.    vertex.label.cex=0.4,
  6.    # vertex.color=V(g1)$color,
  7.    vertex.frame.color="white",
  8.    vertex.label.color="black",
  9.    edge.width=1,
  10.    edge.label.font=1,
  11.    edge.label.cex=0.9,
  12.    #  edge.curved=TRUE,
  13.    edge.color="black",
  14.    edge.arrow.size=0,
  15.    # edge.label=re[,3],
  16.    #  edge.label.color="#FFAD86",
  17.    xlab="城市间PM2.5关联性-相关系数r>0.8")

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

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

  1. par(mar = c(0, 0, 0, 0))
  2. plot(g,  layout = layout.fruchterman.reingold,
  3.      vertex.size=6,
  4.      vertex.label.font=1,
  5.      vertex.label.cex=0.4,
  6.      # vertex.color=V(g1)$color,
  7.      vertex.frame.color="white",
  8.      vertex.label.color="black",
  9.      edge.width=1,
  10.      edge.label.font=1,
  11.      edge.label.cex=0.9,
  12.      #  edge.curved=TRUE,
  13.      edge.color="black",
  14.      edge.arrow.size=0,
  15.      # edge.label=re[,3],
  16.      #  edge.label.color="#FFAD86",
  17.      xlab="城市间PM2.5关联性-L1范数=0.5")

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

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

PM2.5不仅是环境问题还是经济问题、社会问题和政治问题,希望今后在中国特色社会主义政治经济学的指引下,我们能够早日呼吸到新鲜空气!

 

作者:ShangFR

来源:http://www.cnblogs.com/shangfr/p/5067790.html

2016年度中国软件开发者白皮书下载(PDF)
误差分位数的默示有效估计与\ 自回归时间序列的预测区间
机器学习电子书
中国大数据生态图谱&大数据交易市场专题研究报告

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: