Будет ли использование nls()
(нелинейных наименьших квадратов) решить вашу проблему?Я использовал формулировку, аналогичную этой, добавив операторы True / False для каждого «куска»:
reg = nls( y ~ (Z < 0.33) * a + (Z < 0.33) * Z * b +
(Z >= 0.33 & Z < 0.67) * Z ^ a2 +
(Z >= 0.67) * a3 + (Z >= 0.67) * Z * a4,
start = list(a = 0, b = 50, a2 = 100, a3 = 150, a4 = 80),
data = yourdata)
В приведенном выше стилизованном примере точки останова находятся при Z = 0,33 и Z = 0,67.Если вы можете более конкретно указать код трех регрессий по отдельности, я могу сделать свой ответ более конкретным.