Como calcular se minha regressão linear tem uma diferença estatisticamente significativa de uma linha teórica conhecida?


14

Eu tenho alguns dados que se ajustam ao longo de uma linha aproximadamente linear:

insira a descrição da imagem aqui

Quando faço uma regressão linear desses valores, obtenho uma equação linear:

y=0.997x0.0136

Em um mundo ideal, a equação deve ser y=x .

Claramente, meus valores lineares estão próximos desse ideal, mas não exatamente. Minha pergunta é: como posso determinar se esse resultado é estatisticamente significativo?

O valor de 0,997 é significativamente diferente de 1? -0,01 é significativamente diferente de 0? Ou eles são estatisticamente iguais e posso concluir que y=x com algum nível de confiança razoável?

O que é um bom teste estatístico que posso usar?

obrigado


1
Você pode calcular se há ou não uma diferença estatisticamente significativa, mas observe que isso não significa se não há diferença. Você só pode ter certeza do significado ao falsificar a hipótese nula, mas quando você não falsifica a hipótese nula, isso pode ser (1) de fato a hipótese nula está correta (2) seu teste não foi poderoso devido ao número baixo das amostras (3), seu teste não foi poderoso devido à hipótese alternativa errada (3b), medida falsa da significância estatística devido à representação errada da parte não determinística do modelo.
Sextus Empiricus

Para mim, seus dados não se parecem com y = x + ruído branco. Você pode falar mais sobre isso? (um teste para a suposição de que você recebe esse ruído pode não conseguir 'ver' uma diferença significativa, independentemente do tamanho da amostra, mesmo quando há uma enorme diferença entre os dados e a linha y = x, apenas porque você está somente comparando com outras linhas y = a + bx, que pode não ser a comparação correta e mais poderosa) #
Sextus Empiricus

Além disso, qual é o objetivo de determinar o significado. Vejo muitas respostas sugerindo o uso de um nível alfa de 5% (intervalos de confiança de 95%). No entanto, isso é muito arbitrário. É muito difícil ver a significância estatística como uma variável binária (presente ou não presente). Isso é feito com regras como os níveis alfa padrão, mas é arbitrário e quase sem sentido. Se você fornecer um contexto, o uso de um determinado nível de corte para tomar uma decisão (uma variável binária) com base em um nível de significância ( não uma variável binária), então um conceito como uma significância binária faz mais sentido.
Sextus Empiricus

1
Que tipo de "regressão linear" você está realizando? Normalmente, você consideraria que você está discutindo a regressão de mínimos quadrados ordinários (com um termo de interceptação), mas nesse caso, porque os dois conjuntos de resíduos terão zero médias (exatamente), a interceptação na regressão entre os resíduos também deve ser zero (exatamente ) Como não está, algo mais está acontecendo aqui. Você poderia fornecer alguns antecedentes do que está fazendo e por quê?
whuber

Isso se parece com o problema de medir se dois sistemas dão o mesmo resultado. Tente olhar para a plotagem branda-altman para obter algum material.
Mdewey 23/01/19

Respostas:


17

Esse tipo de situação pode ser tratado por um teste F padrão para modelos aninhados . Como você deseja testar os dois parâmetros em um modelo nulo com parâmetros fixos, suas hipóteses são:

H0 0:β=[0 01]HUMA:β[0 01].

O teste F envolve o ajuste de ambos os modelos e a comparação da soma dos quadrados residuais, que são:

SSE0 0=Eu=1n(yEu-xEu)2SSEUMA=Eu=1n(yEu-β^0 0-β^1xEu)2

A estatística do teste é:

FF(y,x)=n-22SSE0 0-SSEUMASSEUMA.

O valor p correspondente é:

pp(y,x)=F(y,x)F-Dist(r|2,n-2) dr.


Implementação em R: suponha que seus dados estejam em um quadro de dados chamado DATAcom variáveis ​​chamadas ye x. O teste F pode ser realizado manualmente com o seguinte código. Nos dados simulados simulados que usei, você pode ver que os coeficientes estimados estão próximos dos da hipótese nula, e o valor p do teste não mostra evidências significativas para falsificar a hipótese nula de que a verdadeira função de regressão é a função de identidade.

#Generate mock data (you can substitute your data if you prefer)
set.seed(12345);
n    <- 1000;
x    <- rnorm(n, mean = 0, sd = 5);
e    <- rnorm(n, mean = 0, sd = 2/sqrt(1+abs(x)));
y    <- x + e;
DATA <- data.frame(y = y, x = x);

#Fit initial regression model
MODEL <- lm(y ~ x, data = DATA);

#Calculate test statistic
SSE0   <- sum((DATA$y-DATA$x)^2);
SSEA   <- sum(MODEL$residuals^2);
F_STAT <- ((n-2)/2)*((SSE0 - SSEA)/SSEA);
P_VAL  <- pf(q = F_STAT, df1 = 2, df2 = n-2, lower.tail = FALSE);

#Plot the data and show test outcome
plot(DATA$x, DATA$y,
     main = 'All Residuals',
     sub  = paste0('(Test against identity function - F-Stat = ',
            sprintf("%.4f", F_STAT), ', p-value = ', sprintf("%.4f", P_VAL), ')'),
     xlab = 'Dataset #1 Normalized residuals',
     ylab = 'Dataset #2 Normalized residuals');
abline(lm(y ~ x, DATA), col = 'red', lty = 2, lwd = 2);

A summarysaída e plotpara esses dados são assim:

summary(MODEL);

Call:
lm(formula = y ~ x, data = DATA)

Residuals:
    Min      1Q  Median      3Q     Max 
