Chapter 5 Linear Regression

5.1 regress

  • Hat das Gewicht eines Autos (weight) einen Einfluss auf den Verbrauch/Reichweite (mpg miles pro galion) des Autos?
  • Mit regress Y X berechnest du den Einfluss einer metrischen oder binären Dummy Variable X auf eine metrischen Zielvariable Y
sysuse auto, clear
regress mpg weight  
(1978 Automobile Data)

      Source |       SS           df       MS      Number of obs   =        74
-------------+----------------------------------   F(1, 72)        =    134.62
       Model |   1591.9902         1   1591.9902   Prob > F        =    0.0000
    Residual |  851.469256        72  11.8259619   R-squared       =    0.6515
-------------+----------------------------------   Adj R-squared   =    0.6467
       Total |  2443.45946        73  33.4720474   Root MSE        =    3.4389

------------------------------------------------------------------------------
         mpg |      Coef.   Std. Err.      t    P>|t|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
      weight |  -.0060087   .0005179   -11.60   0.000    -.0070411   -.0049763
       _cons |   39.44028   1.614003    24.44   0.000     36.22283    42.65774
------------------------------------------------------------------------------

Interpretation: Erhöht sich das Gewicht eines Autos um eine Einheit, dann verringert sich die Reichweite im Durchschnitt um -.006 Einheiten (Miles pro galion). Der Effekt ist statistisch signifikant.


  • By the way. Inwiefern die Modellannahmen gegeben sind, wurden bei keinem der hier aufgeführten Beispiele geprüft. Das ist Dein Job 😌! Beispielsweise sollte man prüfen, inwiefern überhaupt von einem linearen Zusammenhang ausgegangen werden kann. Im Scatter ist dies meistens gut sichtbar:
twoway scatter mpg weight || lfit mpg weight

  • Aber falls es doch nicht so eindeutig ist, hier ein paar andere Beispiele zu Vergleichszwecken 😉

5.2 Vorhersagen per Hand

  • Wie hoch fällt die vorhergesagte Laufleistung bei einem durchschnittlichen Gewicht von 3019 Pfund aus?
  • coeflegend zeigt Dir, wie die Terme der Regression heißen
quietly regress mpg weight  
regress, coeflegend
      Source |       SS           df       MS      Number of obs   =        74
-------------+----------------------------------   F(1, 72)        =    134.62
       Model |   1591.9902         1   1591.9902   Prob > F        =    0.0000
    Residual |  851.469256        72  11.8259619   R-squared       =    0.6515
-------------+----------------------------------   Adj R-squared   =    0.6467
       Total |  2443.45946        73  33.4720474   Root MSE        =    3.4389

------------------------------------------------------------------------------
         mpg |      Coef.  Legend
-------------+----------------------------------------------------------------
      weight |  -.0060087  _b[weight]
       _cons |   39.44028  _b[_cons]
------------------------------------------------------------------------------
  • Mit display können wir dann eine Vorhersage per Hand berechnen:
display _b[_cons] + _b[weight] * 3019
21.300058

5.3 esttab

  • esttab ist ein ado und kann für den Modellvergleich genutzt werden, nachdem das Ado installiert wurde
  • Hierfür müssen wir die Modelle mit estimates store zuvor speichern
  • Der Befehl quietly unterdrückt den Output der eigentlichen Regressionstabelle
  • esttab kann dann genutzt werden, um die Modelle miteinander zu vergleichen
quietly regress mpg weight
estimates store model1
quietly regress mpg weight headroom trunk length turn
estimates store model2

esttab model1 model2
                      (1)             (2)   
                      mpg             mpg   
--------------------------------------------
weight           -0.00601***     -0.00375*  
                 (-11.60)         (-2.24)   

headroom                           0.0121   
                                   (0.02)   

trunk                             -0.0367   
                                  (-0.23)   

length                            -0.0675   
                                  (-1.05)   

turn                              -0.0627   
                                  (-0.33)   

_cons               39.44***        48.25***
                  (24.44)          (6.81)   
--------------------------------------------
N                      74              74   
--------------------------------------------
t statistics in parentheses
* p<0.05, ** p<0.01, *** p<0.001

5.4 coefplot

  • Nutze coefplot zur Visualisierung von Regressionsergebnisse. Coefplot plottet die Koeffizienten der Regression
  • Mehr Infos zu Coefplot?

