- 
                Notifications
    
You must be signed in to change notification settings  - Fork 197
 
Description
Hi everyone,
I've encountered a tricky issue while using Kriging with External Drift (KED) to fuse satellite and rain gauge data, and I was hoping to get some advice.
The Setup:
Data Sources: 1. Satellite rainfall data (as the external drift); 2. Rain gauge measurements from ground stations.
Fusion Method: KED (Kriging with External Drift).
The Core Problem: In most cases, the fusion results look reasonable. However, at certain times—especially when a station observes localized, heavy rainfall, creating a large discrepancy with the satellite data—the KED result exhibits severe "overshooting".
Specifically, the peak value in the fused rainfall field becomes anomalously high, far exceeding the maximum value from either of the original input sources. I've attached a typical image illustrating the problem, where:
Max Satellite Rainfall: 7.8
Max Station Rainfall (from IDW interpolation for comparison): 16.4
But the KED Fused Result Peak reaches 44.9
My Questions:
Is this "overshooting" an inherent flaw of the KED algorithm, especially when dealing with large local gradients between the primary variable (stations) and the external drift (satellite)?
Or, is it more likely an issue with my parameter settings (e.g., variogram model selection, nugget effect) or my code implementation?
Are there any recommended methods to suppress or avoid this numerical amplification effect during the fusion process?
This issue only occurs intermittently, but it significantly impacts the reliability of the results. I would be very grateful to hear any analysis or advice from those with experience in this area.
Thank you very much!
The parameter Settings are as follows:
custom_params = {"sill": 0.1 , "range": 0.55, "nugget": 0.001}
Below is the used code :
uk = UniversalKriging(
x=gauge_points[:, 0],#The longitude of each station
y=gauge_points[:, 1],#The latitude of each station
z=gauge_values, #Observe the rainfall at each station
variogram_model=variogram_model,
variogram_parameters=variogram_parameters,
drift_terms=["external_Z"],
external_drift=sat_data, # Satellite data, two-dimensional grid
external_drift_x=sat_lon[0, :], #Satellite grid longitude
external_drift_y=sat_lat[:, 0], #Satellite grid latitude
pseudo_inv=True, #
exact_values=False #
)
z, _ = uk.execute("grid", sat_lon[0, :], sat_lat[:, 0])
z = np.where(z < 0, 0, z)


