Gbeta
<p>[TOC]</p>
<pre><code class="language-python">import meteva.base as meb
import meteva.method as mem
import pprint</code></pre>
<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_03 = r'H:\test_data\input\mem\mode\ec\rain03\20072608.003.nc'
grd_ob = meb.read_griddata_from_nc(path_ob, grid=grid1, time=&quot;2020072611&quot;, dtime=0, data_name=&quot;OBS&quot;)
grd_fo = meb.read_griddata_from_nc(path_fo_03, grid=grid1, time=&quot;2020072608&quot;, dtime=3, data_name=&quot;ECMWF&quot;)</code></pre>
<h1>Gbeta方法</h1>
<p><font face="黑体" color=Blue size=3><strong>Gilleland (2020) 提出了一些总结措施,并提供了一个介于零(差分)和一(满分)之间的指数,描述了两个场之间空间对齐的接近程度。</strong></font> </p>
<p>参考文献:Gilleland, E., 2020. Novel measures for summarizing high-resolution forecastperformance. Submitted to Mon. Wea. Rev. on 31 March 2020. Re-submitted on 18May 2020. Re-submitted to Advances in Statistical Climatology, Meteorology andOceanography on 19 July 2020.Temporarily available at:<a href="https://ral.ucar.edu/staff/ericg/Gilleland2020.pdf">https://ral.ucar.edu/staff/ericg/Gilleland2020.pdf</a>.</p>
<h2>Gbeta评分</h2>
<p><font face="黑体" color=Blue size=3><strong>Gbeta_score(ob, fo, threshold, beta = None, alpha = 0)</strong></font> </p>
<p>(1)在两个字段A和B之间应用的Gbeta被定义为:<br />
Gbeta(A,B) = max(1-y/beta,0)
这里,y = y1 <em> y2,其中y1是A和B之间重叠的度量(如果它们完全重叠,y1 = 0);它是AB^c和A^cB中的点数,其中^c表示集合的补集。y2 =(MED(A,B)</em> nB + MED(B,A)* nA),其中MED是平均误差距离(有关MED的更多信息,请参阅locperf),nA和nB分别表示集合A和B中值为1的网格点数。如果alpha != 0,则y/beta被替换为(y - alpha) / (beta - alpha)。 </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><font face="黑体" color=Blue size=5>ob</font></strong></td>
<td style="text-align: left;">观测数据矩阵,一维或二维numpy数组</td>
</tr>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=Blue size=5>fo</font></strong></td>
<td style="text-align: left;">预报数据矩阵,一维或二维numpy数组,shape和观测数据线条</td>
</tr>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=Blue size=5>threshold</font></strong></td>
<td style="text-align: left;">阈值</td>
</tr>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=Blue size=5>beta</font></strong></td>
<td style="text-align: left;">单个数值,定义了y = y1y2或y = y1y2(1+y3)中的上限,决定了指标减小的速度。默认值是域大小的一半的平方</td>
</tr>
<tr>
<td style="text-align: left;"><strong>alpha</strong></td>
<td style="text-align: left;">单个数值,定义了y = y1y2或y = y1y2(1+y3)中的下限,决定了何时构成完美匹配。默认值为零要求两个字段完全相同,在大多数情况下是理想状态</td>
</tr>
</tbody>
</table>
<p><font face="黑体" color=Blue size=3><strong>输出结果说明</strong></font> </p>
<p><strong>计算两个场的线性组合:(i) 两个场之间的重叠量和 (ii) 平均误差距离</strong> </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><font face="黑体" color=Blue size=5>nA</font></strong></td>
<td style="text-align: left;">实况超阈值的格点数</td>
</tr>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=Blue size=5>nB</font></strong></td>
<td style="text-align: left;">预报超阈值的格点数</td>
</tr>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=Blue size=5>nAB</font></strong></td>
<td style="text-align: left;">命中格点数</td>
</tr>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=Blue size=5>nAnB_2nAB</font></strong></td>
<td style="text-align: left;">nA+nB- 2×nAB, 即漏报+空报数</td>
</tr>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=Blue size=5>medAB</font></strong></td>
<td style="text-align: left;">预报目标到观测目标的平均距离</td>
</tr>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=Blue size=5>medBA</font></strong></td>
<td style="text-align: left;">观测目标到预报目标的平均距离</td>
</tr>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=Blue size=5>medAB_multiply_nB</font></strong></td>
<td style="text-align: left;">每个预报目标格点到观测目标的距离总和</td>
</tr>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=Blue size=5>medBA_multiply_nA</font></strong></td>
<td style="text-align: left;">每个观测目标格点到预报目标的距离总和</td>
</tr>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=Blue size=5>GbetaAB</font></strong></td>
<td style="text-align: left;">评分函数 GBeta(A,B)的取值,见上文公式</td>
</tr>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=Blue size=5>GbetaBA</font></strong></td>
<td style="text-align: left;">评分函数 GBeta(B,A)的取值,见上文公式</td>
</tr>
<tr>
<td style="text-align: left;"><strong>beta</strong></td>
<td style="text-align: left;">参数中所使用的beta值</td>
</tr>
<tr>
<td style="text-align: left;"><strong>alpha</strong></td>
<td style="text-align: left;">参数中所使用的alpha值</td>
</tr>
<tr>
<td style="text-align: left;"><strong>threshold</strong></td>
<td style="text-align: left;">数值向量,给出阈值的值和所使用的规则</td>
</tr>
<tr>
<td style="text-align: left;"><strong>data_name</strong></td>
<td style="text-align: left;">字符向量,给出用于X和Xhat的对象名称</td>
</tr>
</tbody>
</table>
<pre><code class="language-python">result = mem.space.gbeta.Gbeta_score(grd_ob.values.squeeze(), grd_fo.values.squeeze(), threshold = 0.1)
pprint.pprint(result)</code></pre>
<pre><code>{'&quot;nAnB_2nAB': 33753.0,
'GbetaAB': 0.1830766441402144,
'GbetaBA': 0.9959323438632971,
'alpha': 0,
'beta': 16569095841.0,
'medAB': 6.818879813471266,
'medAB_multiply_nB': 445736.5356469897,
'medBA': 0.5185276454453899,
'medBA_multiply_nA': 19904.72072571218,
'nA': 38387.0,
'nAB': 35001,
'nB': 65368.0,
'threshold': 0.1}</code></pre>
<h2>GbetaIL评分</h2>
<p><font face="黑体" color=Blue size=3><strong>GbetaIL_score(ob, fo, threshold, beta= None, alpha = 0, w = 0.5)</strong></font> </p>
<p>(2)GbetaIL被定义为 </p>
<p>GbetaIL(A,B) = w<em>Gbeta + (1 - w)</em>theta(A, B)</p>
<p>其中theta是零和排序后的强度值之间的线性相关系数的最大值;此部分通过调用qqplot来执行。如果两组中的点数不同(即如果nA != nB),则将较大的集合线性插值为与较小的集合相同大小。如果两个字段都为空,则theta = 1。如果字段A为空,则theta = 1 - (nB / N),其中N是域的大小。类似地,如果字段B为空。其基本原理是,如果一个场为空,而另一个场的非零点非常少,则两个场比如果另一个字段有很多点更相似。 </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><font face="黑体" color=Blue size=5>ob</font></strong></td>
<td style="text-align: left;">观测数据矩阵,一维或二维numpy数组</td>
</tr>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=Blue size=5>fo</font></strong></td>
<td style="text-align: left;">预报数据矩阵,一维或二维numpy数组,shape和观测数据线条</td>
</tr>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=Blue size=5>threshold</font></strong></td>
<td style="text-align: left;">阈值</td>
</tr>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=Blue size=5>beta</font></strong></td>
<td style="text-align: left;">单个数值,定义了y = y1y2或y = y1y2(1+y3)中的上限,决定了指标减小的速度。默认值是域大小的一半的平方</td>
</tr>
<tr>
<td style="text-align: left;"><strong>alpha</strong></td>
<td style="text-align: left;">单个数值,定义了y = y1y2或y = y1y2(1+y3)中的下限,决定了何时构成完美匹配。默认值为零要求两个字段完全相同,在大多数情况下是理想状态</td>
</tr>
<tr>
<td style="text-align: left;"><strong>w</strong></td>
<td style="text-align: left;">仅对GbetaIL 适用,介于零和一之间的单个数字,描述在GbetaIL的定义中给第一个项多少权重</td>
</tr>
</tbody>
</table>
<p><font face="黑体" color=Blue size=3><strong>输出结果说明</strong></font> </p>
<p><strong>计算两个场的线性组合:(i) 两个场之间的重叠量和 (ii) 平均误差距离</strong> </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><font face="黑体" color=Blue size=5>nA</font></strong></td>
<td style="text-align: left;">实况超阈值的格点数</td>
</tr>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=Blue size=5>nB</font></strong></td>
<td style="text-align: left;">预报超阈值的格点数</td>
</tr>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=Blue size=5>nAB</font></strong></td>
<td style="text-align: left;">命中格点数</td>
</tr>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=Blue size=5>nAnB_2nAB</font></strong></td>
<td style="text-align: left;">nA+nB- 2×nAB, 即漏报+空报数</td>
</tr>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=Blue size=5>medAB</font></strong></td>
<td style="text-align: left;">预报目标到观测目标的平均距离</td>
</tr>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=Blue size=5>medBA</font></strong></td>
<td style="text-align: left;">观测目标到预报目标的平均距离</td>
</tr>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=Blue size=5>medAB_multiply_nB</font></strong></td>
<td style="text-align: left;">每个预报目标格点到观测目标的距离总和</td>
</tr>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=Blue size=5>medBA_multiply_nA</font></strong></td>
<td style="text-align: left;">每个观测目标格点到预报目标的距离总和</td>
</tr>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=Blue size=5>GbetaAB</font></strong></td>
<td style="text-align: left;">评分函数 GBeta(A,B)的取值,见上文公式</td>
</tr>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=Blue size=5>GbetaBA</font></strong></td>
<td style="text-align: left;">评分函数 GBeta(B,A)的取值,见上文公式</td>
</tr>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=Blue size=5>corrcoef_sorted</font></strong></td>
<td style="text-align: left;">对观测和预报的目标格点的降水量进行排序,由于观测和预报的序列长度不一样,所以按顺序分别对观测和预报取100个分位值,在计算两个分位值序列的相关系数</td>
</tr>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=Blue size=5>GbetaIL</font></strong></td>
<td style="text-align: left;">评分函数 GbetaIL(A,B)的取值,见上文公式</td>
</tr>
<tr>
<td style="text-align: left;"><strong>beta</strong></td>
<td style="text-align: left;">参数中所使用的beta值</td>
</tr>
<tr>
<td style="text-align: left;"><strong>alpha</strong></td>
<td style="text-align: left;">参数中所使用的alpha值</td>
</tr>
<tr>
<td style="text-align: left;"><strong>threshold</strong></td>
<td style="text-align: left;">数值向量,给出阈值的值和所使用的规则</td>
</tr>
<tr>
<td style="text-align: left;"><strong>data_name</strong></td>
<td style="text-align: left;">字符向量,给出用于X和Xhat的对象名称</td>
</tr>
</tbody>
</table>
<pre><code class="language-python">result = mem.space.gbeta.GbetaIL_score(grd_ob.values.squeeze(), grd_fo.values.squeeze(), threshold = 0.1)
pprint.pprint(result)</code></pre>
<pre><code>{'&quot;nAnB_2nAB': 33753.0,
'GbetaAB': 0.1830766441402144,
'GbetaBA': 0.9959323438632971,
'GbetaIL': 0.4948583485582582,
'alpha': 0,
'beta': 16569095841.0,
'corrcoef_sorted': 0.9897166971165164,
'medAB': 6.818879813471266,
'medAB_multiply_nB': 445736.5356469897,
'medBA': 0.5185276454453899,
'medBA_multiply_nA': 19904.72072571218,
'nA': 38387.0,
'nAB': 35001,
'nB': 65368.0,
'threshold': 0.5,
'weights': [0.5, 0.5]}</code></pre>
<h2>G2IL评分</h2>
<p><font face="黑体" color=Blue size=3><strong>G2IL_score(ob, fo, threshold, beta= None, alpha = 0)</strong></font> </p>
<p>(3)G2betaIL被定义为 </p>
<p>G2betaIL(A,B) = max(1 - (y1 <em> y2 </em>(1 + y3 ))/\beta, 0)</p>
<p>其中y1和y2如上所述,y3是集合A和B中排序值之间的平均绝对差,类似于GbetaIL。如果nA = nB = 0,则y3 = 0。如果nA或nB中仅有一个为零,则使用另一个集合的最大强度的绝对值。其基本原理是,这个值代表了最严重的错误,因此如果它很大,那么差异将被惩罚得更多。</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><font face="黑体" color=Blue size=5>ob</font></strong></td>
<td style="text-align: left;">观测数据矩阵,一维或二维numpy数组</td>
</tr>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=Blue size=5>fo</font></strong></td>
<td style="text-align: left;">预报数据矩阵,一维或二维numpy数组,shape和观测数据线条</td>
</tr>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=Blue size=5>threshold</font></strong></td>
<td style="text-align: left;">阈值</td>
</tr>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=Blue size=5>beta</font></strong></td>
<td style="text-align: left;">单个数值,定义了y = y1y2或y = y1y2(1+y3)中的上限,决定了指标减小的速度。默认值是域大小的一半的平方</td>
</tr>
<tr>
<td style="text-align: left;"><strong>alpha</strong></td>
<td style="text-align: left;">单个数值,定义了y = y1y2或y = y1y2(1+y3)中的下限,决定了何时构成完美匹配。默认值为零要求两个字段完全相同,在大多数情况下是理想状态</td>
</tr>
</tbody>
</table>
<p><font face="黑体" color=Blue size=3><strong>输出结果说明</strong></font> </p>
<p><strong>计算两个场的线性组合:(i) 两个场之间的重叠量和 (ii) 平均误差距离</strong> </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><font face="黑体" color=Blue size=5>nA</font></strong></td>
<td style="text-align: left;">实况超阈值的格点数</td>
</tr>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=Blue size=5>nB</font></strong></td>
<td style="text-align: left;">预报超阈值的格点数</td>
</tr>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=Blue size=5>nAB</font></strong></td>
<td style="text-align: left;">命中格点数</td>
</tr>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=Blue size=5>nAnB_2nAB</font></strong></td>
<td style="text-align: left;">nA+nB- 2×nAB, 即漏报+空报数</td>
</tr>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=Blue size=5>medAB</font></strong></td>
<td style="text-align: left;">预报目标到观测目标的平均距离</td>
</tr>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=Blue size=5>medBA</font></strong></td>
<td style="text-align: left;">观测目标到预报目标的平均距离</td>
</tr>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=Blue size=5>medAB_multiply_nB</font></strong></td>
<td style="text-align: left;">每个预报目标格点到观测目标的距离总和</td>
</tr>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=Blue size=5>medBA_multiply_nA</font></strong></td>
<td style="text-align: left;">每个观测目标格点到预报目标的距离总和</td>
</tr>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=Blue size=5>GbetaAB</font></strong></td>
<td style="text-align: left;">评分函数 GBeta(A,B)的取值,见上文公式</td>
</tr>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=Blue size=5>GbetaBA</font></strong></td>
<td style="text-align: left;">评分函数 GBeta(B,A)的取值,见上文公式</td>
</tr>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=Blue size=5>rmse_sorted</font></strong></td>
<td style="text-align: left;">对观测和预报的目标格点的降水量进行排序,由于观测和预报的序列长度不一样,所以按顺序分别对观测和预报取100个分位值,再计算两个分位值序列的rmse</td>
</tr>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=Blue size=5>G2IL</font></strong></td>
<td style="text-align: left;">评分函数 G2IL(A,B)的取值,见上文公式</td>
</tr>
<tr>
<td style="text-align: left;"><strong>beta</strong></td>
<td style="text-align: left;">参数中所使用的beta值</td>
</tr>
<tr>
<td style="text-align: left;"><strong>alpha</strong></td>
<td style="text-align: left;">参数中所使用的alpha值</td>
</tr>
<tr>
<td style="text-align: left;"><strong>threshold</strong></td>
<td style="text-align: left;">数值向量,给出阈值的值和所使用的规则</td>
</tr>
<tr>
<td style="text-align: left;"><strong>data_name</strong></td>
<td style="text-align: left;">字符向量,给出用于X和Xhat的对象名称</td>
</tr>
</tbody>
</table>
<pre><code class="language-python">result = mem.space.gbeta.G2IL_score(grd_ob.values.squeeze(), grd_fo.values.squeeze(), threshold = 0.1)
pprint.pprint(result)</code></pre>
<pre><code>{'&quot;nAnB_2nAB': 33753.0,
'G2IL': 0.9999946927796994,
'GbetaAB': 0.1830766441402144,
'GbetaBA': 0.9959323438632971,
'alpha': 0,
'beta': 16569095841.0,
'medAB': 6.818879813471266,
'medAB_multiply_nB': 445736.5356469897,
'medBA': 0.5185276454453899,
'medBA_multiply_nA': 19904.72072571218,
'nA': 38387.0,
'nAB': 35001,
'nB': 65368.0,
'rmse_sorted': 2.8277593787031856,
'threshold': 0.5}</code></pre>
<pre><code class="language-python"></code></pre>