Wie berechne ich, ob meine lineare Regression einen statistisch signifikanten Unterschied zu einer bekannten theoretischen Linie aufweist?

14

Ich habe einige Daten, die entlang einer ungefähr linearen Linie passen:

Bildbeschreibung hier eingeben

Wenn ich eine lineare Regression dieser Werte durchführe, erhalte ich eine lineare Gleichung:

y=0.997x0.0136

In einer idealen Welt, die Gleichung sollte seine .y=x

Offensichtlich liegen meine linearen Werte nahe an diesem Ideal, aber nicht genau. Meine Frage ist, wie kann ich feststellen, ob dieses Ergebnis statistisch signifikant ist?

Unterscheidet sich der Wert von 0,997 erheblich von 1? Unterscheidet sich -0.01 signifikant von 0? Oder sind sie statistisch gleich und ich kann daraus schließen, dass mit einem angemessenen Konfidenzniveau ist?y=x

Was ist ein guter statistischer Test, den ich verwenden kann?

Vielen Dank

Darcy
quelle
1
Sie können berechnen, ob es einen statistisch signifikanten Unterschied gibt oder nicht, aber Sie sollten beachten, dass dies nicht bedeutet, ob es keinen Unterschied gibt. Sie können sich nur über die Bedeutung sicher sein, wenn Sie die Nullhypothese verfälschen. Wenn Sie die Nullhypothese jedoch nicht verfälschen, kann dies entweder (1) sein, tatsächlich ist die Nullhypothese korrekt (2) Ihr Test war aufgrund der geringen Anzahl nicht erfolgreich Bei Stichproben (3) war Ihr Test aufgrund einer falschen alternativen Hypothese nicht aussagekräftig. (3b) Falsches Maß für die statistische Signifikanz aufgrund einer falschen Darstellung des nicht deterministischen Teils des Modells.
Sextus Empiricus
Für mich sehen deine Daten nicht so aus wie y = x + weißes Rauschen. Kannst du mehr darüber erzählen? (Ein Test für die Annahme, dass Sie ein solches Rauschen erhalten, kann einen signifikanten Unterschied nicht "erkennen", egal wie groß die Stichprobe ist, auch wenn es einen enormen Unterschied zwischen den Daten und der Linie y = x gibt, nur weil Sie es sind Vergleiche nur mit anderen Linien (y = a + bx, was möglicherweise nicht der richtige und aussagekräftigste Vergleich ist)
Sextus Empiricus
Auch was ist das Ziel der Bestimmung der Signifikanz. Ich sehe viele Antworten, die vorschlagen, ein Alpha-Level von 5% (95% Konfidenzintervall) zu verwenden. Dies ist jedoch sehr willkürlich. Es ist sehr schwierig, statistische Signifikanz als binäre Variable (vorhanden oder nicht vorhanden) zu sehen. Dies geschieht mit Regeln wie Standard-Alpha-Levels, ist jedoch willkürlich und nahezu bedeutungslos. Wenn Sie einen Kontext angeben, dann ist die Verwendung eines bestimmten Grenzwerts sinnvoll, um eine Entscheidung (eine binäre Variable) auf der Grundlage eines Signifikanzniveaus ( keine binäre Variable) zu treffen .
Sextus Empiricus
1
Welche Art von "linearer Regression" führen Sie durch? Normalerweise würden Sie die Regression der kleinsten Quadrate (mit einem Intercept-Term) diskutieren, aber in diesem Fall sollte der Intercept in der Regression zwischen den Residuen ebenfalls null (genau) sein, da beide Mengen von Residuen Mittelwerte von null haben ). Da es nicht so ist, ist hier etwas anderes los. Können Sie etwas Hintergrundwissen darüber liefern, was Sie tun und warum?
Whuber
Dies ähnelt dem Problem bei der Messung, ob zwei Systeme das gleiche Ergebnis liefern. Schauen Sie sich die langweilige Altman-Handlung an, um Material zu finden.
mdewey

Antworten:

17

Diese Art von Situation kann durch einen Standard- F-Test für verschachtelte Modelle behandelt werden . Da Sie beide Parameter gegen ein Nullmodell mit festen Parametern testen möchten, lauten Ihre Hypothesen:

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

Der F-Test beinhaltet die Anpassung beider Modelle und den Vergleich ihrer verbleibenden Quadratsumme. Diese sind:

SSE0=ich=1n(yich-xich)2SSEEIN=ich=1n(yich-β^0-β^1xich)2

Die Teststatistik lautet:

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

Der entsprechende p-Wert ist:

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


Implementierung in R: Angenommen, Ihre Daten befinden sich in einem Datenrahmen DATAmit den Variablen yund x. Der F-Test kann manuell mit dem folgenden Code durchgeführt werden. In den simulierten Scheindaten, die ich verwendet habe, können Sie sehen, dass die geschätzten Koeffizienten nahe an denjenigen in der Nullhypothese liegen, und der p-Wert des Tests zeigt keinen signifikanten Beweis, um die Nullhypothese zu verfälschen, dass die wahre Regressionsfunktion die ist Identitätsfunktion.

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

