Estou tentando implementar uma análise de "ponto de mudança" ou uma regressão multifásica usando nls()
em R.
Aqui estão alguns dados falsos que eu criei . A fórmula que eu quero usar para ajustar os dados é:
O que isso deve fazer é ajustar os dados até um certo ponto com uma certa interceptação e inclinação ( e ), depois de um certo valor x ( ), aumente a inclinação em . É disso que se trata a coisa toda. Antes do ponto , será igual a 0 e \ beta_2 será zerado.
Então, aqui está minha função para fazer isso:
changePoint <- function(x, b0, slope1, slope2, delta){
b0 + (x*slope1) + (max(0, x-delta) * slope2)
}
E eu tento encaixar o modelo dessa maneira
nls(y ~ changePoint(x, b0, slope1, slope2, delta),
data = data,
start = c(b0 = 50, slope1 = 0, slope2 = 2, delta = 48))
Eu escolhi esses parâmetros de partida, porque eu sei que esses são os parâmetros de partida, porque criei os dados.
No entanto, eu recebo este erro:
Error in nlsModel(formula, mf, start, wts) :
singular gradient matrix at initial parameter estimates
Acabei de criar dados infelizes? Tentei ajustar isso com dados reais primeiro e estava recebendo o mesmo erro e concluí que meus parâmetros de inicialização iniciais não eram bons o suficiente.
fonte
Só queria acrescentar que você pode fazer isso com muitos outros pacotes. Se você deseja obter uma estimativa da incerteza em torno do ponto de mudança (algo que o nls não pode fazer), tente o
mcp
pacote.Vamos plotá-lo com um intervalo de previsão (linha verde). A densidade azul é a distribuição posterior para o local do ponto de mudança:
Você pode inspecionar parâmetros individuais em mais detalhes usando
plot_pars(fit)
esummary(fit)
.fonte