Error estándar de pendientes en regresión lineal por partes con puntos de corte conocidos

9

La situación

Tengo un conjunto de datos con una dependiente una variable independiente . Quiero ajustar una regresión lineal continua por partes con puntos de interrupción conocidos / fijos que ocurren en . Los breakpoins se conocen sin incertidumbre, por lo que no quiero estimarlos. Luego ajusto una regresión (OLS) de la forma Aquí hay un ejemplo enyk ( a 1 , a 2 , , a k ) y i = β 0 + β 1 x i + β 2 max ( x i - a 1 , 0 ) + β 3 max ( x i - a 2 , 0 ) + + Β k + 1 máx. ( X ixk(a1,a2,,ak)

yi=β0+β1xi+β2max(xia1,0)+β3max(xia2,0)++βk+1max(xiak,0)+ϵi
R
set.seed(123)
x <- c(1:10, 13:22)
y <- numeric(20)
y[1:10] <- 20:11 + rnorm(10, 0, 1.5)
y[11:20] <- seq(11, 15, len=10) + rnorm(10, 0, 2)

Supongamos que el punto de interrupción ocurre en : 9.6k19.6

mod <- lm(y~x+I(pmax(x-9.6, 0)))
summary(mod)

Coefficients:
                    Estimate Std. Error t value Pr(>|t|)    
(Intercept)          21.7057     1.1726  18.511 1.06e-12 ***
x                    -1.1003     0.1788  -6.155 1.06e-05 ***
I(pmax(x - 9.6, 0))   1.3760     0.2688   5.120 8.54e-05 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

La intersección y la pendiente de los dos segmentos son: y para el primero y y para el segundo, respectivamente.- 1,1 8,5 0,2721.71.18.50.27

Punto de interrupción


Preguntas

  1. ¿Cómo calcular fácilmente la intersección y la pendiente de cada segmento? ¿Se puede reparemetrizar el modelo para hacer esto en un cálculo?
  2. ¿Cómo calcular el error estándar de cada pendiente de cada segmento?
  3. ¿Cómo probar si dos pendientes adyacentes tienen las mismas pendientes (es decir, si se puede omitir el punto de ruptura)?
COOLSerdash
fuente

Respuestas:

7
  1. ¿Cómo calcular fácilmente la intersección y la pendiente de cada segmento?

La pendiente de cada segmento se calcula simplemente sumando todos los coeficientes hasta la posición actual. Por lo que la estimación de la pendiente en es .- 1.1003 + 1.3760 = 0.2757x=151.1003+1.3760=0.2757

La intersección es un poco más difícil, pero es una combinación lineal de coeficientes (que implican los nudos).

En su ejemplo, la segunda línea se encuentra con la primera en , por lo que el punto rojo está en la primera línea en . Dado que la segunda línea pasa por el punto con pendiente , su intersección es . Por supuesto, puede juntar esos pasos y se simplifica hasta la intersección para el segundo segmento = .21.7057 - 1.1003 × 9.6 = 11.1428 ( 9.6 , 11.428 ) 0.2757 11.1428 - 0.2757 × 9.6 = 8.496 β 0 - β 2 k 1 = 21.7057 - 1.3760 × 9.6x=9.621.70571.1003×9.6=11.1428(9.6,11.428)0.275711.14280.2757×9.6=8.496β0β2k1=21.70571.3760×9.6

¿Se puede volver a parametrizar el modelo para hacer esto en un cálculo?

Bueno, sí, pero probablemente sea más fácil en general calcularlo a partir del modelo.

2. ¿Cómo calcular el error estándar de cada pendiente de cada segmento?

Dado que la estimación es una combinación lineal de coeficientes de regresión , donde consta de 1 y 0, la varianza es . El error estándar es la raíz cuadrada de esa suma de términos de varianza y covarianza. una un Var ( β ) unaaβ^aaVar(β^)a

Por ejemplo, en su ejemplo, el error estándar de la pendiente del segundo segmento es:

Sb <- vcov(mod)[2:3,2:3]
sqrt(sum(Sb))

alternativamente en forma matricial:

Sb <- vcov(mod)
a <- matrix(c(0,1,1),nr=3)
sqrt(t(a) %*% Sb %*% a)

3. ¿Cómo probar si dos pendientes adyacentes tienen las mismas pendientes (es decir, si se puede omitir el punto de ruptura)?

Esto se prueba observando el coeficiente en la tabla de ese segmento. Ver esta línea:

I(pmax(x - 9.6, 0))   1.3760     0.2688   5.120 8.54e-05 ***

Ese es el cambio de pendiente en 9.6. Si ese cambio es diferente de 0, las dos pendientes no son las mismas. Entonces, el valor p para una prueba de que el segundo segmento tiene la misma pendiente que el primero está justo al final de esa línea.

Glen_b -Reinstate a Monica
fuente
(+1) Gracias Glen por tu respuesta. Solo una pequeña pregunta con respecto al n. ° 2: en mi ejemplo, necesitaría la matriz de varianza-covarianza de xy I(pmax(x-9.6,0)), ¿es correcto?
COOLSerdash
No. He editado un ejemplo explícito basado en tu ejemplo. Si desea más detalles, por favor pregunte.
Glen_b -Reinstate a Monica el
Muchas gracias por la edición, eso me aclara bastante. Entonces, ¿entiendo eso correctamente: el error estándar es el mismo para cada pendiente?
COOLSerdash
1
No. El procedimiento es el mismo pero el valor no lo es. El error estándar de la pendiente del primer segmento está en su tabla de regresión (0.1788). El error estándar de la pendiente del segundo segmento es 0.1160. Si tuviéramos un tercer segmento, implicaría más términos de varianza-covarianza en su suma (antes de tomar la raíz cuadrada).
Glen_b -Reinstate a Monica el
6

Mi enfoque ingenuo, que responde a la pregunta 1:

mod2 <- lm(y~I((x<9.6)*x)+as.numeric((x<9.6))+
             I((x>=9.6)*x)+as.numeric((x>=9.6))-1)
summary(mod2)

#                        Estimate Std. Error t value Pr(>|t|)    
# I((x < 9.6) * x)        -1.1040     0.2328  -4.743 0.000221 ***
# as.numeric((x < 9.6))   21.7188     1.3099  16.580 1.69e-11 ***
# I((x >= 9.6) * x)        0.2731     0.1560   1.751 0.099144 .  
# as.numeric((x >= 9.6))   8.5442     2.6790   3.189 0.005704 ** 

Pero no estoy seguro de si las estadísticas (en particular, los grados de libertad) se realizan correctamente, si lo hace de esta manera.

Roland
fuente
(+1) Muchas gracias por tu respuesta. Proporciona una manera muy conveniente de calcular directamente las intersecciones y pendientes, ¡gracias!
COOLSerdash