Wie berechnet man die Differenz zweier Steigungen?


11

Gibt es eine Methode, um zu verstehen, ob zwei Linien (mehr oder weniger) parallel sind? Ich habe zwei Linien, die aus linearen Regressionen erzeugt wurden, und ich würde gerne verstehen, ob sie parallel sind. Mit anderen Worten, ich möchte die unterschiedlichen Steigungen dieser beiden Linien ermitteln.

Gibt es eine R-Funktion, um dies zu berechnen?

EDIT: ... und wie kann ich die Steigung (in Grad) einer linearen Regressionslinie ermitteln?

Antworten:


23

Ich frage mich, ob mir etwas Offensichtliches fehlt, aber können Sie dies nicht statistisch mit ANCOVA tun? Ein wichtiger Punkt ist , dass die Pisten in den beiden Regressionen geschätzt werden mit Fehlern. Sie sind Schätzungen der Steigungen in der Gesamtbevölkerung. Wenn es darum geht, ob die beiden Regressionslinien in der Grundgesamtheit parallel sind oder nicht, ist es nicht sinnvoll, direkt mit zu vergleichen, um eine genaue Äquivalenz zu erhalten. Beide unterliegen Fehlern / Unsicherheiten, die berücksichtigt werden müssen.a 2a1a2

Wenn wir dies unter statistischen Gesichtspunkten betrachten und die Daten zu und für beide Datensätze auf sinnvolle Weise kombinieren können (dh und in beiden Sätzen werden aus den beiden Populationen mit ähnlichen Bereichen für die beiden gezogen Variablen Es ist nur die Beziehung zwischen ihnen, die in den beiden Populationen unterschiedlich ist. Dann können wir die folgenden zwei Modelle anpassen:y x yxyxy

y^=b0+b1x+b2g

und

y^=b0+b1x+b2g+b3xg

Wobei die Modellkoeffizienten sind und eine Gruppierungsvariable / ein Gruppierungsfaktor ist, der angibt, zu welchem ​​Datensatz jede Beobachtung gehört. gbig

Wir können eine ANOVA-Tabelle oder ein F-Verhältnis verwenden, um zu testen, ob das zweite, komplexere Modell besser zu den Daten passt als das einfachere Modell. Das einfachere Modell besagt, dass die Steigungen der beiden Linien gleich sind ( ), die Linien jedoch um einen Betrag voneinander versetzt sind .b 2b1b2

Das komplexere Modell beinhaltet eine Wechselwirkung zwischen der Steigung der Linie und der Gruppierungsvariablen. Wenn der Koeffizient für diesen Interaktionsterm signifikant von Null abweicht oder das ANOVA / F-Verhältnis angibt, dass das komplexere Modell besser zu den Daten passt, müssen wir die Nullhypothese ablehnen, dass zwei Linien parallel sind.

Hier ist ein Beispiel in R unter Verwendung von Dummy-Daten. Erstens Daten mit gleichen Steigungen:

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)

Welches gibt

> 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

Dies zeigt an, dass wir die Nullhypothese gleicher Steigungen in dieser Datenstichprobe nicht ablehnen. Natürlich möchten wir uns versichern, dass wir über genügend Leistung verfügen, um einen Unterschied zu erkennen, wenn es tatsächlich einen gibt, damit wir nicht fälschlicherweise die Null ablehnen, weil unsere Stichprobengröße für den erwarteten Effekt zu klein war.

Jetzt mit verschiedenen Pisten.

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)

Welches gibt:

> 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

Hier haben wir wesentliche Beweise gegen die Nullhypothese und können sie daher zugunsten der Alternative ablehnen (mit anderen Worten, wir lehnen die Hypothese ab, dass die Steigungen der beiden Linien gleich sind).

Die Interaktionsterme in den beiden von mir angepassten Modellen ( ) geben den geschätzten Unterschied in den Steigungen für die beiden Gruppen an. Für das erste Modell ist die Schätzung des Unterschieds in den Steigungen gering (~ 0,003).b3xg

> coef(m1)
(Intercept)           x          gB        x:gB 
2.100068977 0.500596394 2.659509181 0.002846393

und ein Test dazu würde die Nullhypothese, dass dieser Unterschied in den Steigungen 0 ist, nicht ablehnen können: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 

Wenn wir uns dem Modell zuwenden, das an den zweiten Datensatz angepasst ist, bei dem wir die Steigungen für die beiden Gruppen unterschiedlich gemacht haben, sehen wir, dass der geschätzte Unterschied in den Steigungen der beiden Linien ~ 1 Einheit beträgt.

> coef(m2)
(Intercept)           x          gB        x:gB 
  2.3627432   0.4920317   2.8931074   1.0048653 

Die Steigung für Gruppe "A" beträgt ~ 0,49 ( xin der obigen Ausgabe), während wir die Steigung für Gruppe "B" zur Steigung von Gruppe "A" addieren müssen, um die Steigung für Gruppe "B" zu erhalten. ;; ~ 0,49 + ~ 1 = ~ 1,49. Dies ist ziemlich nahe an der angegebenen Steigung für Gruppe "B" von 1,5. Ein Test für diese Steigungsdifferenz zeigt auch an, dass die Schätzung für die Differenz von 0 weg begrenzt ist: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

