Come faccio a calcolare se la mia regressione lineare ha una differenza statisticamente significativa da una linea teorica nota?


14

Ho alcuni dati che si adattano lungo una linea approssimativamente lineare:

inserisci qui la descrizione dell'immagine

Quando eseguo una regressione lineare di questi valori, ottengo un'equazione lineare:

y=0.997x0.0136

In un mondo ideale, l'equazione dovrebbe essere y=x .

Chiaramente, i miei valori lineari sono vicini a quell'ideale, ma non esattamente. La mia domanda è: come posso determinare se questo risultato è statisticamente significativo?

Il valore di 0.997 è significativamente diverso da 1? -0.01 è significativamente diverso da 0? O sono statisticamente uguali e posso concludere che y=x con un livello di confidenza ragionevole?

Che cos'è un buon test statistico che posso usare?

Grazie


1
È possibile calcolare se esiste o meno una differenza statisticamente significativa, ma è necessario tenere presente che ciò non significa che non vi sia differenza. Puoi essere sicuro del significato solo quando falsi l'ipotesi nulla, ma quando non falsi l'ipotesi nulla, questa può essere (1) l'ipotesi nulla è corretta (2) il tuo test non era potente a causa del numero basso dei campioni (3) il test non è stato efficace a causa di ipotesi alternative errate (3b) falsa misura di significatività statistica dovuta alla rappresentazione errata della parte non deterministica del modello.
Sisto Empirico,

Per me i tuoi dati non sembrano y = x + rumore bianco. Puoi dirne di più? (un test per il presupposto che si ottiene tale rumore potrebbe non riuscire a "vedere" una differenza significativa, non importa quanto sia grande il campione, anche quando c'è un'enorme differenza tra i dati e la linea y = x, solo perché si è confrontando solo con altre righe y = a + bx, che potrebbe non essere il confronto giusto e più potente)
Sisto Empirico

Inoltre, qual è l'obiettivo di determinare il significato. Vedo che molte risposte suggeriscono di utilizzare un livello alfa del 5% (intervalli di confidenza al 95%). Tuttavia, questo è molto arbitrario. È molto difficile vedere il significato statistico come una variabile binaria (presente o non presente). Questo viene fatto con regole come i livelli alfa standard, ma è arbitrario e quasi insignificante. Se dai un contesto, allora l'uso di un certo livello di cutoff per prendere una decisione (una variabile binaria) basato su un livello di significatività ( non una variabile binaria), allora un concetto come un significato binario ha più senso.
Sesto Empirico

1
Che tipo di "regressione lineare" stai eseguendo? Uno di solito considererebbe che stai discutendo la regressione dei minimi quadrati ordinari (con un termine di intercettazione), ma in quel caso poiché entrambi gli insiemi di residui avranno mezzi zero (esattamente), anche l'intercetta nella regressione tra i residui dovrebbe essere zero (esattamente ). Dal momento che non lo è, qualcos'altro sta succedendo qui. Potresti fornire qualche informazione su ciò che stai facendo e perché?
whuber

Questo sembra simile al problema nella misurazione del vedere se due sistemi danno lo stesso risultato. Prova a guardare la trama blanda-altman per del materiale.
mdewey,

Risposte:


17

Questo tipo di situazione può essere gestito da un test F standard per i modelli nidificati . Poiché si desidera testare entrambi i parametri su un modello null con parametri fissi, le ipotesi sono:

H0:β=[01]HUN:β[01].

Il test F prevede l'adattamento di entrambi i modelli e il confronto della somma dei quadrati residua, che sono:

SSE0=Σio=1n(yio-Xio)2SSEUN=Σio=1n(yio-β^0-β^1Xio)2

La statistica del test è:

FF(y,X)=n-22SSE0-SSEUNSSEUN.

Il valore p corrispondente è:

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


Implementazione in R: Supponiamo che i tuoi dati siano in un frame di dati chiamato DATAcon variabili chiamate ye x. L'F-test può essere eseguito manualmente con il seguente codice. Nei dati simulati simulati che ho usato, puoi vedere che i coefficienti stimati sono vicini a quelli dell'ipotesi nulla e il valore p del test non mostra prove significative per falsificare l'ipotesi nulla che la vera funzione di regressione sia la funzione di identità.

