我有一个反复出现的问题,我无法完全理解和解释。在哪些情况下应用平均值mean()可能更好,在哪些情况下应用中位数median()更好?
例如,当我想要对盆地中的降雨进行区域化时,我会为该盆地的 shapefile 应用平均reducer。但是,我有时会看到人们使用中位数。
了解应用其中一种情况的最佳情况的人可以帮助我吗?
首先我们在解决这个问题之前,看一下Google Earth Engine中对其的定义分别使什么样的:
mean()平均值() 通过计算所有匹配波段堆栈中每个像素的所有值的平均值来减少图像集合。波段是按名称匹配的。
参数。 this:collection (ImageCollection)。 要减少的图像集合。
返回。图像
median()中位数() 通过计算所有匹配波段堆栈中每个像素点的所有数值的中位数来减少一个图像集合。波段是按名称匹配的。
参数。 this:collection (ImageCollection)。 要减少的图像集合。
返回。图像
通过大量的实验操作,这里我觉得当你的数据中有异常值(例如云/云阴影)时,median() 更适合。因此,对于光学遥感数据(例如 Landsat/Sentinel 图像),最好使用中值median()。
对于网格数据(例如降水)或其他不受异常值影响的数据集,mean() 很好。
这里我们用数据做一个分析,就用Landsat 8
var geometry = /* color: #d63000 */ee.Geometry.Point([41.23936152473313, 40.53205073704967]);
//去云函数
function clouds(image){
var QA = image.select(['BQA'])
var mask=QA.bitwiseAnd(1 << 5).and(QA.bitwiseAnd(1 << 4).eq(0))
return image.updateMask(mask)}
//影像筛选
var im=ee.ImageCollection('LANDSAT/LC08/C01/T1_TOA')
.filterBounds (geometry)
.filterDate('2021-01-01','2021-07-01')
.map(clouds)
.median()
Map.addLayer(im)
var im1=ee.ImageCollection('LANDSAT/LC08/C01/T1_TOA')
.filterBounds (geometry)
.filterDate('2021-01-01','2021-07-01')
.map(clouds)
.mean()
Map.addLayer(im1)
median的结果:
mean的结果
同样我们可以加载降水的数据集来实验:
var geometry = /* color: #d63000 */ee.Geometry.Point([41.23936152473313, 40.53205073704967]);
var im3=ee.ImageCollection("NASA/GPM_L3/IMERG_V06")
.filterBounds (geometry)
.filterDate('2021-06-01','2021-07-01')
.select("HQprecipitation")
.median()
Map.addLayer(im3)
var im4=ee.ImageCollection("NASA/GPM_L3/IMERG_V06")
.filterBounds (geometry)
.filterDate('2021-06-01','2021-07-01')
.select("HQprecipitation")
.mean()
Map.addLayer(im4)
但是结果可能因为分辨率太粗无法显示的非常细腻:
mean的结果
median的结果:
总之,中位数、均值(平均值)或众数分别是数据集集中趋势的度量。
如果您知道数据的分布有许多极值或异常值,那么中值将提供对中心值的更好估计,因为它较少受各个数据点的绝对值的影响。中位数的缺点是您不能将其与参数统计值一起使用。如果您需要对数据使用参数统计,那么您应该在计算平均值之前删除异常值或尝试数据转换以标准化数据或两者兼而有之。