|||
气象数据往往存在着一定时间的缺失,可能是观测仪器暂时的故障,也可能是人为原因造成的,总之有一段的数据没有,造成下一步的处理与分析的困难。这里讨论4种Matlab处理的方法,对应不同的情况各有优缺点,将介绍在下面。
本例以CHESTERTOWN MD US(北纬39.21667°,西经76.06667°,位置见图 0)气象站1894~2010年逐月降水数据为例,缺失1914~1935年数据,部分年份——1894、1895、1896、1897、1898、1900、1901、1906、1936存在着部分月度数据的缺失,本帖就是讨论这部分年内月数据插补的问题。
图 0
(1)拟合
Matlab给出的函数:polyfit和polyval。
以1894年为例,一次线性拟合各月降水量。如图1所示,一次线性拟合的效果不太好,原始数据在5月和9月两次出现“峰值”,但拟合结果只有一个趋势,相差比较大。
图 1
以此类推,二次线性拟合如图 2所示,这显然是一个错误的结果。
图 2
三次线性拟合也是一个错误的结果,如图 3。
图 3
继续试验,3次以上的线性拟合结果也都是错误的。因此,判断本例不适宜采用拟合方法。
(2)回归
Matlab函数:regress。(为什么有人会用回归?李春强,杜毅光,李保国. 1965—2005年河北省降水量变化的小波分析[J]. 地理科学进展,2010,29(11):1340-1344.)
还是以1984年为例,自变量只有1列(就是一元),回归的效果不好,回归系数没有常数项,R-squre为负值,F statistic和p value为NaN。故此方法也不能满足需求。
(3)插值
Matlab函数:interp1,注意这只是内插,需要外插还要添加关键字“extrap”。
以1894年为例,线性内插出数据缺失的月数据。如图 4所示,空心圆圈是线性插值的结果。
图 4
不过插值方法也不是完美的,1900(图 5)和1936年(图 6)数据外插的月数据就出现了负值,这显然是不正确的。
图 5
图 6
(4)均值
对于部分月降水量的缺失,试采用多年的月降水量平均值进行填充,如图 7所示为1~12月降水量平均值。这个方法的优势是简单易行,但多年的月降水量只用平均值填充,难免对降水情况的年、季变动刻画不足,导致插补的年份降水情况趋同,给趋势分析带来困难。
图 7
还是回到本帖开始介绍的数据,逐月降水数据覆盖1894~2010年,缺失1914~1935年数据,部分年份——1894、1895、1896、1897、1898、1900、1901、1906、1936存在着部分月度数据的缺失。综合考虑以上4种方法,考虑各方法的优缺点,以扬长避短为原则,采用插值方法填充1894、1895、1896、1897、1898、1900、1906年缺失数据,均值方法填充1900和1936两年缺失数据,1914~1935年数据采用插值方法得到各年降水量(拟合效果不太好),如图 8红圈处。
图 8
最终得到1894~2010年117年的年降水量。数据及代码附下。
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-12-29 04:03
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社