R:散点图中的 Elbow/knee 点

R: Elbow/knee points in Scatterplot

我需要用 R 识别曲线中的两个肘点。该曲线不是真正的曲线,而是由三个线性函数组成。线性函数本身是未知的。我已经尝试过不同的方法,但其中 none 能够识别出正确的点。 有人知道解决方案吗?

您可以查看直线的斜率,看看它在哪里发生变化:

fake <- data.frame(x = c(1:9, 10*1:5, 50*2:5),
                   y = c(10:2, 0.1*10:6, 0.01*59:56))
plot(fake)

# diff compares each value to the prior row. Undefined for first row so I add NA at the start
fake$slope = c(NA, diff(fake$y)/diff(fake$x))
fake$slope_chg = c(NA, round(diff(fake$slope),5))
fake$change = ifelse(fake$slope_chg != 0, "change","")

结果

     x     y  slope slope_chg change
1    1 10.00     NA        NA   <NA>
2    2  9.00 -1e+00        NA   <NA>
3    3  8.00 -1e+00    0.0000       
4    4  7.00 -1e+00    0.0000       
5    5  6.00 -1e+00    0.0000       
6    6  5.00 -1e+00    0.0000       
7    7  4.00 -1e+00    0.0000       
8    8  3.00 -1e+00    0.0000       
9    9  2.00 -1e+00    0.0000       
10  10  1.00 -1e+00    0.0000       
11  20  0.90 -1e-02    0.9900 change
12  30  0.80 -1e-02    0.0000       
13  40  0.70 -1e-02    0.0000       
14  50  0.60 -1e-02    0.0000       
15 100  0.59 -2e-04    0.0098 change
16 150  0.58 -2e-04    0.0000       
17 200  0.57 -2e-04    0.0000       
18 250  0.56 -2e-04    0.0000