-4.8276 -0.6742  0.0043  0.6703  5.1462 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) -0.02784    0.03552  -0.784    0.433    
x            1.00507    0.00711 141.370   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.122 on 998 degrees of freedom
Multiple R-squared:  0.9524,    Adjusted R-squared:  0.9524 
F-statistic: 1.999e+04 on 1 and 998 DF,  p-value: < 2.2e-16

F_STAT;
[1] 0.5370824

P_VAL;
[1] 0.5846198

insira a descrição da imagem aqui


x

1
Sim, bem localizado. Os dados simulados não usam uma regressão linear homosquástica padrão. Usei a heterocedasticidade na simulação para tentar imitar aproximadamente o padrão de dados no gráfico mostrado pelo OP. (E acho que fiz um ótimo trabalho!) Portanto, este é um caso em que estou ajustando um modelo linear homosquástico padrão a dados simulados que não foram gerados a partir desse modelo. No entanto, isso ainda é legítimo - não há problema em simular dados de um modelo e ajustá-los a outro, para ver o que acontece.
Reintegrar Monica

1
sd = 2/sqrt(1+abs(x))yxy=xxy=xy=x+e
Sextus Empiricus

1
Isso é verdade, mas leva você ao território dos modelos de erros em variáveis, o que o torna mais complicado. Eu acho que o OP só quer usar regressão linear padrão neste caso.
Reintegrar Monica

Concordo que é uma nota de rodapé, mas ainda assim importante. A simplicidade da pergunta me intriga (em pontos diferentes) e também me preocupa porque pode ser uma representação muito simples. Obviamente, depende do que realmente se está tentando alcançar ('todos os modelos estão errados ...'), mas essa representação simples pode se tornar um padrão e as complexas perguntas adicionais que se deve ter em mente serão esquecidas ou até mesmo nunca começa a pensar nisso (a referência a ICs de 95% em outras respostas é um exemplo de tal padrão que as pessoas seguem cegamente).
Sextus Empiricus

5

Aqui está um método gráfico interessante, que escrevi do excelente livro de Julian Faraway "Linear Models With R (Second Edition)". São intervalos de confiança simultâneos de 95% para a interceptação e a inclinação, plotados como uma elipse.

Para ilustração, criei 500 observações com uma variável "x" com distribuição N (média = 10, sd = 5) e, em seguida, uma variável "y" cuja distribuição é N (média = x, sd = 2). Isso gera uma correlação de pouco mais de 0,9, que pode não ser tão estreita quanto seus dados.

Você pode verificar a elipse para ver se o ponto (interceptação = 0, inclinação = 1) cai dentro ou fora desse intervalo de confiança simultâneo.

library(tidyverse)
library(ellipse)
#> 
#> Attaching package: 'ellipse'
#> The following object is masked from 'package:graphics':
#> 
#>     pairs

set.seed(50)
dat <- data.frame(x=rnorm(500,10,5)) %>% mutate(y=rnorm(n(),x,2))

lmod1 <- lm(y~x,data=dat)
summary(lmod1)
#> 
#> Call:
#> lm(formula = y ~ x, data = dat)
#> 
#> Residuals:
#>     Min      1Q  Median      3Q     Max 
#> -6.9652 -1.1796 -0.0576  1.2802  6.0212 
#> 
#> Coefficients:
#>             Estimate Std. Error t value Pr(>|t|)    
#> (Intercept)  0.24171    0.20074   1.204    0.229    
#> x            0.97753    0.01802  54.246   <2e-16 ***
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> Residual standard error: 2.057 on 498 degrees of freedom
#> Multiple R-squared:  0.8553, Adjusted R-squared:  0.855 
#> F-statistic:  2943 on 1 and 498 DF,  p-value: < 2.2e-16

cor(dat$y,dat$x)
#> [1] 0.9248032

plot(y~x,dat)
abline(0,1)


confint(lmod1)
#>                  2.5 %    97.5 %
#> (Intercept) -0.1526848 0.6361047
#> x            0.9421270 1.0129370

plot(ellipse(lmod1,c("(Intercept)","x")),type="l")
points(coef(lmod1)["(Intercept)"],coef(lmod1)["x"],pch=19)

abline(v=confint(lmod1)["(Intercept)",],lty=2)
abline(h=confint(lmod1)["x",],lty=2)

points(0,1,pch=1,size=3)
#> Warning in plot.xy(xy.coords(x, y), type = type, ...): "size" is not a
#> graphical parameter

abline(v=0,lty=10)
abline(h=0,lty=10)

Criado em 2019-01-21 pelo pacote reprex (v0.2.1)


1

Você pode calcular os coeficientes com n amostras de bootstrap. Provavelmente, isso resultará em valores normais do coeficiente distribuído (teorema do limite central). Com isso, você pode construir um intervalo de confiança (por exemplo, 95%) com valores t (n-1 graus de liberdade) em torno da média. Se o seu IC não incluir 1 (0), é estatisticamente significante diferente ou mais preciso: Você pode rejeitar a hipótese nula de uma inclinação igual.


Como você a formulou aqui, apenas testa duas hipóteses separadamente, mas o que você precisa é de um teste conjunto.
Kjetil b halvorsen


0

Você deve ajustar uma regressão linear e verificar os intervalos de confiança de 95% para os dois parâmetros. Se o IC da inclinação incluir 1 e o IC da compensação incluir 0, o teste de dois lados será insignificante aprox. no nível (95%) ^ 2 - à medida que usamos dois testes separados, o risco tipo I aumenta.

Usando R:

fit = lm(Y ~ X)
confint(fit)

ou você usa

summary(fit)

e calcule os intervalos de 2 sigma sozinho.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.