Logarithmentransformationen werden häufig für schiefe Daten empfohlen, wie z. B. monetäre Maße oder bestimmte biologische und demografische Maße. Die Logarithmentransformation von Daten hat in der Regel den Effekt, dass Datenklumpen ausgebreitet und verstreute Daten zusammengeführt werden. Das folgende Beispiel zeigt ein Histogramm der Flächen aller 50 US-Bundesstaaten. Es ist aufgrund von Alaska, Kalifornien, Texas und einigen anderen Staaten nach rechts verzerrt.
hist(state.area)
Nach einer Log-Transformation ist das Histogramm mehr oder weniger symmetrisch. Wir haben die großen Zustände näher zusammengerückt und die kleineren Zustände auseinandergezogen.
hist(log(state.area))
Warum dies tun? Ein Grund ist, die Daten „normaler“ oder symmetrischer zu machen. Wenn wir eine statistische Analyse durchführen, die Normalität voraussetzt, kann eine Logarithmentransformation dazu beitragen, diese Annahme zu erfüllen. Ein anderer Grund ist die Einhaltung der Annahme einer konstanten Varianz im Zusammenhang mit der linearen Modellierung. Ein weiterer Grund ist, eine nicht lineare Beziehung linearer zu machen. Eine Log-Transformation ist zwar einfach zu implementieren, kann aber die Interpretation erschweren. Nehmen wir an, wir passen ein lineares Modell mit einer log-transformierten abhängigen Variable an. Wie interpretieren wir die Koeffizienten? Was ist, wenn die abhängigen und unabhängigen Variablen log-transformiert sind? Das ist das Thema dieses Artikels.
Zunächst bieten wir ein Rezept für die Interpretation für diejenigen, die nur eine schnelle Hilfe benötigen. Dann gehen wir etwas tiefer in die Materie ein, was wir über unser Modell aussagen, wenn wir unsere Daten log-transformieren.
Regeln für die Interpretation
OK, Sie haben eine Regression durchgeführt/ein lineares Modell angepasst und einige Ihrer Variablen sind log-transformiert.
- Nur die abhängige/antwortliche Variable ist log-transformiert. Potenzieren Sie den Koeffizienten, ziehen Sie von dieser Zahl eins ab und multiplizieren Sie mit 100. Dies ergibt die prozentuale Zunahme (oder Abnahme) der Antwort für jede Zunahme der unabhängigen Variablen um eine Einheit. Beispiel: Der Koeffizient ist 0,198. (exp(0,198) – 1) * 100 = 21,9. Für jede Erhöhung der unabhängigen Variablen um eine Einheit steigt die abhängige Variable um etwa 22 %.
- Nur die unabhängige(n) Prädiktorvariable(n) sind log-transformiert. Teilen Sie den Koeffizienten durch 100. Das bedeutet, dass ein Anstieg der unabhängigen Variable um 1 % die abhängige Variable um (Koeffizient/100) Einheiten erhöht (oder verringert). Beispiel: Der Koeffizient ist 0,198. 0.198/100 = 0.00198. Für jede Erhöhung der unabhängigen Variablen um 1 % erhöht sich unsere abhängige Variable um etwa 0,002. Für einen Anstieg um x Prozent multiplizieren Sie den Koeffizienten mit log(1.x). Beispiel: Für jede 10-prozentige Erhöhung der unabhängigen Variable erhöht sich unsere abhängige Variable um etwa 0,198 * log(1,10) = 0,02.
- Sowohl die abhängige/Reaktionsvariable als auch die unabhängige/Prädiktorvariable(n) sind log-transformiert. Interpretieren Sie den Koeffizienten als den prozentualen Anstieg der abhängigen Variablen pro 1 % Anstieg der unabhängigen Variablen. Beispiel: Der Koeffizient beträgt 0,198. Für jede Erhöhung der unabhängigen Variablen um 1 % steigt unsere abhängige Variable um etwa 0,20 %. Für die x-prozentige Zunahme berechnen Sie 1,x hoch dem Koeffizienten, ziehen 1 ab und multiplizieren mit 100. Beispiel: Für jede 20-prozentige Erhöhung der unabhängigen Variable erhöht sich unsere abhängige Variable um etwa (1,20 0,198 – 1) * 100 = 3,7 Prozent.
Was Logarithmentransformationen für Ihre Modelle wirklich bedeuten
Es ist gut zu wissen, wie man Koeffizienten für logarithmierte Daten richtig interpretiert, aber es ist auch wichtig zu wissen, was genau Ihr Modell aussagt, wenn es logarithmierte Daten enthält. Um ein besseres Verständnis zu bekommen, verwenden wir R, um einige Daten zu simulieren, die für eine korrekte Analyse log-transformiert werden müssen. Wir beschränken uns auf eine unabhängige Variable und normalverteilte Fehler. Zunächst betrachten wir eine log-transformierte abhängige Variable.
x <- seq(0.1,5,length.out = 100)set.seed(1)e <- rnorm(100, mean = 0, sd = 0.2)
Die erste Zeile erzeugt eine Folge von 100 Werten von 0,1 bis 5 und weist sie x zu. Die nächste Zeile setzt den Zufallszahlengenerator auf 1. Wenn Sie dasselbe tun, erhalten Sie dieselben zufällig erzeugten Daten, die wir erhalten haben, wenn Sie die nächste Zeile ausführen. Der Code rnorm(100, mean = 0, sd = 0.2)
erzeugt 100 Werte aus einer Normalverteilung mit einem Mittelwert von 0 und einer Standardabweichung von 0,2. Dies wird unser „Fehler“ sein. Dies ist eine der Annahmen der einfachen linearen Regression: Unsere Daten können mit einer geraden Linie modelliert werden, aber sie weichen um einen zufälligen Betrag ab, von dem wir annehmen, dass er aus einer Normalverteilung mit Mittelwert 0 und einer gewissen Standardabweichung stammt. Wir ordnen unseren Fehler e zu.
Nun sind wir bereit, unsere log-transformierte abhängige Variable zu erstellen. Wir wählen einen Achsenabschnitt (1,2) und eine Steigung (0,2), die wir mit x multiplizieren, und fügen dann unseren zufälligen Fehler, e, hinzu.
y <- exp(1.2 + 0.2 * x + e)
Um zu sehen, warum wir potenzieren, beachten Sie das Folgende:
$$$text{log}(y) = \beta_0 + \beta_1x$$$
$$text{exp}(\text{log}(y)) = \text{exp}(\beta_0 + \beta_1x)$$$
$$y = \text{exp}(\beta_0 + \beta_1x)$$
So eine log-transformierte abhängige Variable impliziert, dass unser einfaches lineares Modell exponentiiert wurde. Erinnern Sie sich an die Produktregel der Exponenten, dass wir die letzte Zeile oben umschreiben können als
$$y = \text{exp}(\beta_0) \text{exp}(\beta_1x)$$
Das bedeutet weiter, dass unsere unabhängige Variable eine multiplikative Beziehung zu unserer abhängigen Variable hat statt der üblichen additiven Beziehung. Daher ist es notwendig, die Auswirkung einer Änderung von x um eine Einheit auf y in Prozent auszudrücken.
Wenn wir das richtige Modell an die Daten anpassen, stellen wir fest, dass wir die wahren Parameterwerte, die wir zur Erzeugung der Daten verwendet haben, ziemlich gut wiederherstellen.
lm1 <- lm(log(y) ~ x)summary(lm1)Call:lm(formula = log(y) ~ x)Residuals: Min 1Q Median 3Q Max -0.4680 -0.1212 0.0031 0.1170 0.4595 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 1.22643 0.03693 33.20 <2e-16 ***x 0.19818 0.01264 15.68 <2e-16 ***---Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1Residual standard error: 0.1805 on 98 degrees of freedomMultiple R-squared: 0.7151,Adjusted R-squared: 0.7122 F-statistic: 246 on 1 and 98 DF, p-value: < 2.2e-16
Der geschätzte Achsenabschnitt von 1,226 liegt nahe am wahren Wert von 1,2. Die geschätzte Steigung von 0,198 kommt dem wahren Wert von 0,2 sehr nahe. Schließlich ist der geschätzte Reststandardfehler von 0,1805 nicht allzu weit vom wahren Wert von 0,2 entfernt.
Erinnern Sie sich daran, dass wir zur Interpretation des Steigungswerts diesen potenzieren müssen.
exp(coef(lm1)) x 1.219179
Das bedeutet, dass jede Zunahme von x um eine Einheit mit etwa 1,22 multipliziert wird. Oder anders ausgedrückt, für jede Erhöhung von x um eine Einheit steigt y um etwa 22 %. Um 22 % zu erhalten, subtrahieren Sie 1 und multiplizieren Sie mit 100.
(exp(coef(lm1)) - 1) * 100 x 21.91786
Was wäre, wenn wir nur y anstelle von log(y) anpassen? Wie könnten wir herausfinden, dass wir eine Log-Transformation in Betracht ziehen sollten? Ein Blick auf die Koeffizienten sagt nicht viel aus.
lm2 <- lm(y ~ x)summary(lm2)Call:lm(formula = y ~ x)Residuals: Min 1Q Median 3Q Max -2.3868 -0.6886 -0.1060 0.5298 3.3383 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 3.00947 0.23643 12.73 <2e-16 ***x 1.16277 0.08089 14.38 <2e-16 ***---Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1Residual standard error: 1.156 on 98 degrees of freedomMultiple R-squared: 0.6783,Adjusted R-squared: 0.675 F-statistic: 206.6 on 1 and 98 DF, p-value: < 2.2e-16
Sicherlich, da wir die Daten generiert haben, können wir sehen, dass die Koeffizienten weit daneben liegen und der Reststandardfehler viel zu hoch ist. Aber im wirklichen Leben werden Sie das nicht wissen! Aus diesem Grund führen wir Regressionsdiagnosen durch. Eine der wichtigsten Annahmen, die es zu überprüfen gilt, ist die konstante Varianz der Fehler. Wir können dies mit einem Skalen-Ort-Diagramm tun. Hier ist die Darstellung für das Modell, das wir gerade ohne Log-Transformation von y durchgeführt haben.
plot(lm2, which = 3) # 3 = Scale-Location plot
Beachten Sie, dass die standardisierten Residuen nach oben tendieren. Dies ist ein Zeichen dafür, dass die Annahme der konstanten Varianz verletzt wurde. Vergleichen Sie diese Darstellung mit der gleichen Darstellung für das korrekte Modell.
plot(lm1, which = 3)
Die Trendlinie ist gleichmäßig und die Residuen sind gleichmäßig gestreut.
Bedeutet dies, dass Sie Ihre abhängige Variable immer log-transformieren sollten, wenn Sie vermuten, dass die Annahme der konstanten Varianz verletzt wurde? Nicht unbedingt. Die nicht konstante Varianz kann auf andere Fehlspezifizierungen in Ihrem Modell zurückzuführen sein. Denken Sie auch darüber nach, was die Modellierung einer log-transformierten abhängigen Variable bedeutet. Es bedeutet, dass sie eine multiplikative Beziehung zu den Prädiktoren hat. Ist das richtig? Nutzen Sie Ihr Urteilsvermögen und Ihr Fachwissen.
Betrachten wir nun Daten mit einer log-transformierten unabhängigen Prädiktorvariable. Diese ist einfacher zu erzeugen. Wir führen einfach eine Log-Transformation von x durch.
y <- 1.2 + 0.2*log(x) + e
Auch hier passen wir zunächst das korrekte Modell an und stellen fest, dass es die wahren Werte, die wir zur Generierung der Daten verwendet haben, sehr gut wiedergibt:
lm3 <- lm(y ~ log(x))summary(lm3)Call:lm(formula = y ~ log(x))Residuals: Min 1Q Median 3Q Max -0.46492 -0.12063 0.00112 0.11661 0.45864 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 1.22192 0.02308 52.938 < 2e-16 ***log(x) 0.19979 0.02119 9.427 2.12e-15 ***---Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1Residual standard error: 0.1806 on 98 degrees of freedomMultiple R-squared: 0.4756,Adjusted R-squared: 0.4702 F-statistic: 88.87 on 1 and 98 DF, p-value: 2.121e-15
Um den Steigungskoeffizienten zu interpretieren, dividieren wir ihn durch 100.
coef(lm3)/100 log(x) 0.001997892
Das sagt uns, dass eine 1%ige Erhöhung von x die abhängige Variable um etwa 0,002 erhöht. Warum sagt sie uns das? Lassen Sie uns ein wenig rechnen. Im Folgenden berechnen wir die Veränderung von y bei einer Änderung von x von 1 auf 1,01 (d. h. eine Erhöhung um 1 %).
$$(\beta_0 + \beta_1\text{log}1.01) – (\beta_0 + \beta_1\text{log}1)$$
$$\beta_1\text{log}1.01 – \beta_1\text{log}1$$$
$$\beta_1(\text{log}1.01 – \text{log}1)$$
$$\beta_1\text{log}\frac{1.01}{1} = \beta_1\text{log}1.01$$
Das Ergebnis ist die Multiplikation des Steigungskoeffizienten mit log(1.01), was ungefähr gleich 0.01 ist, oder \(\frac{1}{100}\). Daraus ergibt sich die Interpretation, dass eine 1%ige Erhöhung von x die abhängige Variable um den Koeffizienten/100 erhöht.
Wir passen wieder einmal ein falsches Modell an, indem wir es versäumen, in der Modellsyntax eine Log-Transformation für x anzugeben.
lm4 <- lm(y ~ x)
Wenn man sich eine Zusammenfassung des Modells ansieht, wird man feststellen, dass die Schätzungen der Koeffizienten weit von den wahren Werten entfernt sind. Aber in der Praxis kennen wir die wahren Werte nie. Auch hier ist eine Diagnose erforderlich, um die Angemessenheit des Modells zu beurteilen. Eine nützliche Diagnose ist in diesem Fall eine partielle Restwertdarstellung, die Abweichungen von der Linearität aufzeigen kann. Bei linearen Modellen wird davon ausgegangen, dass die Prädiktoren additiv sind und eine lineare Beziehung zur Antwortvariablen haben. Das car-Paket bietet die Funktion crPlot zur schnellen Erstellung von partiellen Residualdiagrammen. Übergeben Sie ihr einfach das Modellobjekt und geben Sie an, für welche Variable Sie die partielle Residualdarstellung erstellen möchten.
library(car)crPlot(lm4, variable = "x")
Die gerade Linie stellt die angegebene Beziehung zwischen x und y dar. Die gebogene Linie ist eine glatte Trendlinie, die die beobachtete Beziehung zwischen x und y zusammenfasst. Vergleichen Sie diese Darstellung mit der partiellen Rückstandsdarstellung für das korrekte Modell.
crPlot(lm3, variable = "log(x)")
Die glatte und die angepasste Linie liegen direkt übereinander und zeigen keine ernsthaften Abweichungen von der Linearität.
Das bedeutet nicht, dass man bei Abweichungen von der Linearität sofort annehmen sollte, dass eine Logarithmentransformation die einzige Lösung ist! Die nichtlineare Beziehung kann komplex sein und lässt sich nicht so leicht durch eine einfache Transformation erklären. Aber eine Log-Transformation kann in solchen Fällen geeignet sein und sollte auf jeden Fall in Betracht gezogen werden.
Betrachten wir abschließend Daten, bei denen sowohl die abhängige als auch die unabhängige Variable logarithmisch transformiert sind.
y <- exp(1.2 + 0.2 * log(x) + e)
Schauen Sie sich den obigen Code genau an. Die Beziehung zwischen x und y ist jetzt sowohl multiplikativ als auch nichtlinear!
Wie üblich können wir das richtige Modell anpassen und feststellen, dass es die wahren Werte, die wir zur Generierung der Daten verwendet haben, hervorragend wiederherstellt:
lm5 <- lm(log(y)~ log(x))summary(lm5)Call:lm(formula = log(y) ~ log(x))Residuals: Min 1Q Median 3Q Max -0.46492 -0.12063 0.00112 0.11661 0.45864 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 1.22192 0.02308 52.938 < 2e-16 ***log(x) 0.19979 0.02119 9.427 2.12e-15 ***---Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1Residual standard error: 0.1806 on 98 degrees of freedomMultiple R-squared: 0.4756,Adjusted R-squared: 0.4702 F-statistic: 88.87 on 1 and 98 DF, p-value: 2.121e-15
Interpretieren Sie den x-Koeffizienten als die prozentuale Zunahme von y für jede 1 %ige Zunahme von x. In diesem Fall ist das etwa ein Anstieg von y um 0,2 % für jeden Anstieg von x um 1 %.
Die Anpassung des falschen Modells führt erneut zu Schätzungen von Koeffizienten und Reststandardfehlern, die weit vom Ziel entfernt sind.
lm6 <- lm(y ~ x)summary(lm6)
Die Skalen-Ort- und Teil-Residuen-Diagramme zeigen, dass mit unserem Modell etwas nicht stimmt. Der Scale-Location Plot zeigt eine gekrümmte Trendlinie und der Partial-Residual Plot zeigt lineare und glatte Linien, die nicht übereinstimmen.
plot(lm6, which = 3)
crPlot(lm6, variable = "x")
Woher würden wir im wirklichen Leben wissen, dass das richtige Modell log-transformierte unabhängige und abhängige Variablen erfordert? Wir wissen es nicht. Wir könnten eine Vermutung haben, die auf diagnostischen Diagrammen und Modellierungserfahrung beruht. Oder wir verfügen über ein gewisses Fachwissen über den Prozess, den wir modellieren, und haben guten Grund zu der Annahme, dass die Beziehung multiplikativ und nichtlinear ist.
Hoffentlich wissen Sie jetzt nicht nur besser, wie man log-transformierte Variablen in einem linearen Modell interpretiert, sondern auch, was log-transformierte Variablen für Ihr Modell bedeuten.
Bei Fragen oder Unklarheiten zu diesem Artikel wenden Sie sich bitte an das StatLab der UVA-Bibliothek: [email protected]
Die gesamte Sammlung der StatLab-Artikel der UVA-Bibliothek anzeigen.
Clay Ford
Statistical Research Consultant
University of Virginia Library
August 17, 2018