Variable Dependent Weighted Interpolation

I have two XYZ grids. D1 is low resolution elevation dataset (n = 9000), while D2 is a related higher resolution product (n = 30,000) that occupies the same XY domain, but is not elevation. The values in D2 do positively correlate with D1.
I would like to interpolate between my XY points in D1 at the resolution of D2 using D2 to inform the interpolation. Is there a way to go about this? What compounds it is that the values in D2 have their own uncertainty with higher values having high uncertainty and lower values expressing greater confidence.
In other words, for all points in D2 I would like to define a D1 value that is dependent on A) the nearest D1 value AND B) the D2 value at that point, with the weight of the D2 value dependent on its uncertainty.
Initially I had been exploring the neural network curve fitting tool to see if I could generate an elevation product using the relationship between D1 and D2. The results were mixed with the greatest problem being that the high and low values outputted were beyond the range of my target data. I suspect that this might have been due to the the variable confidence bounds on D2, and that this approach focussed exclusively on the relationship between D1 and D2 while ignoring the spatial relationship between the points in D1.
Any thoughts on this would be appreciated.
Thanks.

4 Comments

I would like to define a value that is dependent on A) the nearest D1 value AND B) the D2 value at that point, with the weight of the D2 value dependent on its uncertainty
It sounds like your first step is simply nearest neighbour interpolation of the D1 points onto the D2 grid. Your second step then sounds like simply a point-wise combination of the interpolated D1 with D2.
I'm not really clear what mathematical equation you want to use for step 2.
Agreed. Nearest Neighbor or inverse distance weighting would each work for interpolating between the D1 points, but the result isn't very accurate given local variability between points. D2 captures that variability well, which means that the puzzle is how to weight an interpolation using multiple variables (distance between points and the D1 index).
What I had considered was trying to define a transform function through linear regression that could calculate elevation from my D2 index, and maybe that is the path to reconsider. But somehow interpolating between D1 points and then shifting those values up or down based on the D2 values seemed like a better approach, though I still need a transform of sort I suppose.
For example: If D1 = [8,5;7,2] but covered the same spatial extents as D2
And D2 =
0 1 4 9 9 10
1 0 0 5 10 11
0 1 18 9 6 13
0 3 2 18 19 20
1 4 2 15 15 22
20 5 7 20 21 20
Then Output should equal something like (and this is not a correct output, but along the lines of what I would expect):
N =
8.0 8.5 9.0 6.0 6.5 5.5
7.9 8.0 8.0 5.5 5.0 5.0
8.0 7.5 4.0 6.0 4.0 5.2
7.0 7.3 6.0 4.0 4.0 3.0
7.5 7.0 5.5 4.5 2.0 2.0
3.0 6.5 6.0 2.5 2.0 1.5
Maybe that's it.. Just interpolate between D1 points at the resolution of D2 and then figure out the how to shift the D1 points based on a TBD scaling factor between D1 and D2.
It seems to me that you've answered your own question, you just have to find a formula for the scaling factor that works for you.
Do you need help coding the implementation of the above?
I think I just had to talk it through.
What I've done is use the Neural Network Fitting tool to output an elevation dataset using the D2 index as a predictor (I tried fitlm first, but I wasn't as happy with the output). Since that's not perfect, I'm working on an inverse distance scaling factor that will weigh the modeled output before merging it with the low resolution D1 data. Basically the closer a modeled point is to a D1 point, its impact will be less on the final product, and vice versa. That's my thinking anyway. I've computed the distance between each modeled point and the nearest D1 point and normalized those with 0 being far and 1 being right on top of each other.
(D1 * (Normalized_Distance) + (Modelled_Point * (1 - Normalized_Distance))
That seems to be working
Thanks for your help.

Sign in to comment.

Answers (0)

Categories

Find more on Interpolation in Help Center and File Exchange

Asked:

on 31 Oct 2018

Commented:

on 31 Oct 2018

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!