본문 바로가기
자료처리

openair CWT 가중치 함수 수정

by Prof. Sung-Deuk Choi 2023. 1. 8.

R 패키지인 openair를 사용하면 대기오염 관련 그림을 아주 빨리 그릴 수 있습니다. 

장거리 이동을 평가할 수 있는 대표적인 하이브리드 수용모델인  PSCF와 CWT가 openair에 포함되어 있습니다.

 

그런데 PSCF는 별 문제가 없는데, CWT 그림은 격자 크기와 자료 기간(역궤적 개수)에 따라 빨간색으로 나타나는 주요 오염지역의 위치가 아주 달라졌습니다. 

아래 그림과 같이, 같은 자료에 대해서 격자 크기만 달라도 빨간색 격자 위치가 아주 달라집니다. 격자 크기가 크면 중국 내륙이 오염지역으로 보이고, 격자 크기가 줄어들면 중국 동부, 서해, 국내 영향이 더 중요한 오염지역으로 나타납니다.

가중치 함수 수정 전 2018년 울산 성남동  PM2.5 농도 CWT (격자 크기, 2도, 1도, 0.5도)

아래 그림은 8년 동안의 서울에서의 CWT 결과입니다. 미세먼지 주요 오염지역이 중국 중부로 기존에 알려진 오염지역과 매우 다르기 때문에 신뢰하기 어렵습니다.

가중치 함수 수정 전 2013~2020년 서울 PM2.5 농도 CWT (격자 크기 1도)와 중국의 미세먼지 농도 분포도(Estimating Ground‐Level PM2.5 by Fusing Satellite and Station Observations: A Geo‐Intelligent Deep Learning Approach - Li - 2017 - Geophysical Research Letters - Wiley Online Library)

이러한 원인이 무엇인지 학생과 졸업생 몇 명에게 확인해 보라고 했는데, 아무도 해결하지 못했습니다. 

저는 가중치 함수의 영향이 아닐까 생각했지만, openair 매뉴얼(The openair book - 10  Trajectory analysis (bookdown.org))에는 CWT 가중치에 관한 내용이 전혀 없습니다. 다만, PSCF 가중치에 관한 내용이 단 한 문장 제시되어 있습니다. 그러나 격자별 역궤적 개수에 관한 구체적인 가중치를 알 수가 없었습니다.

Note also that cells with few data have a weighting factor applied to reduce their effect.

 

결국, trajLevel 함수의 코드을 열어 보고 문제점을 찾아냈습니다. 

trace(trajLevel, edit=TRUE) #함수 편집

아래는 PSCF의 가중치입니다. 격자별 평균 역궤적 개수에 따른 상대적인 가중치가 주어집니다. 

아래 가중치 함수는 제 연구실 논문에서 사용한 값입니다. 구체적인 수치만 조금 다르고 가중치 부여 방식은 동일합니다.

Identification of source areas of polycyclic aromatic hydrocarbons in Ulsan, South Korea, using hybrid receptor models and the conditional bivariate probability function - Environmental Science: Processes & Impacts (RSC Publishing)

논문에 제시한 가중치 함수 사례

 

아래는 CWT의 가중치 함수입니다. 격자별로 상대적인 역궤적 개수를 구해서 가중치를 부여하는 것이 아니라 격자별로 역궤적 절대 개수에 따라 가중치를 부여했습니다. 예를 들어, 격자마다 역궤적 개수가 80개를 초과하면 가중치는 1.0이고, 20개를 초과하고 80개 이하면(21~80) 가중치는 0.7입니다.   

    id <- which(mydata$N > 20 & mydata$N <= 80)
    mydata[id, pollutant] <- mydata[id, pollutant] * 0.7
    id <- which(mydata$N > 10 & mydata$N <= 20)
    mydata[id, pollutant] <- mydata[id, pollutant] * 0.42
    id <- which(mydata$N <= 10)
    mydata[id, pollutant] <- mydata[id, pollutant] * 0.05

 

위와 같이 절대 수치로 가중치를 부여하게 되면 두 가지 문제가 있습니다. 

  1. 격자 크기가 달라지면 해당 격자를 통과하는 역궤적 개수가 달라집니다. 격자가 크면 역궤적 개수가 증가해서 높은 가중치를 부여 받습니다(2021년에 찾은 문제입니다). 
  2. 격자 크기를 고정하더라도 측정 기간이 증가하면 역궤적 개수도 증가합니다. 예를 들어, 1년 자료보다 5년 자료가 개별 격자를 통과하는 역궤적 개수가 늘어나므로 높은 가중치 영향을 받게 됩니다(최근에 찾은 문제입니다). 

통상적으로 PSCF와 CWT의 가중치 함수를 동일하게 사용하는데, 왜 openair에서 서로 다른 함수를 사용했는지 모르겠습니다.

 

그래서 저는 CWT 가중치 함수를 PSCF 가중치 함수로 교체했고, 아래 그림과 같이 격자 크기가 달라도 CWT 결과는 동일하게 산출되는 것을 확인했습니다.

가중치 함수 수정 후 2018년 울산 성남동  PM2.5 농도 CWT (격자 크기, 2도, 1도, 0.5도)

아래 그림은 PSCF 결과입니다. CWT 결과와 거의 비슷합니다. 

2018년 울산 성남동  PM2.5 농도 PSCF (격자 크기, 2도, 1도, 0.5도)

아래 그림은 가중치 함수 수정 후에 다시 산정한 8년 자료에 대한 CWT 결과입니다. 

가중치 함수 수정 후 2013~2020년 서울 PM2.5 농도 CWT (격자 크기 1도)

 

 

결론

openair로 CWT를 실행하기 전에 반드시 가중치 함수를 수정해야 합니다.

댓글