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的複雜關係。
- 載入程式包&讀入PM2.5資料
library(spaceExt)
library(igraph)
pm=read.csv(file.choose(),header = T)
- 資料檢視
#檢視部分資料摘要
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])
- 線性相關分析
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]
- 偏相關分析
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"
- 圖網路模型視覺化
上圖展現的是相關係數大於0.8的各城市間的關聯關係,其中不同顏色是使用隨機遊走方法進行的子群劃分。
這幅圖用LASSO加罰的極大似然函式法,採用BIC準則方法確定懲罰引數(L1範數=0.5),估計PM2.5資料的高維偏相關稀疏矩陣,然後對矩陣進行的視覺化。遺憾的是,沒有出來期望中的效果;或許是資料不合理,或許是L1範數值不合適,也有可能是這種複雜的偏相關分析法在分析我國幾百個城市間的PM2.5資料之間的關聯關係是無效的。總之,線性相關分析可以得出不同城市間的簡單相關關係,而我期望的通過偏相關分析得出不同城市間的複雜相關關係如果成功了,可以更深刻的揭示在PM2.5治理過程中,哪些城市更應得到特殊的重視。