我有一个真实数据的数据集,例如如下所示:
# Dataset 1 with known data
known <- data.frame(
x = c(0:6),
y = c(0, 10, 20, 23, 41, 39, 61)
)
plot (known$x, known$y, type="o")
现在我想得到问题的答案
“如果原始数据集的所有中间数据点都位于周围测量值之间的一条直线上,那么 0.3 的 Y 值是多少?”
# X values of points to interpolate from known data
aim <- c(0.3, 0.7, 2.3, 3.3, 4.3, 5.6, 5.9)
如果你看一下图表:我想获得 Y 值,其中 ablines 与已知数据的线性插值相交
abline(v = aim, col = "#ff0000")
因此,在理想情况下,我会用我的已知数据创建一个“线性插值模型”,例如
model <- linearInterpol(known)
...然后我可以询问 Y 值,例如
model$getEstimation(0.3)
(在这种情况下应该给出“3”)
abline(h = 3, col = "#00ff00")
我怎样才能意识到这一点?我会手动为每个值做这样的事情:
- 最接近的 X 值较小是多少
Xsmall
且最接近的 X 值较大Xlarge
比当前的 X 值X
.
- 计算与较小 X 值的相对位置
relPos = (X - Xsmall) / (Xlarge - Xsmall)
- 计算预期 Y 值
Yexp = Ysmall + (relPos * (Ylarge - Ysmall))
至少对于Matlab这个软件,我听说有一个内置的函数可以解决此类问题。
感谢您的帮助,
Sven