7 votos

¿Modelo de palo roto en R donde una línea tiene un gradiente constante?

Actualmente estoy utilizando el paquete (lme4) para un modelo de efectos mixtos con efectos aleatorios.

Mi modelo tiene la forma:

mod <- lmer(response ~ b1(predict1, bp) + b2(predict2, bp) + (1 | site), data = data)

Las funciones b1 y b2 provienen de los útiles consejos de:

Estimación del punto de ruptura en un modelo lineal roto / a trozos con efectos aleatorios en R [código y salida incluidos]

b1 <- function(x, bp) ifelse(x < bp, bp - x, 0)
b2 <- function(x, bp) ifelse(x < bp, 0, x - bp)

Me pregunto, ¿cómo podría configurar mi modelo para que la segunda parte (línea) del modelo de palo roto tenga un gradiente constante?

Así que, por ejemplo, me gustaría algo así:

Si X < punto de ruptura, Y = m1X + C1

Si X > punto de ruptura, Y = C2

Espero que tenga sentido.

Matt.

2voto

Udo G Puntos 121

Puede que haya encontrado una solución a mi problema, pero ¿podría alguien confirmar lo que he hecho?

He modificado ligeramente las funciones anteriores b1 y b2. Las he llamado b3 y b4:

b3 <- function(x, bp) ifelse(x < bp, bp - x, 0)   #Y = mx + c
b4 <- function(x, bp) ifelse(x < bp, 0, 1)        #Y = C

El modelo mixto es similar, pero se utilizan b3 y b4:

mod2 <- lmer(SIGNAL ~ b3(dci, bp) + b4(dci,bp) + (1 | gauge), data = cand_bug_data)

1voto

Marcin Puntos 198

Veo que tu post es bastante antiguo, pero estoy trabajando en el mismo problema - y he encontrado una solución ligeramente diferente a la tuya pensé que iba a publicar para otros por ahí.

b1 <- function(x, bp) ifelse(x < bp, x, bp)

#Wrapper for Mixed effects model with variable break point
foo <- function(bp)
 {
   mod <- lmer(y ~ b1(x, bp) + (1|Site), data = dat) 
   REMLcrit(mod)
 }

mod <- lmer(y ~ b1(x, bp) + (1 | Site),  data = dat)

Y todo lo demás como aparece en el post original

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X