Transformacje logarytmiczne są często zalecane w przypadku danych przechylonych, takich jak miary pieniężne lub pewne miary biologiczne i demograficzne. Przekształcenie logarytmiczne danych zwykle ma wpływ na rozproszenie grudek danych i zebranie razem rozproszonych danych. Na przykład, poniżej znajduje się histogram powierzchni wszystkich 50 stanów USA. Jest on przechylony w prawo z powodu Alaski, Kalifornii, Teksasu i kilku innych.
hist(state.area)
Po transformacji logarytmicznej zauważ, że histogram jest mniej więcej symetryczny. Przesunęliśmy duże stany bliżej siebie i rozłożyliśmy mniejsze stany.
hist(log(state.area))
Po co to robić? Jednym z powodów jest chęć uczynienia danych bardziej „normalnymi”, czyli symetrycznymi. Jeśli wykonujemy analizę statystyczną, która zakłada normalność, transformacja logarytmiczna może pomóc nam spełnić to założenie. Innym powodem jest spełnienie założenia o stałej wariancji w kontekście modelowania liniowego. Jeszcze innym jest pomoc w uczynieniu nieliniowej relacji bardziej liniową. Ale chociaż łatwo jest wprowadzić transformację logarytmiczną, może ona skomplikować interpretację. Załóżmy, że dopasowujemy model liniowy do zmiennej zależnej przekształconej w logarytm. Jak zinterpretować współczynniki? Co zrobić, jeśli mamy zmienne zależne i niezależne przekształcone w logarytmach? To właśnie jest tematem tego artykułu.
Najpierw przedstawimy przepis na interpretację dla tych, którzy chcą tylko szybkiej pomocy. Następnie zagłębimy się nieco bardziej w to, co mówimy o naszym modelu, gdy log-transformujemy nasze dane.
Reguły interpretacji
OK, przeprowadziłeś regresję/dopasowałeś model liniowy i niektóre z twoich zmiennych są log-transformowane.
- Tylko zmienna zależna/odpowiedź jest log-transformowana. Wykładnik współczynnika, odejmij jeden od tej liczby i pomnóż przez 100. Daje to procentowy wzrost (lub spadek) w odpowiedzi na każdy wzrost o jedną jednostkę w zmiennej niezależnej. Przykład: współczynnik wynosi 0,198. (exp(0,198) – 1) * 100 = 21,9. Dla każdego wzrostu o jedną jednostkę w zmiennej niezależnej, nasza zmienna zależna wzrasta o około 22%.
- Tylko zmienna niezależna/preddykcyjna(y) jest log-transformowana. Podziel współczynnik przez 100. To mówi nam, że 1% wzrost w zmiennej niezależnej zwiększa (lub zmniejsza) zmienną zależną o (współczynnik/100) jednostek. Przykład: współczynnik wynosi 0,198. 0.198/100 = 0.00198. Na każdy 1% wzrostu zmiennej niezależnej, nasza zmienna zależna wzrasta o około 0,002. Dla wzrostu o x procent mnożymy współczynnik przez log(1,x). Przykład: Dla każdego 10% wzrostu zmiennej niezależnej, nasza zmienna zależna wzrasta o około 0,198 * log(1,10) = 0,02.
- Zarówno zmienna zależna/odpowiedź, jak i zmienna niezależna/preddyktor(y) są przekształcone logarytmicznie. Interpretuj współczynnik jako procentowy wzrost zmiennej zależnej na każdy 1% wzrostu zmiennej niezależnej. Przykład: współczynnik wynosi 0,198. Na każdy 1% wzrostu zmiennej niezależnej, nasza zmienna zależna wzrasta o około 0,20%. Aby uzyskać procentowy wzrost x, oblicz 1.x jako potęgę współczynnika, odejmij 1 i pomnóż przez 100. Przykład: Dla każdego 20% wzrostu zmiennej niezależnej, nasza zmienna zależna wzrasta o około (1,20 0,198 – 1) * 100 = 3,7 procent.
Co transformacje logiczne naprawdę oznaczają dla twoich modeli
Miło jest wiedzieć, jak poprawnie interpretować współczynniki dla danych przekształconych logarytmicznie, ale ważne jest, aby wiedzieć, co dokładnie sugeruje twój model, gdy zawiera dane przekształcone logarytmicznie. Aby lepiej to zrozumieć, użyjmy programu R do symulacji danych, które wymagają log-transformacji do poprawnej analizy. Zachowamy prostotę z jedną zmienną niezależną i normalnie rozłożonymi błędami. Najpierw przyjrzymy się zmiennej zależnej przekształconej w log.
x <- seq(0.1,5,length.out = 100)set.seed(1)e <- rnorm(100, mean = 0, sd = 0.2)
Pierwsza linia generuje ciąg 100 wartości od 0,1 do 5 i przypisuje go do x. Następna linia ustawia ziarno generatora liczb losowych na 1. Jeśli zrobisz to samo, otrzymasz te same losowo wygenerowane dane, które otrzymaliśmy po uruchomieniu następnej linii. Kod rnorm(100, mean = 0, sd = 0.2)
generuje 100 wartości z rozkładu normalnego o średniej 0 i odchyleniu standardowym 0,2. To będzie nasz „błąd”. Jest to jedno z założeń prostej regresji liniowej: nasze dane mogą być modelowane za pomocą linii prostej, ale będą odbiegać od niej o jakąś losową wartość, którą zakładamy, że pochodzi z rozkładu normalnego o średniej 0 i pewnym odchyleniu standardowym. Przypisujemy nasz błąd do e.
Teraz jesteśmy gotowi do stworzenia naszej zmiennej zależnej przekształconej w logarytm. Wybieramy punkt przecięcia (1.2) i nachylenie (0.2), które mnożymy przez x, a następnie dodajemy nasz błąd losowy, e. Na koniec wykładamy.
y <- exp(1.2 + 0.2 * x + e)
Aby zobaczyć, dlaczego wykładamy, zauważ, co następuje:
$$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)$$
Więc log-transformowana zmienna zależna oznacza, że nasz prosty model liniowy został przekształcony wykładniczo. Przypomnijmy sobie z reguły iloczynu wykładników, że możemy zapisać ostatni wiersz powyżej jako
$y = \text{exp}(\beta_0) \text{exp}(\beta_1x)$$
To dalej implikuje, że nasza zmienna niezależna ma multiplikatywną relację z naszą zmienną zależną zamiast zwykłej relacji addytywnej. Stąd potrzeba wyrażenia wpływu zmiany o jedną jednostkę w x na y w procentach.
Jeśli dopasujemy poprawny model do danych, zauważ, że wykonujemy całkiem dobrą robotę odzyskując prawdziwe wartości parametrów, których użyliśmy do wygenerowania danych.
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
Oszacowany punkt przecięcia 1,226 jest bliski prawdziwej wartości 1,2. Oszacowane nachylenie 0,198 jest bardzo bliskie prawdziwej wartości 0,2. Wreszcie szacowany resztkowy błąd standardowy 0,1805 nie jest zbyt odległy od prawdziwej wartości 0,2.
Przypomnijmy, że aby zinterpretować wartość nachylenia, musimy ją wykładać.
exp(coef(lm1)) x 1.219179
To mówi, że każdy wzrost x o jedną jednostkę jest mnożony przez około 1,22. Lub innymi słowy, dla każdego wzrostu o jedną jednostkę w x, y wzrasta o około 22%. Aby otrzymać 22%, odejmij 1 i pomnóż przez 100.
(exp(coef(lm1)) - 1) * 100 x 21.91786
A co jeśli dopasujemy tylko y zamiast log(y)? Jak możemy się dowiedzieć, że powinniśmy rozważyć transformację logarytmiczną? Patrząc na współczynniki nie dowiemy się zbyt wiele.
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
Jasne, ponieważ wygenerowaliśmy dane, możemy zobaczyć, że współczynniki są dalekie od normy, a resztowy błąd standardowy jest o wiele za wysoki. Ale w prawdziwym życiu nie będziesz tego wiedział! Dlatego właśnie przeprowadzamy diagnostykę regresji. Kluczowym założeniem do sprawdzenia jest stała wariancja błędów. Możemy to zrobić za pomocą wykresu Skala-Lokalizacja. Oto wykres dla modelu, który właśnie przeprowadziliśmy bez przekształcania logicznego y.
plot(lm2, which = 3) # 3 = Scale-Location plot
Zauważ, że standaryzowane reszty mają tendencję wzrostową. Jest to znak, że założenie o stałej wariancji zostało naruszone. Porównaj ten wykres z tym samym wykresem dla poprawnego modelu.
plot(lm1, which = 3)
Linia trendu jest równa, a reszty są równomiernie rozrzucone.
Czy to oznacza, że zawsze powinieneś przekształcać logarytmicznie zmienną zależną, jeśli podejrzewasz, że założenie o stałej wariancji zostało naruszone? Niekoniecznie. Niestała wariancja może być spowodowana innymi błędnymi specyfikacjami w twoim modelu. Zastanów się również, co oznacza modelowanie zmiennej zależnej przekształconej w logarytm. Mówi to, że ma ona multiplikatywną relację z predyktorami. Czy to wydaje się słuszne? Użyj swojego osądu i ekspertyzy tematu.
Teraz rozważmy dane z niezależną zmienną predykcyjną przekształconą w log. To jest łatwiejsze do wygenerowania. Po prostu log-transformujemy x.
y <- 1.2 + 0.2*log(x) + e
Po raz kolejny najpierw dopasowujemy poprawny model i zauważamy, że wykonuje on świetną robotę odzyskując prawdziwe wartości, których użyliśmy do wygenerowania danych:
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
Aby zinterpretować współczynnik nachylenia dzielimy go przez 100.
coef(lm3)/100 log(x) 0.001997892
To mówi nam, że wzrost x o 1% zwiększa zmienną zależną o około 0,002. Dlaczego nam to mówi? Zróbmy trochę matematyki. Poniżej obliczamy zmianę w y przy zmianie x z 1 na 1,01 (czyli wzrost o 1%).
$(\beta_0 + \beta_1 tekst{log}1.01) – (\beta_0 + \beta_1 tekst{log}1)$$
$(\beta_1 tekst{log}1.01 – \beta_1 tekst{log}1$$
$(\beta_1(\beta_1.01 – \tekst{log}1)$$
$$beta_1(\tekst{log}1.01) = \tekst{log}1.01$$
Wynikiem jest pomnożenie współczynnika nachylenia przez log(1.01), który w przybliżeniu jest równy 0.01, czyli \tekst{log}1}{100}$. Stąd interpretacja, że wzrost x o 1% zwiększa zmienną zależną o współczynnik/100.
Po raz kolejny dopasujmy niewłaściwy model, nie podając w składni modelu log-transformacji dla x.
lm4 <- lm(y ~ x)
Przeglądając podsumowanie modelu można zauważyć, że oszacowania współczynników znacznie odbiegają od prawdziwych wartości. Ale w praktyce nigdy nie znamy prawdziwych wartości. Po raz kolejny diagnostyka jest w porządku, aby ocenić adekwatność modelu. Użyteczną diagnostyką w tym przypadku jest wykres reszt częściowych, który może ujawnić odchylenia od liniowości. Przypomnijmy, że modele liniowe zakładają, że predyktory są addytywne i mają liniową zależność ze zmienną odpowiedzi. Pakiet car udostępnia funkcję crPlot do szybkiego tworzenia wykresów reszt częściowych. Wystarczy podać jej obiekt modelu i określić, dla której zmiennej chcemy utworzyć wykres reszt częściowych.
library(car)crPlot(lm4, variable = "x")
Linia prosta reprezentuje określoną zależność między x i y. Linia zakrzywiona jest gładką linią trendu, która podsumowuje zaobserwowaną zależność między x i y. Możemy powiedzieć, że zaobserwowana zależność jest nieliniowa. Porównaj ten wykres z wykresem reszt częściowych dla poprawnego modelu.
crPlot(lm3, variable = "log(x)")
Linie gładkie i dopasowane leżą dokładnie na sobie ujawniając brak poważnych odstępstw od liniowości.
Nie oznacza to, że jeśli widzisz odstępstwa od liniowości, powinieneś od razu założyć, że transformacja logarytmiczna jest jedyną i słuszną poprawką! Nieliniowa relacja może być złożona i nie tak łatwo wyjaśnić ją za pomocą prostej transformacji. Ale transformacja log może być odpowiednia w takich przypadkach i z pewnością jest czymś do rozważenia.
Na koniec rozważmy dane, w których zarówno zmienna zależna, jak i niezależna są przekształcone w log.
y <- exp(1.2 + 0.2 * log(x) + e)
Przyjrzyj się uważnie powyższemu kodowi. Związek między x i y jest teraz zarówno multiplikatywny, jak i nieliniowy!
Jak zwykle możemy dopasować poprawny model i zauważyć, że wykonuje on fantastyczną pracę, odzyskując prawdziwe wartości, których użyliśmy do wygenerowania danych:
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
Zinterpretuj współczynnik x jako procentowy wzrost w y dla każdego 1% wzrostu w x. W tym przypadku jest to około 0,2% wzrost w y na każdy 1% wzrost w x.
Dopasowanie złego modelu po raz kolejny daje współczynnik i resztę standardowych błędów szacunkowych, które są dziko poza celem.
lm6 <- lm(y ~ x)summary(lm6)
Wykresy Scale-Location i Partial-Residual dostarczają dowodów, że coś jest nie tak z naszym modelem. Wykres Scale-Location pokazuje zakrzywioną linię trendu, a wykres Partial-Residual pokazuje liniowe i gładkie linie, które nie pasują do siebie.
plot(lm6, which = 3)
crPlot(lm6, variable = "x")
Skąd w prawdziwym życiu wiedzielibyśmy, że poprawny model wymaga zmiennych niezależnych i zależnych przekształconych w logarytmach? Nie wiedzielibyśmy. Możemy mieć przeczucie oparte na działkach diagnostycznych i doświadczeniu w modelowaniu. Albo możemy mieć pewną wiedzę na temat procesu, który modelujemy, i mieć dobry powód, aby myśleć, że związek jest multiplikatywny i nieliniowy.
Mam nadzieję, że teraz masz lepszy uchwyt nie tylko na to, jak interpretować zmienne przekształcone w log w modelu liniowym, ale także co zmienne przekształcone w log oznaczają dla twojego modelu.
W przypadku pytań lub wyjaśnień dotyczących tego artykułu, skontaktuj się z UVA Library StatLab: [email protected]
Zobacz całą kolekcję artykułów UVA Library StatLab.
Clay Ford
Statistical Research Consultant
University of Virginia Library
August 17, 2018
.