找出两个线性拟合在R中相交的位置

我有两个线性拟合,我从我的R脚本中的lm调用中获得.例如…

fit1 <- lm(y1 ~ x1)
fit2 <- lm(y2 ~ x2)

我想找到这两条线(fit1和fit2)相交的(x,y)点,如果它们相交的话.

避免几何的一种方法是将方程重新参数化为:

y1 = m1 * (x1 - x0) + y0
y2 = m2 * (x2 - x0) + y0

在它们的交点(x0,y0)方面,然后使用nls一次执行两者的拟合,以便返回的x0和y0值给出结果:

# test data
set.seed(123)
x1 <- 1:10
y1 <- -5 + x1 + rnorm(10)
x2 <- 1:10
y2 <- 5 - x1 + rnorm(10)
g <- rep(1:2, each = 10) # first 10 are from x1,y1 and second 10 are from x2,y2

xx <- c(x1, x2)
yy <- c(y1, y2)
nls(yy ~ ifelse(g == 1, m1 * (xx - x0) + y0, m2 * (xx - x0) + y0),
    start = c(m1 = -1, m2 = 1, y0 = 0, x0 = 0))

编辑:请注意,行xx< -...和yy< -...是新的,并且已经根据这些行指定了nls行并进行了修正.

相关文章
相关标签/搜索