Me pregunto si me estoy perdiendo algo obvio, pero ¿no podrías hacer esto estadísticamente usando ANCOVA? Una cuestión importante es que las pendientes en las dos regresiones se estiman con error. Son estimaciones de las pendientes en las poblaciones en general. Si la preocupación es si las dos líneas de regresión son paralelas o no en la población, entonces no tiene sentido comparar con directamente para obtener la equivalencia exacta; Ambos están sujetos a errores / incertidumbres que deben tenerse en cuenta.a 2una1una2
Si pensamos en esto desde un punto de vista estadístico, y podemos combinar los datos en e para ambos conjuntos de datos de alguna manera significativa (es decir, e en ambos conjuntos se extraen de las dos poblaciones con rangos similares para los dos variables es solo la relación entre ellas que son diferentes en las dos poblaciones), entonces podemos ajustar los siguientes dos modelos:y x yXyxy
y^=b0+b1x+b2g
y
y^=b0+b1x+b2g+b3xg
Donde son los coeficientes del modelo, es una variable / factor de agrupación, que indica a qué conjunto de datos pertenece cada observación. gbig
Podemos usar una tabla ANOVA o una relación F para probar si el segundo modelo más complejo se ajusta mejor a los datos que el modelo más simple. El modelo más simple establece que las pendientes de las dos líneas son las mismas ( ) pero las líneas están desplazadas entre sí por una cantidad .b 2b1b2
El modelo más complejo incluye una interacción entre la pendiente de la línea y la variable de agrupación. Si el coeficiente para este término de interacción es significativamente diferente de cero o la relación ANOVA / F indica que el modelo más complejo se ajusta mejor a los datos, entonces debemos rechazar la hipótesis nula de que dos líneas son paralelas.
Aquí hay un ejemplo en R usando datos ficticios. Primero, datos con pendientes iguales:
set.seed(2)
samp <- factor(sample(rep(c("A","B"), each = 50)))
d1 <- data.frame(y = c(2,5)[as.numeric(samp)] + (0.5 * (1:100)) + rnorm(100),
x = 1:100,
g = samp)
m1 <- lm(y ~ x * g, data = d1)
m1.null <- lm(y ~ x + g, data = d1)
anova(m1.null, m1)
Lo que da
> anova(m1.null, m1)
Analysis of Variance Table
Model 1: y ~ x + g
Model 2: y ~ x * g
Res.Df RSS Df Sum of Sq F Pr(>F)
1 97 122.29
2 96 122.13 1 0.15918 0.1251 0.7243
Indicando que no podemos rechazar la hipótesis nula de pendientes iguales en esta muestra de datos. Por supuesto, quisiéramos asegurarnos de que teníamos el poder suficiente para detectar una diferencia si realmente existiera, de modo que no se nos condujera a fallar erróneamente en rechazar el valor nulo porque nuestro tamaño de muestra era demasiado pequeño para el efecto esperado.
Ahora con diferentes pendientes.
set.seed(42)
x <- seq(1, 100, by = 2)
d2 <- data.frame(y = c(2 + (0.5 * x) + rnorm(50),
5 + (1.5 * x) + rnorm(50)),
x = x,
g = rep(c("A","B"), each = 50))
m2 <- lm(y ~ x * g, data = d2)
m2.null <- lm(y ~ x + g, data = d2)
anova(m2.null, m2)
Lo que da:
> anova(m2.null, m2)
Analysis of Variance Table
Model 1: y ~ x + g
Model 2: y ~ x * g
Res.Df RSS Df Sum of Sq F Pr(>F)
1 97 21132.0
2 96 103.8 1 21028 19439 < 2.2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Aquí tenemos evidencia sustancial contra la hipótesis nula y, por lo tanto, podemos rechazarla a favor de la alternativa (en otras palabras, rechazamos la hipótesis de que las pendientes de las dos líneas sean iguales).
Los términos de interacción en los dos modelos que ( ) dan la diferencia estimada en pendientes para los dos grupos. Para el primer modelo, la estimación de la diferencia en pendientes es pequeña (~ 0.003)b3xg
> coef(m1)
(Intercept) x gB x:gB
2.100068977 0.500596394 2.659509181 0.002846393
y una prueba sobre esto no podría rechazar la hipótesis nula de que esta diferencia en pendientes es 0:t
> summary(m1)
Call:
lm(formula = y ~ x * g, data = d1)
Residuals:
Min 1Q Median 3Q Max
-2.32886 -0.81224 -0.01569 0.93010 2.29984
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 2.100069 0.334669 6.275 1.01e-08 ***
x 0.500596 0.005256 95.249 < 2e-16 ***
gB 2.659509 0.461191 5.767 9.82e-08 ***
x:gB 0.002846 0.008047 0.354 0.724
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 1.128 on 96 degrees of freedom
Multiple R-squared: 0.9941, Adjusted R-squared: 0.9939
F-statistic: 5347 on 3 and 96 DF, p-value: < 2.2e-16
Si recurrimos al modelo ajustado al segundo conjunto de datos, donde diferenciamos las pendientes de los dos grupos, vemos que la diferencia estimada en las pendientes de las dos líneas es de ~ 1 unidad.
> coef(m2)
(Intercept) x gB x:gB
2.3627432 0.4920317 2.8931074 1.0048653
La pendiente para el grupo "A" es ~ 0.49 ( x
en la salida anterior), mientras que para obtener la pendiente para el grupo "B" necesitamos agregar las pendientes de diferencia (dadas por el término de interacción recordar) a la pendiente del grupo "A" ; ~ 0.49 + ~ 1 = ~ 1.49. Esto está bastante cerca de la pendiente indicada para el grupo "B" de 1.5. Una prueba en esta diferencia de pendientes también indica que la estimación de la diferencia está limitada desde 0:t
> summary(m2)
Call:
lm(formula = y ~ x * g, data = d2)
Residuals:
Min 1Q Median 3Q Max
-3.1962 -0.5389 0.0373 0.6952 2.1072
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 2.362743 0.294220 8.031 2.45e-12 ***
x 0.492032 0.005096 96.547 < 2e-16 ***
gB 2.893107 0.416090 6.953 4.33e-10 ***
x:gB 1.004865 0.007207 139.424 < 2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 1.04 on 96 degrees of freedom
Multiple R-squared: 0.9994, Adjusted R-squared: 0.9994
F-statistic: 5.362e+04 on 3 and 96 DF, p-value: < 2.2e-16
La primera pregunta es en realidad de la geometría. Si tiene dos líneas del formulario:
y = a 2 x + b 2
entonces son paralelos si . Entonces, si las pendientes son iguales, entonces las líneas son paralelas.a1=a2
Para la segunda pregunta, use el hecho de que , donde es el ángulo que forma la línea con el eje , y es la pendiente de la línea. Entonces α x a 1tanα=a1 α x a1
y para convertir a grados, recuerde que . Entonces la respuesta en los grados será2π=360
Se llama a la función R para .arctan
atan
Código R de muestra:
La última línea son los grados.
Actualizar. Para los valores de pendiente negativos, la conversión a grados debe seguir una regla diferente. Tenga en cuenta que el ángulo con el eje x puede obtener valores de 0 a 180, ya que suponemos que el ángulo está por encima del eje x. Entonces, para valores negativos de , la fórmula es:a1
Nota. Si bien fue divertido para mí recordar la trigonometría de la escuela secundaria, la respuesta realmente útil es la que dio Gavin Simpson. Dado que las pendientes de las líneas de regresión son variables aleatorias, para compararlas se debe utilizar el marco de hipótesis estadística.
fuente
... siguiendo la respuesta de @mpiktas, así es como extraería la pendiente de un
lm
objeto y aplicaría la fórmula anterior.fuente