Я пытаюсь реализовать анализ "точки изменения" или многофазную регрессию с использованием nls()
R.
Вот некоторые фальшивые данные, которые я сделал . Формула, которую я хочу использовать, чтобы соответствовать данным:
Предполагается, что это должно соответствовать данным до определенной точки с определенным пересечением и наклоном ( \ beta_0 и ), а затем, после определенного значения x ( ), увеличить наклон на . Вот о чем вся эта вещь. Перед точкой она будет равна 0, а будет обнулен.
Итак, вот моя функция, чтобы сделать это:
changePoint <- function(x, b0, slope1, slope2, delta){
b0 + (x*slope1) + (max(0, x-delta) * slope2)
}
И я пытаюсь подобрать модель таким образом
nls(y ~ changePoint(x, b0, slope1, slope2, delta),
data = data,
start = c(b0 = 50, slope1 = 0, slope2 = 2, delta = 48))
Я выбрал эти начальные параметры, потому что я знаю, что это начальные параметры, потому что я составил данные.
Тем не менее, я получаю эту ошибку:
Error in nlsModel(formula, mf, start, wts) :
singular gradient matrix at initial parameter estimates
Я только что сделал неудачные данные? Сначала я попытался подстроить это под реальные данные, и получил ту же ошибку, и я просто подумал, что мои начальные начальные параметры не были достаточно хорошими.
источник
Просто хотел добавить, что вы можете сделать это со многими другими пакетами. Если вы хотите получить оценку неопределенности относительно точки изменения (чего не может сделать nls), попробуйте
mcp
пакет.Давайте построим это с интервалом предсказания (зеленая линия). Синяя плотность - это заднее распределение местоположения точки изменения:
Вы можете проверить отдельные параметры более подробно, используя
plot_pars(fit)
иsummary(fit)
.источник