5つの(x、y)データポイントがあり、ポイント(x0、y0)で交差し、次の方程式に従う2本の線で構成される最適なソリューションを見つけようとしています。
y1 = (m1)(x1 - x0) + y0
y2 = (m2)(x2 - x0) + y0
具体的には、x=2とx=3の間で交差が発生する必要があります。コードを見てください:
#Initialize x1, y1, x2, y2
x1 <- c(1,2)
y1 <- c(10,10)
x2 <- c(3,4,5)
y2 <- c(20,30,40)
g <- c(TRUE, TRUE, FALSE, FALSE, FALSE)
q <- nls(c(y1, y2) ~ ifelse(g == TRUE, m1 * (x1 - x0) + y0, m2 * (x2 - x0) + y0), start = c(m1 = -1, m2 = 1, y0 = 0, x0 = 2), algorithm = "port", lower = c(m1 = -Inf, m2 = -Inf, y0 = -Inf, x0 = 2), upper = c(m1 = Inf, m2 = Inf, y0 = Inf, x0 = 3))
coef <- coef(q)
m1 <- coef[1]
m2 <- coef[2]
y0 <- coef[3]
x0 <- coef[4]
#Plot the original x1, y1, and x2, y2
plot(x1,y1,xlim=c(1,5),ylim=c(0,50))
points(x2,y2)
#Plot the fits
x1 <- c(1,2,3,4,5)
fit1 <- m1 * (x1 - x0) + y0
lines(x1, fit1, col="red")
x2 <- c(1,2,3,4,5)
fit2 <- m2 * (x2 - x0) + y0
lines(x2, fit2, col="blue")
したがって、そこにリストされているデータポイントを確認できます。次に、nlsを実行し、パラメーター、、、(m1
勾配、および交点)を取得します。m2
x0
y0
しかし、解決策を見てください:
明らかに、赤い線(最初の2つのポイントのみに基づいていると想定されています)は、最初の2つのポイントに最適な線ではありません。これは、最後の3つのポイントに依存するはずの青い線(2番目のフィット)の場合と同じです。ここで何が問題になっていますか?