Какой пакет R / Python для кусочно-сегментированной регрессии с автоматическим обнаружением точки останова - PullRequest
0 голосов
/ 08 мая 2020

Я ищу пакеты R / Python, которые могут выполнять сегментированную регрессию с автоматическим обнаружением точки останова, сообщать о линейных сегментах и ​​автоматически определять коэффициенты (наклон / пересечение) линейных сегментов. Я бы предпочел пакеты R, но подойдут и Python 2.7 / 3.X. Мои данные похожи на pi c, но содержат сотни таких наборов данных. enter image description here Спасибо

1 Ответ

1 голос
/ 11 мая 2020

Здесь есть некоторые обзоры пакетов пунктов обмена здесь и здесь . Хотя пакет 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")

enter image description here

Теперь определение уклонов - это просто вопрос обхода точек изменения и расчета наклона каждого сегмента.

...