Comment puis-je calculer si ma régression linéaire présente une différence statistiquement significative par rapport à une droite théorique connue?


14

J'ai quelques données qui sont ajustées le long d'une ligne à peu près linéaire:

entrez la description de l'image ici

Lorsque je fais une régression linéaire de ces valeurs, j'obtiens une équation linéaire:

y=0.997x0.0136

Dans un monde idéal, l'équation devrait être y=x .

De toute évidence, mes valeurs linéaires sont proches de cet idéal, mais pas exactement. Ma question est, comment puis-je déterminer si ce résultat est statistiquement significatif?

La valeur de 0,997 est-elle significativement différente de 1? -0,01 est-il significativement différent de 0? Ou sont-ils statistiquement les mêmes et je peux conclure que y=x avec un certain niveau de confiance raisonnable?

Qu'est-ce qu'un bon test statistique que je peux utiliser?

Merci


1
Vous pouvez calculer s'il existe ou non une différence statistiquement significative, mais vous devez noter que cela ne signifie pas qu'il n'y a pas de différence. Vous ne pouvez être sûr de la signification que lorsque vous falsifiez l'hypothèse nulle, mais lorsque vous ne falsifiez pas l'hypothèse nulle, cela peut être soit (1) en effet l'hypothèse nulle est correcte (2) votre test n'a pas été puissant en raison du faible nombre d'échantillons (3) votre test n'était pas puissant en raison d'une mauvaise hypothèse alternative (3b) fausse mesure de la signification statistique due à une représentation erronée de la partie non déterministe du modèle.
Sextus Empiricus

Pour moi, vos données ne ressemblent pas à y = x + bruit blanc. Pouvez-vous nous en dire plus? (un test pour l'hypothèse que vous obtenez un tel bruit peut ne pas `` voir '' une différence significative, quelle que soit la taille de l'échantillon, même lorsqu'il y a une énorme différence entre les données et la ligne y = x, simplement parce que vous êtes comparer uniquement avec les autres lignes y = a + bx, ce qui n'est peut-être pas la comparaison la plus juste et la plus puissante)
Sextus Empiricus

Aussi, quel est le but de déterminer la signification. Je vois que de nombreuses réponses suggèrent d'utiliser un niveau alpha de 5% (intervalles de confiance à 95%). Cependant, c'est très arbitraire. Il est très difficile de voir la signification statistique comme une variable binaire (présente ou non présente). Cela se fait avec des règles telles que les niveaux alpha standard, mais c'est arbitraire et presque vide de sens. Si vous donnez un contexte, alors l'utilisation d'un certain niveau de coupure afin de prendre une décision (une variable binaire) basée sur un niveau de signification ( pas une variable binaire), alors un concept tel qu'une signification binaire a plus de sens.
Sextus Empiricus

1
Quel genre de "régression linéaire" effectuez-vous? On considérerait généralement que vous discutez de la régression des moindres carrés ordinaires (avec un terme d'interception), mais dans ce cas, parce que les deux ensembles de résidus auront des moyennes nulles (exactement), l'interception dans la régression entre les résidus devrait également être nulle (exactement ). Comme ce n'est pas le cas, quelque chose d'autre se passe ici. Pourriez-vous nous expliquer ce que vous faites et pourquoi?
whuber

Cela ressemble au problème de mesure pour voir si deux systèmes donnent le même résultat. Essayez de regarder l' intrigue fade-altman pour un peu de matériel.
mdewey

Réponses:


17

Ce type de situation peut être géré par un test F standard pour les modèles imbriqués . Puisque vous souhaitez tester les deux paramètres par rapport à un modèle nul avec des paramètres fixes, vos hypothèses sont les suivantes:

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

Le test F implique l'ajustement des deux modèles et la comparaison de leur somme des carrés résiduels, qui sont:

SSE0=je=1n(yje-Xje)2SSEUNE=je=1n(yje-β^0-β^1Xje)2

La statistique de test est:

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

La valeur p correspondante est:

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


Implémentation dans R: Supposons que vos données se trouvent dans une trame de données appelée DATAavec des variables appelées yet x. Le test F peut être effectué manuellement avec le code suivant. Dans les données simulées simulées que j'ai utilisées, vous pouvez voir que les coefficients estimés sont proches de ceux de l'hypothèse nulle, et la valeur de p du test ne montre aucune preuve significative pour falsifier l'hypothèse nulle que la véritable fonction de régression est la fonction d'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);