#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);

L' summaryoutput e plotper questi dati è simile al seguente:

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

inserisci qui la descrizione dell'immagine


X

1
Sì, ben individuato. I dati simulati non usano una regressione lineare omoschedastica standard. Ho usato l'eteroscedasticità nella simulazione per cercare di imitare approssimativamente il modello di dati nel diagramma mostrato dall'OP. (E penso di aver fatto davvero un bel lavoro!) Quindi questo è un caso in cui sto adattando un modello lineare omoschedastico standard a dati simulati che non sono stati generati da quel modello. Ciò è comunque legittimo: va bene simulare i dati da un modello e poi adattarli a un altro, per vedere cosa succede.
Ripristina Monica il

1
sd = 2/sqrt(1+abs(x))yXy=XXy=Xy=X+e
Sesto Empirico

1
È vero, ma ti porta nel territorio dei modelli di errori in variabili, il che lo rende più complicato. Penso che l'OP voglia solo usare la regressione lineare standard in questo caso.
Ripristina Monica il

Concordo sul fatto che si tratta di un sidenote, ma comunque importante. La semplicità della domanda mi confonde (in diversi punti), e mi preoccupa anche perché potrebbe essere una rappresentazione troppo semplice. Certo, dipende da cosa si sta effettivamente cercando di ottenere ("tutti i modelli sono sbagliati ..."), ma questa semplice rappresentazione può diventare uno standard e le complesse domande aggiuntive che si dovrebbero tenere a mente verranno dimenticate o addirittura non inizia mai a pensarci (il riferimento al 95% di IC in altre risposte è un esempio di tale standard che le persone seguono ciecamente).
Sesto Empirico

5

Ecco un fantastico metodo grafico che ho paralizzato dall'eccellente libro di Julian Faraway "Linear Models With R (Second Edition)". Sono intervalli di confidenza simultanei al 95% per l'intercetta e la pendenza, tracciati come un'ellisse.

Ad esempio, ho creato 500 osservazioni con una variabile "x" con distribuzione N (media = 10, sd = 5) e quindi una variabile "y" la cui distribuzione è N (media = x, sd = 2). Ciò produce una correlazione di poco superiore a 0,9 che potrebbe non essere così stretta come i tuoi dati.

Puoi controllare l'ellisse per vedere se il punto (intercetta = 0, pendenza = 1) rientra all'interno o all'esterno dell'intervallo di confidenza simultaneo.

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)

Creato il 21-01-2019 dal pacchetto reprex (v0.2.1)


1

È possibile calcolare i coefficienti con n campioni avviati. Ciò comporterà probabilmente valori di coefficienti distribuiti normali (teorema limite centrale). Con ciò potresti quindi costruire un intervallo di confidenza (ad es. 95%) con valori t (n-1 gradi di libertà) attorno alla media. Se il tuo elemento della configurazione non include 1 (0), è statisticamente significativo diverso o più preciso: puoi rifiutare l'ipotesi nulla di una pendenza uguale.


Come è stato formulato qui, verifica solo due ipotesi separatamente, ma ciò di cui hai bisogno è un test congiunto.
kjetil b halvorsen,

0

β0=0β1=1


1
Ma ciò che è necessario è un test comune come in altre risposte.
kjetil b halvorsen,

@kjetilbhalvorsen Mi sono reso conto che stamattina ho sbagliato a leggere le altre risposte. Lo cancellerò.
RScrlli,

0

È necessario inserire una regressione lineare e controllare gli intervalli di confidenza al 95% per i due parametri. Se l'IC della pendenza include 1 e l'IC dell'offset include 0, il test fronte / retro è insignificante di ca. a livello (95%) ^ 2 - poiché utilizziamo due test separati il ​​rischio di tipo I aumenta.

Usando R:

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

o tu usi

summary(fit)

e calcola i 2 intervalli sigma da solo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.