Gostaria de saber se estou perdendo algo óbvio, mas você não poderia fazer isso estatisticamente usando ANCOVA? Uma questão importante é que as inclinações nas duas regressões são estimadas com erro. São estimativas das inclinações nas populações em geral. Se a preocupação é se as duas linhas de regressão são paralelas ou não na população , não faz sentido comparar a1 com a2 diretamente para obter a equivalência exata; ambos estão sujeitos a erros / incertezas que precisam ser levados em consideração.
Se pensamos sobre este a partir de um ponto de vista estatístico, e podemos combinar os dados sobre a e y para os dois conjuntos de dados em alguma maneira significativa (isto é, x e y em ambos os conjuntos são retirados das duas populações com gamas semelhantes para os dois variáveis, é apenas o relacionamento entre elas que é diferente nas duas populações), então podemos ajustar os dois modelos a seguir:xyxy
y^= b0 0+ b1 1x+ b2g
e
y^= b0 0+ b1 1x + b2g+ b3x g
Onde são os coeficientes do modelo e g é uma variável / fator de agrupamento, indicando a qual conjunto de dados cada observação pertence.bEug
Podemos usar uma tabela ANOVA ou razão F para testar se o segundo modelo mais complexo se ajusta melhor aos dados que o modelo mais simples. O modelo mais simples afirma que as inclinações das duas linhas são iguais ( ), mas as linhas são deslocadas uma da outra por uma quantidade b 2 .b1 1b2
O modelo mais complexo inclui uma interação entre a inclinação da linha e a variável de agrupamento. Se o coeficiente para esse termo de interação for significativamente diferente de zero ou a razão ANOVA / F indicar que o modelo mais complexo se ajusta melhor aos dados, devemos rejeitar a hipótese nula de que duas linhas são paralelas.
Aqui está um exemplo em R usando dados fictícios. Primeiro, dados com inclinações iguais:
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)
Que dá
> 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 falhamos em rejeitar a hipótese nula de declives iguais nesta amostra de dados. Obviamente, gostaríamos de garantir que tivéssemos poder suficiente para detectar uma diferença, se realmente houvesse uma, para não sermos levados a falhar erroneamente em rejeitar o nulo, porque o tamanho da amostra era muito pequeno para o efeito esperado.
Agora com diferentes declives.
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)
Que dá:
> 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
Aqui temos evidências substanciais contra a hipótese nula e, portanto, podemos rejeitá-la em favor da alternativa (em outras palavras, rejeitamos a hipótese de que as inclinações das duas linhas são iguais).
b3x g
> coef(m1)
(Intercept) x gB x:gB
2.100068977 0.500596394 2.659509181 0.002846393
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
Se voltarmos para o modelo ajustado ao segundo conjunto de dados, onde diferimos as inclinações para os dois grupos, veremos que a diferença estimada nas inclinações das duas linhas é de ~ 1 unidade.
> coef(m2)
(Intercept) x gB x:gB
2.3627432 0.4920317 2.8931074 1.0048653
x
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
A primeira pergunta é realmente da geometria. Se você tiver duas linhas do formulário:
atan
Código R de amostra:
A última linha são os graus.
Nota. Embora tenha sido divertido me lembrar da trigonometria do ensino médio, a resposta realmente útil é a de Gavin Simpson. Como as inclinações das linhas de regressão são variáveis aleatórias, para compará-las, deve-se usar a estrutura de hipóteses estatísticas.
fonte
... acompanhando a resposta do @mpiktas, veja como você extrairia a inclinação de um
lm
objeto e aplicaria a fórmula acima.fonte