Линейная интерполяция в R

У меня есть набор реальных данных, например, выглядящий так:

# 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")

Как я могу это реализовать? Вручную я бы сделал для каждого значения примерно следующее:

  1. Какое ближайшее значение X меньше Xsmall , а ближайшее значение X больше Xlarge , чем текущее значение X X .
  2. Вычислить относительное положение по отношению к меньшему значению X relPos = (X - Xsmall) / (Xlarge - Xsmall)
  3. Вычислить ожидаемое значение Y Yexp = Ysmall + (relPos * (Ylarge - Ysmall))

По крайней мере, для программного обеспечения Matlab я слышал, что есть встроенная функция для решения таких проблем.

Спасибо за вашу помощь,

Sven

16
задан Frank Schmitt 22 April 2014 в 12:42
поделиться