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