meteva

提供气象产品检验相关python程序


FQI检验

<p>[TOC]</p> <pre><code class="language-python">%matplotlib inline %load_ext autoreload %autoreload 2 import meteva.base as meb import meteva.method as mem import meteva.perspact as mps import numpy as np import pandas as pd import datetime import meteva</code></pre> <h1>fqi</h1> <h2>算法原理</h2> <p>从某种角度看,检验评估方法可以分为2类,一类是基于幅度的,例如,rmse,另一类是基于位置的,例如TS和ETS评分。对此,可以通过下面的示意图来说明。 <img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=09794b212837280f64882ac021e39f68&amp;amp;file=file.jpg" alt="" /> 上面的图表示的是在一个100×100的网格上观测和预报的落区位置,其中ORIGINAL 代表观测,中心位置位于(20,20),member1和member2代表两个预报的落区位置,中心位置分别位于(40,40)和(70,70)。 如果采用rmse对预报进行评价,计算的就是每个点上的观测和预报数值大小的偏差。如果采用TS对预报进行评价,则计算的是 TS = 观测预报落区的交集/观测预报落区的并集。<br /> 就上面的例子而言,无论是采用基于幅度的rmse,还是基于位置的TS都没能区分member1和member2的预报性能差异。如果采用Hausdorff距离,则可以区分上述两种预报的性能差异。Hausdorff距离的计算公式为: <img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=d7219ca2b31316e83c64cffa7fdfb960&amp;amp;file=file.png" alt="" /></p> <p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=f890c84a9c1459b4a16573809670c736&amp;amp;file=file.png" alt="" /></p> <p>实际上Hausdorff距离也存在明显的缺点,那就是它对异常点太过敏感。设想,如果member在坐标(90,90)的位置有一个格点取值不为0,那观测到member1的距离就会大于观测到member2的距离。为了克服这个问题,在上面的计算公式中将max函数改为75%分位值,这样就得到了partial Hausdorff 距离,计算公式为: <img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=d2e2cad43064315b2e17d3fccb2a2e09&amp;amp;file=file.png" alt="" /></p> <p>PHD对观测场中非0像素的比例是敏感的,由于不同时刻的观测场中非0像素的比例是不同的,因此不同时刻的PHD缺乏可对比性。另外,PHD也只能考虑格点上事件的落区,只能区分0和非零,不能对观测和预报场的取值大小进行对比。为此Venugopal等人提出了FQI指标,它的公式为: <img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=7066c240efd8cbf405ac7cf74dee0664&amp;amp;file=file.png" alt="" /></p> <p>在上面的公式中Surrogates of R1 表式的是对观测做某种转换处理,得到一组频谱分布和空间尺度和观测相同,但具体落区位置和观测不同的场,然后计算观测观测和转换后的场之间的PHD的平均值,以它作为分母,对观测预报间的PHD进行标准化。 FQI则是标准化的PHD/(亮度一致性*对比度一致性),如果亮度一致性或对比度一致性很小,FQI会很大,意味着预报质量很低。</p> <h2>函数说明</h2> <p>&lt;font face=&quot;黑体&quot; color=Blue size=3&gt;<strong>fqi(grd_ob,grd_fo,thresholds)</strong>&lt;/font&gt;</p> <table> <thead> <tr> <th style="text-align: left;">参数</th> <th style="text-align: left;">说明</th> </tr> </thead> <tbody> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=Blue size=5&gt;grd_ob&lt;/font&gt;</strong></td> <td style="text-align: left;">网格数据形式的观测数据,只支持包含单一平面场的网格数据</td> </tr> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=Blue size=5&gt;grd_fo&lt;/font&gt;</strong></td> <td style="text-align: left;">网格数据形式的预报数据,只支持包含单一平面场的网格数据</td> </tr> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=Blue size=5&gt;thresholds&lt;/font&gt;</strong></td> <td style="text-align: left;">等级阈值列表</td> </tr> <tr> <td style="text-align: left;">&lt;font face=&quot;黑体&quot; color=blue size=5&gt;return&lt;/font&gt;</td> <td style="text-align: left;">每个等级的fqi评分结果,数组形式</td> </tr> </tbody> </table> <p><strong>调用示例</strong></p> <pre><code class="language-python">grid1 = meb.grid([100, 120, 0.05], [24, 40, 0.05]) path_ob = r'H:\test_data\input\mem\mode\ob\rain03\20072611.000.nc' path_fo = r'H:\test_data\input\mem\mode\ec\rain03\20072608.003.nc' grd_ob = meb.read_griddata_from_nc(path_ob, grid=grid1, time=&amp;quot;2020072611&amp;quot;, dtime=0, data_name=&amp;quot;OBS&amp;quot;) grd_fo = meb.read_griddata_from_nc(path_fo, grid=grid1, time=&amp;quot;2020072608&amp;quot;, dtime=3, data_name=&amp;quot;ECMWF&amp;quot;) result = mem.space.fqi.fqi(grd_ob,grd_fo,thresholds=[0.01,50.01]) print(result)</code></pre> <pre><code>[[7.3967157e-01 9.9999900e+05]]</code></pre> <h2>参考文献</h2> <p>Venugopal, V., Basu, S. and Foufoula-Georgiou, E. (2005) A new metric for comparing precipitation patterns with an application to ensemble forecasts. J. Geophys. Res., 110, D08111, 11 pp., doi:10.1029/2004JD005395.</p>

页面列表

ITEM_HTML