我有真实数据的数据集,例如,看起来像这样:
# 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值,其中的斜线与已知数据的线性插值相交
abline(v = aim, col = "#ff0000")
因此,在理想情况下,我将使用已知数据创建“ linearInterpolationModel”,例如
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,我听说有一个内置功能可解决此类问题。
谢谢你的帮助,
斯文
最佳答案
您可能正在查看approx()
和approxfun()
...,或者我想您可以将lm
用于线性拟合,将lowess
用于非参数拟合。
关于r - R中的线性插值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6720890/