Die summaryAusgabe und plotfür diese Daten sehen folgendermaßen aus:

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

Bildbeschreibung hier eingeben

Setzen Sie Monica wieder ein
quelle
x
1
Ja, gut gesehen. Die simulierten Daten verwenden keine standardmäßige homoskedastische lineare Regression. Ich habe Heteroskedastizität in der Simulation verwendet, um zu versuchen, das Datenmuster in der grafischen Darstellung des OP grob nachzuahmen. (Und ich denke, ich habe verdammt gute Arbeit geleistet!) Dies ist ein Fall, in dem ich ein standardmäßiges homoskedastisches lineares Modell an simulierte Daten anpasse, die nicht aus diesem Modell generiert wurden. Das ist aber immer noch legitim - es ist in Ordnung, Daten von einem Modell zu simulieren und dann an ein anderes anzupassen, um zu sehen, was auftaucht.
Setzen Sie Monica am
1
sd = 2/sqrt(1+abs(x))yxy=xxy=xy=x+e
Sextus Empiricus
1
Das stimmt, aber es versetzt Sie in das Gebiet der Modelle für Fehler in Variablen, was es komplizierter macht. Ich denke, das OP möchte in diesem Fall nur die standardmäßige lineare Regression verwenden.
Setzen Sie Monica am
Ich stimme zu, dass es eine Nebenbemerkung ist, aber dennoch eine wichtige. Die Einfachheit der Frage verwirrt mich (an verschiedenen Stellen) und macht mir auch Sorgen, weil es sich möglicherweise um eine zu einfache Darstellung handelt. Natürlich kommt es darauf an, was man eigentlich erreichen will ('alle Modelle sind falsch ...'), aber diese einfache Darstellung kann zum Standard werden und die komplexen zusätzlichen Fragen, die man im Auge behalten sollte, werden vergessen oder sogar eine fängt nie an darüber nachzudenken (die Bezugnahme auf 95% CIs in anderen Antworten ist ein Beispiel für einen solchen Standard, dem die Leute blindlings folgen).
Sextus Empiricus
5

Hier ist eine coole grafische Methode, die ich aus Julian Faraways ausgezeichnetem Buch "Linear Models With R (Second Edition)" entnommen habe. Es sind simultane 95% -Konfidenzintervalle für den Achsenabschnitt und die Steigung, die als Ellipse dargestellt sind.

Zur Veranschaulichung habe ich 500 Beobachtungen mit einer Variablen "x" mit einer N-Verteilung (Mittelwert = 10, sd = 5) und einer Variablen "y" mit einer N-Verteilung (Mittelwert = x, sd = 2) erstellt. Das ergibt eine Korrelation von etwas mehr als 0,9, die möglicherweise nicht ganz so eng ist wie Ihre Daten.

Sie können die Ellipse überprüfen, um festzustellen, ob der Punkt (Achsenabschnitt = 0, Steigung = 1) innerhalb oder außerhalb dieses gleichzeitigen Konfidenzintervalls liegt.

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)

Erstellt am 21.01.2019 durch das Paket reprex (v0.2.1)

Brent Hutto
quelle
1

Sie könnten die Koeffizienten mit n Bootstrap-Samples berechnen. Dies wird wahrscheinlich zu normalverteilten Koeffizientenwerten führen (zentraler Grenzwertsatz). Damit könnten Sie dann ein (zB 95%) Konfidenzintervall mit t-Werten (n-1 Freiheitsgrade) um den Mittelwert konstruieren. Wenn Ihr CI nicht 1 (0) enthält, ist es statistisch signifikant anders oder genauer: Sie können die Nullhypothese einer gleichen Steigung ablehnen.

Peter
quelle
Wie Sie es hier formuliert haben, werden nur zwei Hypothesen separat getestet. Sie benötigen jedoch einen gemeinsamen Test.
kjetil b halvorsen
0

β0=0β1=1

RScrlli
quelle
1
Was aber gebraucht wird, ist ein gemeinsamer Test wie bei anderen Antworten.
kjetil b halvorsen
@kjetilbhalvorsen Ich habe festgestellt, dass ich mich heute morgen beim Lesen der anderen Antworten geirrt habe. Ich werde es löschen.
RScrlli
0

Sie sollten eine lineare Regression anpassen und die 95% -Konfidenzintervalle für die beiden Parameter überprüfen. Wenn der CI der Steigung 1 enthält und der CI des Offsets 0 enthält, ist der zweiseitige Test ungefähr unwesentlich. auf der (95%) ^ 2-Ebene - da wir zwei separate Tests verwenden, steigt das Typ-I-Risiko.

Verwendung von R:

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

oder du verwendest

summary(fit)

und berechnen Sie die 2 Sigma-Intervalle selbst.

Semoi
quelle