5.5 Interaktionen (##)

  • Interaktionsterme werden durch ## ausgegeben und Visualisierrung der Interaktionen erhällt man durch den margins Befehl
  • Im nächsten Output: Interaktion zweier metrischer (c.) Variablen:
  • Ferner muss bei metrischen Variablen die Range der Vorhersage angeben werden. Hier: length=(142(10)233) bestimmt die Range der vorhergesagten Werte, mit dem Minimum (142), dem Maximum (233) und sinnvolle Zwischenschritte, die zuvor für die length Variable berechnet wurden
regress mpg c.weight##c.length
quietly margins, at(length=(142(10)233)) 
marginsplot

Interpretation: Die Interaktion dieser beiden Variablen ist nicht signifikant, die Konfidenzintervalle überlappen sich deutlich.

  • Alternativ: Bei Interaktionen zwei binärer (i) Variablen:
regress Y i.X##Z
margins i.X##i.Z
marginsplot

5.6 Log Modelle: Lin-Log

  • UV wird logarithmiert
gen ln_weight = ln(weight)
regress mpg ln_weight  
      Source |       SS           df       MS      Number of obs   =        74
-------------+----------------------------------   F(1, 72)        =    147.33
       Model |  1641.35428         1  1641.35428   Prob > F        =    0.0000
    Residual |  802.105178        72  11.1403497   R-squared       =    0.6717
-------------+----------------------------------   Adj R-squared   =    0.6672
       Total |  2443.45946        73  33.4720474   Root MSE        =    3.3377

------------------------------------------------------------------------------
         mpg |      Coef.   Std. Err.      t    P>|t|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
   ln_weight |  -17.80317   1.466715   -12.14   0.000    -20.72702   -14.87933
       _cons |   163.3444   11.70898    13.95   0.000      140.003    186.6858
------------------------------------------------------------------------------

Interpretation: Mit einem Anstieg des Gewichts um 1 Prozent reduziert sich die durchschnittliche Reichweite um -.178 (beta/100) Einheiten.

5.7 Log-Lin

  • AV wird logarithmiert
gen ln_mpg = ln(mpg)
regress ln_mpg weight  
      Source |       SS           df       MS      Number of obs   =        74
-------------+----------------------------------   F(1, 72)        =    179.26
       Model |  3.52530845         1  3.52530845   Prob > F        =    0.0000
    Residual |   1.4159149        72  .019665485   R-squared       =    0.7134
-------------+----------------------------------   Adj R-squared   =    0.7095
       Total |  4.94122335        73  .067687991   Root MSE        =    .14023

------------------------------------------------------------------------------
      ln_mpg |      Coef.   Std. Err.      t    P>|t|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
      weight |  -.0002828   .0000211   -13.39   0.000    -.0003249   -.0002407
       _cons |   3.878298   .0658171    58.93   0.000     3.747094    4.009502
------------------------------------------------------------------------------

Interpretation: Erhört sich das Gewicht um eine Einheit, so reduziert sich die Reichweite im Durchschnitt approximativ um 0,02 %.

5.8 Log-Log

  • UV und AV sind logarithmiert
regress ln_mpg ln_weight  
      Source |       SS           df       MS      Number of obs   =        74
-------------+----------------------------------   F(1, 72)        =    179.41
       Model |  3.52612925         1  3.52612925   Prob > F        =    0.0000
    Residual |   1.4150941        72  .019654085   R-squared       =    0.7136
-------------+----------------------------------   Adj R-squared   =    0.7096
       Total |  4.94122335        73  .067687991   Root MSE        =    .14019

------------------------------------------------------------------------------
      ln_mpg |      Coef.   Std. Err.      t    P>|t|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
   ln_weight |  -.8251737    .061606   -13.39   0.000    -.9479829   -.7023645
       _cons |   9.608391   .4918087    19.54   0.000     8.627989    10.58879
------------------------------------------------------------------------------

Interpretation: Erhöht sich das Gewicht um 1 %, reduziert sich die Reichweite im Durchschnitt um 8,2 %.

5.9 Optionen: robust

  • Robuste Standardfehler erhällt man durch die Option vce(robust)
regress mpg weight, vce(robust)
Linear regression                               Number of obs     =         74
                                                F(1, 72)          =     105.83
                                                Prob > F          =     0.0000
                                                R-squared         =     0.6515
                                                Root MSE          =     3.4389

------------------------------------------------------------------------------
             |               Robust
         mpg |      Coef.   Std. Err.      t    P>|t|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
      weight |  -.0060087   .0005841   -10.29   0.000     -.007173   -.0048443
       _cons |   39.44028    1.98832    19.84   0.000     35.47664    43.40393
------------------------------------------------------------------------------

5.10 e(sample)

  • e(sample) markiert, welche Fälle in der Analyse berücksichtigt wurden, so kann die Fallzahl beim Vergleich mehrerer Modelle “konstant” gehalten werden
  • Hierfür wird zuerst das umfangreichere Modell gerechnet, da jede weitere Variable im Model die Anzahl an Missing erhöhen kann. Danach wird eine Variable mit dem Namen sample generiert die anzeigt, welche Fälle berücksichtigt wurden
  • Auf Basis dieser Variable können dann die “kleineren” Modelle mit Hilfe des if berechnet werden
quietly regress mpg weight headroom trunk length turn
gen sample = 1 if e(sample)

quietly regress mpg weight if sample == 1 
quietly regress mpg weight headroom trunk length turn if sample == 1 

5.11 ereturn list

  • ereturn list zeigt, welche Terme Stata bei der Regression berechnet hat und wie die einzelnen Terme intern heißen
ereturn list
scalars:
                  e(N) =  74
               e(df_m) =  5
               e(df_r) =  68
                  e(F) =  26.66054023704533
                 e(r2) =  .6622002606043995
               e(rmse) =  3.4839969622233
                e(mss) =  1618.059490830339
                e(rss) =  825.3999686291203
               e(r2_a) =  .63736204447237
                 e(ll) =  -194.2381619431207
               e(ll_0) =  -234.3943376482347
               e(rank) =  6

macros:
            e(cmdline) : "regress mpg weight headroom trunk length turn if .."
              e(title) : "Linear regression"
          e(marginsok) : "XB default"
                e(vce) : "ols"
             e(depvar) : "mpg"
                e(cmd) : "regress"
         e(properties) : "b V"
            e(predict) : "regres_p"
              e(model) : "ols"
          e(estat_cmd) : "regress_estat"

matrices:
                  e(b) :  1 x 6
                  e(V) :  6 x 6

functions:
             e(sample)