У меня есть набор реальных данных, например, выглядящий так:
# 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")
Теперь я хочу получить ответ на вопрос «Каким было бы значение Y для 0,3, если бы все промежуточные точки данных исходного набора данных были на прямой линии между окружающими измеренными значениями?»
# 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")
Как я могу это реализовать? Вручную я бы сделал для каждого значения примерно следующее:
Xsmall
, а ближайшее значение X больше Xlarge
, чем текущее значение X X
. relPos = (X - Xsmall) / (Xlarge - Xsmall)
Yexp = Ysmall + (relPos * (Ylarge - Ysmall))
По крайней мере, для программного обеспечения Matlab я слышал, что есть встроенная функция для решения таких проблем.
Спасибо за вашу помощь,
Sven