I need to create some type of formula that will allow me to interpolate values at specific points in a data set. My data is something like this: I have a list of times, and there are values associated with those times like this:
1 100 103 105
2 103 101 107
3 102 104 108
4.5 107 107 105
7 105 106 104
I need to correct the times (and the corresponding values) so that each timestamp is one second apart. My professor said that the best way to do this would be with a weighted average.
I'm finding it difficult to find a formula that seems correct. I tried solving for the correct time value, ie:
4 = ((3+4.5)/2)x
Where x= the unknown weight, 4 is the corrected timestamp value, and 3 and 4.5 are the known time values. This gives me an X of 16/15. This process works when I know what the value should be (as with the timestamps), but I don't know what the interpolated reading values should be. I thought that maybe once I found the "weight" from the timestamps I could use it to interpolate the readings, but this doesn't seem to provide a reasonable answer. (ie, plugging in 16/15 for x in the equation ((102+107)/2)x provides a value of 111.47, which doesn't make sense). I also thought about multiplying the average by some sort of percent difference from the target value, but this doesn't seem to work either.
The dataset I have is very large so ideally I'd like to find a formula that I can use in a program to do the calculations for me, rather than doing each calculation by hand. Any help or insight would be appreciated.
Math - weighted average? - Steve, Wednesday, October 3, 2012 at 2:59pm
if you understand interpolation, and you seem to, just think of it this way.
If the value you want is, say, 2/3 of the way from one known value to the next, the readings will also be 2/3 of the way from one value to the next.
so, if you want to place values at 1-unit intervals, you need to step through the given timestamps and whenever you find two timestamps greater than one unit apart, interpolate.
3 and 4.5 are greater than 1 unit apart, so, since 4 is 2/3 of the way between 3 and 4.5, you will generate values 2/3 of the way between those at 3, and those at 4.5.
Since 7 is more than 1 unit away from 4.5, you need to generate data points for times of 5 and 6.
5 is 1/5 of the way from 4 to 7.5
6 is 3/5 of the way.
so, given x-values and y-values,
if xn+1 - xn > 1,
for each number xk between xn and xn+1,
yk = yn + (xk-xn)/(xn+1-xn) * (yn+1-yn)
Math - weighted average? - Steve, Wednesday, October 3, 2012 at 3:01pm
small oops. 5 is 2/7 of the way from 4 to 7.5, and 6 is 4/7, and 7 is 6/7.
Math - weighted average? - Kate, Thursday, October 4, 2012 at 1:14pm
This made a lot of sense, thank you for responding! It was able to incorporate it into my program and it seems to work.