Здесь есть некоторые обзоры пакетов пунктов обмена здесь и здесь . Хотя пакет segmented
весьма эффективен и широко используется, он не моделирует изменения перехвата, даже когда «ему сказали», так что будьте осторожны с этим.
Однако ваши данные кажутся настолько регулярными, что нет Пакеты логических выводов необходимы для обнаружения точек изменения, а значит, и для наклонов. Точки изменения - это просто значения x, при которых y больше предыдущего y. Если x
- ваши x-координаты, а y
- ваши y-координаты:
cps = x[which(y > dplyr::lag(y, 1))]
Чтобы проиллюстрировать, я смоделировал некоторые данные, чтобы они выглядели как ваши, и нанесите точки изменения сверху с помощью красных линий:
# Simulate data
thresh = 6.95
x = seq(0, 1.5, by = 0.01)
y = c(6.98) # starting
for (i in seq(length.out = length(x) - 1)) {
y = c(y, y[i] -0.005)
if (y[i+1] < thresh) {
y[i+1] = y[i+1] + rnorm(1, 0.04, 0.01)
}
}
# Detect change points and plot them
cps = x[which(y > dplyr::lag(y, 1))]
plot(x, y, type = "l")
abline(v = cps, col = "red")
Теперь определение уклонов - это просто вопрос обхода точек изменения и расчета наклона каждого сегмента.