La summarysortie et plotpour ces données ressemblent à ceci:

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

entrez la description de l'image ici


X

1
Ouais, bien repéré. Les données simulées n'utilisent pas de régression linéaire homoscédastique standard. J'ai utilisé l'hétéroscédasticité dans la simulation pour essayer d'imiter grossièrement le modèle de données dans le tracé montré par l'OP. (Et je pense que j'ai fait un sacré bon travail!) C'est donc un cas où j'adapte un modèle linéaire homoskédastique standard à des données simulées qui n'ont pas été générées à partir de ce modèle. C'est toujours légitime cependant - il est correct de simuler les données d'un modèle puis de les adapter à un autre, pour voir ce qui se passe.
Rétablir Monica le

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

1
C'est vrai, mais cela vous fait entrer dans le territoire des modèles d'erreurs dans les variables, ce qui le rend plus compliqué. Je pense que l'OP veut juste utiliser une régression linéaire standard dans ce cas.
Rétablir Monica le

Je suis d'accord pour dire qu'il s'agit d'un sidenote, mais néanmoins important. La simplicité de la question me laisse perplexe (à différents points), et elle m'inquiète aussi car elle pourrait être une représentation trop simple. Bien sûr, cela dépend de ce que l'on essaie réellement de réaliser (`` tous les modèles sont faux ... '') mais cette simple représentation peut devenir une norme et les questions supplémentaires complexes que l'on doit garder à l'esprit seront oubliées ou même ne commence jamais à y penser (la référence aux IC à 95% dans d'autres réponses est un exemple d'une telle norme que les gens suivent aveuglément).
Sextus Empiricus

5

Voici une méthode graphique sympa que j'ai extraite de l'excellent livre de Julian Faraway "Modèles linéaires avec R (deuxième édition)". Il s'agit d'intervalles de confiance simultanés à 95% pour l'interception et la pente, tracés sous forme d'ellipse.

Pour illustration, j'ai créé 500 observations avec une variable "x" ayant une distribution N (moyenne = 10, sd = 5) puis une variable "y" dont la distribution est N (moyenne = x, sd = 2). Cela donne une corrélation d'un peu plus de 0,9 qui peut ne pas être aussi serrée que vos données.

Vous pouvez vérifier l'ellipse pour voir si le point (interception = 0, pente = 1) se situe à l'intérieur ou à l'extérieur de cet intervalle de confiance simultané.

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)

Créé le 2019-01-21 par le package reprex (v0.2.1)


1

Vous pouvez calculer les coefficients avec n échantillons bootstrapés. Il en résultera probablement des valeurs de coefficient réparties normales (théorème de limite centrale). Avec cela, vous pourriez alors construire un intervalle de confiance (par exemple 95%) avec des valeurs t (n-1 degrés de liberté) autour de la moyenne. Si votre CI n'inclut pas 1 (0), il est différent statistiquement significatif, ou plus précis: vous pouvez rejeter l'hypothèse nulle d'une pente égale.


Comme vous l'avez formulé ici, il ne teste que deux hypothèses séparément, mais ce dont vous avez besoin est un test conjoint.
kjetil b halvorsen

0

Vous pouvez effectuer un test d'hypothèse simple, à savoir un test t. Pour l'interception, votre hypothèse nulle estβ0=0 (notez qu'il s'agit du test de signification), et pour la pente que vous avez sous H0 β1=1.


1
Mais ce qu'il faut, c'est un test commun comme dans les autres réponses.
kjetil b halvorsen

@kjetilbhalvorsen J'ai réalisé que j'avais tort aujourd'hui matin en lisant les autres réponses. Je vais le supprimer.
RScrlli

0

Vous devez ajuster une régression linéaire et vérifier les intervalles de confiance à 95% pour les deux paramètres. Si le CI de la pente comprend 1 et le CI du décalage comprend 0, le test bilatéral est insignifiant env. au niveau (95%) ^ 2 - comme nous utilisons deux tests distincts, le risque de type I augmente.

Utilisation de R:

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

ou vous utilisez

summary(fit)

et calculez vous-même les 2 intervalles sigma.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.