Vielen Dank für diese sehr gute Erklärung. Mein Ziel ist es zu verstehen, ob die Sloper weniger oder mehr gleich sind, also denke ich, dass ich ANOVA verwenden werde, um es zu testen.
Dail

Wenn ich zwei Distint-Vektoren habe und deren Steigungen vergleichen möchte, aber ich habe nicht das y (lm (x ~ y), wie kann ich ANOVA verwenden? Ich habe es mit anova (lm (x ~ 1), lm (y) versucht ~ 1)) aber ich bekomme eine Warnung
Dail

Was meinst du hier mit Vektoren? Im R-Sinne oder im mathematischen Sinne? Das ist sehr verschieden von der Frage , die Sie gestellt, so wenden Sie sich bitte eine neue Frage beginnen - Sie nicht diese eine bearbeiten - es ist unmöglich, Verhalten Nachuntersuchungen solchen breite Natur in den Kommentaren.
Gavin Simpson

Nein, ich muss zwei Modelle mit ANOVA vergleichen ... ok, aber wenn ich ein Modell mit dieser Formel erstelle: x ~ 1 und ein anderes Modell mit y ~ 1, erhalte ich die Warnung. Ich spreche im R-Sinne. Wie kann ich?
Dail

1
@Dail Wenn Sie zwei Regressionen angepasst haben, um zwei Steigungen / Linien zu erhalten, haben Sie x- und y-Daten für beide Datensätze. Wie in meiner Antwort erwähnt, können Sie, wenn xs und ys in den beiden Datensätzen vergleichbar sind, einfach alle Daten kombinieren und eine Gruppierungsvariable hinzufügen. Mein Beispiel zeigt, wie dies mit Dummy-Daten gemacht wird, aber Sie haben bereits x- und y-Daten. Es sind die Daten, die Sie verwendet haben, um die separaten Regressionen anzupassen.
Gavin Simpson

8

Die erste Frage stammt eigentlich aus der Geometrie. Wenn Sie zwei Zeilen des Formulars haben:

y=a1x+b1
y=a2x+b2

a1=a2

tanα=a1αxa1

α=arctana1

2π=360

α=arctana13602π.

arctanatan

Beispiel-R-Code:

> x<-rnorm(100)
> y<-x+1+rnorm(100)/2
> mod<-lm(y~x)
> mod$coef
    (Intercept)           x 
      0.9416175   0.9850303 
    > mod$coef[2]
        x 
0.9850303 
> atan(mod$coef[2])*360/2/pi
       x 
44.56792 

Die letzte Zeile ist der Grad.

a1

α=180arctana13602π.

Hinweis. Während es mir Spaß gemacht hat, mich an die Trigonometrie der High School zu erinnern, ist die wirklich nützliche Antwort die von Gavin Simpson. Da die Steigungen der Regressionslinien Zufallsvariablen sind, sollte zum Vergleich ein statistischer Hypothesenrahmen verwendet werden.


Dankeschön! Wie erhält man die Steigung aus der Regression? muss ich Koeffizient bekommen und abfangen?
Dail

Vielleicht gibt die lineare Regression die Grade direkt mit einer Funktion zurück?
Dail

sagen degress = +45 und degress = -315 sind nicht die gleiche Zeile? Was spricht nicht über dieselbe Linie?
Dail

1

... Nach der Antwort von @mpiktas können Sie wie folgt die Steigung aus einem lmObjekt extrahieren und die obige Formel anwenden.

# prepare some data, see ?lm
ctl <- c(4.17,5.58,5.18,6.11,4.50,4.61,5.17,4.53,5.33,5.14)
trt <- c(4.81,4.17,4.41,3.59,5.87,3.83,6.03,4.89,4.32,4.69)
group <- gl(2,10,20, labels=c("Ctl","Trt"))
weight <- c(ctl, trt)

lm.D9 <- lm(weight ~ group)
# extract the slope (this is also used to draw a regression line if you wrote abline(lm.D9)
coefficients(lm.D9)["groupTrt"] 
      groupTrt 
   -0.371 
# use the arctan*a1 / (360 / (2*pi)) formula provided by mpiktas
atan(coefficients(lm.D9)["groupTrt"]) * (360/(2 * pi)) 
 groupTrt 
-20.35485 
180-atan(coefficients(lm.D9)["groupTrt"]) * (360/(2 * pi))
 groupTrt 
200.3549 

Vielen Dank für das Beispiel, in diesem Fall sind die Abschlüsse -200?
Dail

Ja. Wenn Sie der Meinung sind, dass Ihr Problem behoben wurde, kreuzen Sie die Antwort von @mpiktas als die richtige an, danke.
Roman Luštrik

@ RomanLuštrik, Sie haben die Teilung um verpasst2π

1
@ RomanLuštrik, ich habe den Code korrigiert und die richtige Ausgabe hinzugefügt. Fühlen Sie sich frei, die Korrektur zu entfernen.
mpiktas
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.