Regresión por partes con R: trazar los segmentos

Tengo 54 puntos. Representan la oferta y la demanda de productos. Me gustaría mostrar que hay un punto de quiebre en la oferta.

Primero, ordeno el eje x (oferta) y elimino los valores que aparecen dos veces. Tengo 47 valores, pero elimino el primero y el último (no tiene sentido considerarlos como puntos de ruptura). El descanso es de longitud 45:

Break<-(sort(unique(offer))[2:46])

uego, para cada uno de estos puntos de ruptura potenciales, calculo un modelo y mantengo en "d" el error estándar residual (sexto elemento en el objeto de resumen del modelo).

d<-numeric(45)
for (i in 1:45) {
model<-lm(demand~(offer<Break[i])*offer + (offer>=Break[i])*offer)
d[i]<-summary(model)[[6]] }

Plotting d, noto que mi error estándar residual más pequeño es 34, que corresponde a "Break [34]": 22.4. Entonces escribo mi modelo con mi punto de ruptura final:

model<-lm(demand~(offer<22.4)*offer + (offer>=22.4)*offer)

Finalmente, estoy contento con mi nuevo modelo. Es significativamente mejor que el lineal simple. Y quiero dibujarlo:

plot(demand~offer)
i <- order(offer)
lines(offer[i], predict(model,list(offer))[i])

Pero tengo un mensaje de advertencia:

Warning message:
In predict.lm(model, list(offer)) :
  prediction from a rank-deficient fit may be misleading

Y más importante, las líneas son realmente extrañas en mi trama.

Aquí están mis datos:

demand <- c(1155, 362, 357, 111, 703, 494, 410, 63, 616, 468, 973, 235,
            180, 69, 305, 106, 155, 422, 44, 1008, 225, 321, 1001, 531, 143,
            251, 216, 57, 146, 226, 169, 32, 75, 102, 4, 68, 102, 462, 295,
            196, 50, 739, 287, 226, 706, 127, 85, 234, 153, 4, 373, 54, 81,
            18)
offer <- c(39.3, 23.5, 22.4, 6.1, 35.9, 35.5, 23.2, 9.1, 27.5, 28.6, 41.3,
           16.9, 18.2, 9, 28.6, 12.7, 11.8, 27.9, 21.6, 45.9, 11.4, 16.6,
           40.7, 22.4, 17.4, 14.3, 14.6, 6.6, 10.6, 14.3, 3.4, 5.1, 4.1,
           4.1, 1.7, 7.5, 7.8, 22.6, 8.6, 7.7, 7.8, 34.7, 15.6, 18.5, 35,
           16.5, 11.3, 7.7, 14.8, 2, 12.4, 9.2, 11.8, 3.9)

Respuestas a la pregunta(6)

Su respuesta a la pregunta