Estoy tratando de implementar un análisis de "punto de cambio" o una regresión multifásica usando nls()
en R.
Aquí hay algunos datos falsos que he hecho . La fórmula que quiero usar para ajustar los datos es:
Lo que se supone que debe hacer es ajustar los datos hasta cierto punto con una cierta intersección y pendiente ( y ), luego, después de cierto valor de x ( ), aumente la pendiente en . De eso se trata toda la cuestión de max. Antes del punto , será igual a 0 y se pondrá a cero.β 1 δ β 2 δ β 2
Entonces, aquí está mi función para hacer esto:
changePoint <- function(x, b0, slope1, slope2, delta){
b0 + (x*slope1) + (max(0, x-delta) * slope2)
}
Y trato de ajustar el modelo de esta manera
nls(y ~ changePoint(x, b0, slope1, slope2, delta),
data = data,
start = c(b0 = 50, slope1 = 0, slope2 = 2, delta = 48))
Elegí esos parámetros iniciales, porque sé que esos son los parámetros iniciales, porque hice los datos.
Sin embargo, me sale este error:
Error in nlsModel(formula, mf, start, wts) :
singular gradient matrix at initial parameter estimates
¿Acabo de hacer datos desafortunados? Primero intenté ajustar esto en datos reales, y estaba obteniendo el mismo error, y me di cuenta de que mis parámetros iniciales no eran lo suficientemente buenos.
fuente
Solo quería agregar que puede hacer esto con muchos otros paquetes. Si desea obtener una estimación de la incertidumbre en torno al punto de cambio (algo que nls no puede hacer), pruebe el
mcp
paquete.Tracemos con un intervalo de predicción (línea verde). La densidad azul es la distribución posterior para la ubicación del punto de cambio:
Puede inspeccionar parámetros individuales con más detalle utilizando
plot_pars(fit)
ysummary(fit)
.fuente