たとえば、次のような実際のデータのデータセットがあります。
_# 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")
_
どうすればこれを実現できますか?手動で、値ごとに次のようにします。
Xsmall
よりも小さいXlarge
に最も近いX値と大きいX
に最も近いX値は何ですか。relPos = (X - Xsmall) / (Xlarge - Xsmall)
Yexp = Ysmall + (relPos * (Ylarge - Ysmall))
少なくともソフトウェアMatlabについては、そのような問題のための組み込み関数があると聞きました。
ご協力いただきありがとうございます、
スヴェン
approx()
とapproxfun()
...を見ることができます。または、線形近似の場合はlm
、ノンパラメトリック近似の場合はlowess
で近似できると思います。 。
DWinの回答をフォローアップするために、線形モデルを使用して予測値を取得する方法を次に示します。
model.lm <- lm(y ~ x, data = known)
# Use predict to estimate the values for aim.
# Note that predict expects a data.frame and the col
# names need to match
newY <- predict(model.lm, newdata = data.frame(x = aim))
#Add the predicted points to the original plot
points(aim, newY, col = "red")
そしてもちろん、これらの予測値を直接取得することもできます。
> cbind(aim, newY)
aim newY
1 0.3 2.4500000
2 0.7 6.1928571
3 2.3 21.1642857
....