Logaritmické transformace se často doporučují u zkreslených dat, jako jsou peněžní míry nebo některé biologické a demografické míry. Logaritmická transformace dat má obvykle za následek rozprostření shluků dat a sjednocení rozprostřených dat. Níže je například histogram ploch všech 50 států USA. Je zkosený doprava kvůli Aljašce, Kalifornii, Texasu a několika dalším státům.

hist(state.area)

Po logaritmické transformaci si všimněte, že histogram je víceméně symetrický. Velké stavy jsme posunuli blíže k sobě a menší stavy jsme rozprostřeli.

hist(log(state.area))

Proč to dělat? Jedním z důvodů je, aby data byla „normálnější“ neboli symetrická. Pokud provádíme statistickou analýzu, která předpokládá normalitu, může nám logaritmická transformace pomoci tento předpoklad splnit. Dalším důvodem je pomoci splnit předpoklad konstantního rozptylu v kontextu lineárního modelování. Dalším důvodem je pomoci učinit nelineární vztah více lineárním. Ale i když je snadné logaritmickou transformaci zavést, může to komplikovat interpretaci. Řekněme, že fitujeme lineární model s logaritmicky transformovanou závislou proměnnou. Jak budeme interpretovat koeficienty? Co když máme logaritmicky transformované závislé i nezávislé proměnné? To je téma tohoto článku.

Nejprve uvedeme recept na interpretaci pro ty, kteří chtějí jen rychlou pomoc. Pak se ponoříme trochu hlouběji do toho, co říkáme o našem modelu, když logaritmicky transformujeme naše data.

Pravidla pro interpretaci

OK, provedli jste regresi/vhodili lineární model a některé z vašich proměnných jsou logaritmicky transformovány.

  1. Logaritmicky transformovaná je pouze závislá/odpovědní proměnná. Exponentizujte koeficient, odečtěte od tohoto čísla jedničku a vynásobte ho 100. Tím získáte procentuální nárůst (nebo pokles) odpovědi na každé zvýšení nezávislé proměnné o jednu jednotku. Příklad: Koeficient je 0,198. (exp(0,198) – 1) * 100 = 21,9. Pro každé zvýšení nezávislé proměnné o jednu jednotku se naše závislá proměnná zvýší přibližně o 22 %.
  2. Pouze nezávislá/predikční proměnná (proměnné) je logaritmicky transformována. Koeficient vydělte 100. To nám říká, že 1% zvýšení nezávislé proměnné zvýší (nebo sníží) závislou proměnnou o (koeficient/100) jednotek. Příklad: koeficient je 0,198. 0.198/100 = 0.00198. Na každé 1% zvýšení nezávislé proměnné se naše závislá proměnná zvýší přibližně o 0,002. Pro zvýšení o x procent vynásobíme koeficient log(1,x). Příklad: Pro každé 10% zvýšení nezávislé proměnné se naše závislá proměnná zvýší přibližně o 0,198 * log(1,10) = 0,02.
  3. Jak závislá/odpovědní proměnná, tak nezávislá/predikátorová proměnná (proměnné) jsou logaritmicky transformovány. Interpretujte koeficient jako procentuální nárůst závislé proměnné na každé 1% zvýšení nezávislé proměnné. Příklad: Koeficient je 0,198. Na každé 1% zvýšení nezávislé proměnné se naše závislá proměnná zvýší přibližně o 0,20 %. Pro x procentní nárůst vypočítejte 1,x na mocninu koeficientu, odečtěte 1 a vynásobte 100. Příklad: Pro každé 20% zvýšení nezávislé proměnné se naše závislá proměnná zvýší přibližně o (1,20 0,198 – 1) * 100 = 3,7 %.

Co skutečně znamenají logaritmické transformace pro vaše modely

Je hezké vědět, jak správně interpretovat koeficienty pro logaritmicky transformovaná data, ale je důležité vědět, co přesně váš model naznačuje, když obsahuje logaritmicky transformovaná data. Abychom tomu lépe porozuměli, pojďme si pomocí R nasimulovat nějaká data, která budou pro správnou analýzu vyžadovat logaritmickou transformaci. Necháme to jednoduché s jednou nezávislou proměnnou a normálně rozdělenými chybami. Nejprve se podíváme na logaritmicky transformovanou závislou proměnnou.

x <- seq(0.1,5,length.out = 100)set.seed(1)e <- rnorm(100, mean = 0, sd = 0.2)

První řádek vygeneruje posloupnost 100 hodnot od 0,1 do 5 a přiřadí ji x. Další řádek nastaví semeno generátoru náhodných čísel na 1. Pokud uděláte totéž, dostanete stejná náhodně vygenerovaná data, jaká jsme dostali po spuštění dalšího řádku. Kód rnorm(100, mean = 0, sd = 0.2) vygeneruje 100 hodnot z normálního rozdělení se střední hodnotou 0 a směrodatnou odchylkou 0,2. Na základě těchto hodnot se vygeneruje 100 náhodných čísel. To bude naše „chyba“. To je jeden z předpokladů jednoduché lineární regrese: naše data lze modelovat pomocí přímky, ale budou vychýlená o nějaké náhodné množství, o kterém předpokládáme, že pochází z Normálního rozdělení se střední hodnotou 0 a nějakou směrodatnou odchylkou. Naší chybě přiřadíme hodnotu e.

Nyní jsme připraveni vytvořit naši logaritmicky transformovanou závislou proměnnou. Zvolíme intercept (1,2) a sklon (0,2), které vynásobíme x, a poté přidáme naši náhodnou chybu, e. Nakonec exponentujeme.

y <- exp(1.2 + 0.2 * x + e)

Abyste věděli, proč exponencializujeme, všimněte si následujícího:

$$\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)$$

Takže log-transformovaná závislá proměnná znamená, že náš jednoduchý lineární model byl exponencializován. Připomeňme si z pravidla součinu exponentů, že poslední řádek výše můžeme přepsat jako

$$y = \text{exp}(\beta_0) \text{exp}(\beta_1x)$$

To dále znamená, že naše nezávislá proměnná má s naší závislou proměnnou multiplikativní vztah místo obvyklého vztahu aditivního. Z toho vyplývá potřeba vyjádřit vliv změny x o jednu jednotku na y v procentech.

Přiřadíme-li k datům správný model, všimněte si, že se nám docela dobře daří obnovit skutečné hodnoty parametrů, které jsme použili při generování dat.

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

Odhadnutá hodnota interceptu 1,226 je blízká skutečné hodnotě 1,2. Všimněte si, že se nám daří obnovit skutečné hodnoty parametrů, které jsme použili při generování dat. Odhadnutý sklon 0,198 je velmi blízký skutečné hodnotě 0,2. A konečně odhadnutá směrodatná chyba reziduí 0,1805 není příliš vzdálená od skutečné hodnoty 0,2.

Připomeňme si, že k interpretaci hodnoty sklonu ji musíme exponencializovat.

exp(coef(lm1)) x 1.219179 

To říká, že každé zvýšení x o jednu jednotku se vynásobí přibližně 1,22. Nebo jinak řečeno, při každém zvýšení x o jednu jednotku se y zvýší přibližně o 22 %. Abychom získali 22 %, odečteme 1 a vynásobíme 100.

(exp(coef(lm1)) - 1) * 100 x 21.91786 

Co kdybychom místo log(y) dosadili jen y? Jak bychom mohli zjistit, že bychom měli uvažovat o logaritmické transformaci? Pouhý pohled na koeficienty vám toho moc neřekne.

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

Jistě, protože jsme data vygenerovali, vidíme, že koeficienty jsou hodně mimo a reziduální standardní chyba je příliš vysoká. Ale v reálném životě to nepoznáte! Proto provádíme regresní diagnostiku. Klíčovým předpokladem pro kontrolu je konstantní rozptyl chyb. To můžeme provést pomocí grafu měřítka a umístění. Zde je graf pro model, který jsme právě provedli bez logaritmické transformace y.

plot(lm2, which = 3) # 3 = Scale-Location plot

Všimněte si, že standardizovaná rezidua mají rostoucí tendenci. To je známka toho, že byl porušen předpoklad konstantního rozptylu. Porovnejte tento graf se stejným grafem pro správný model.

plot(lm1, which = 3)

Trendová čára je rovnoměrná a rezidua jsou rovnoměrně rozptýlena.

Znamená to, že byste měli vždy logaritmovat závislou proměnnou, pokud máte podezření, že byl porušen předpoklad konstantní variace? Ne nutně. Nekonstantní rozptyl může být způsoben jinými chybnými specifikacemi vašeho modelu. Zamyslete se také nad tím, co modelování logaritmicky transformované závislé proměnné znamená. Říká to, že má multiplikativní vztah s prediktory. Zdá se vám to správné? Použijte svůj úsudek a odborné znalosti předmětu.

Nyní uvažujme data s logaritmicky transformovanou nezávislou predikční proměnnou. Ta se vytváří snadněji. Jednoduše logaritmicky transformujeme x.

y <- 1.2 + 0.2*log(x) + e

Znovu nejprve napasujeme správný model a všimneme si, že skvěle obnovuje skutečné hodnoty, které jsme použili při generování dat:

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

Pro interpretaci koeficientu sklonu jej vydělíme 100.

coef(lm3)/100 log(x) 0.001997892 

To nám říká, že zvýšení x o 1 % zvýší závislou proměnnou přibližně o 0,002. To znamená, že při nárůstu x o 1 % se závislá proměnná zvýší přibližně o 0,002. Proč nám to říká? Pojďme si to trochu spočítat. Níže vypočítáme změnu y při změně x z 1 na 1,01 (tj. při 1% zvýšení).

$$(\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$

Výsledkem je vynásobení koeficientu sklonu log(1,01), což je přibližně rovno 0,01, neboli \(\frac{1}{100}\). Z toho plyne interpretace, že 1% nárůst x zvýší závislou proměnnou o koeficient/100.

Znovu napasujme špatný model tím, že v syntaxi modelu nezadáme logaritmickou transformaci pro x.

lm4 <- lm(y ~ x)

Pohledem na shrnutí modelu zjistíme, že odhady koeficientů jsou značně vzdálené od skutečných hodnot. V praxi však skutečné hodnoty nikdy neznáme. K posouzení přiměřenosti modelu je opět na místě diagnostika. Užitečnou diagnostikou je v tomto případě parciální reziduální graf, který může odhalit odchylky od linearity. Připomeňme, že lineární modely předpokládají, že prediktory jsou aditivní a mají lineární vztah s proměnnou odezvy. Balíček car poskytuje funkci crPlot pro rychlé vytvoření parciálních reziduálních grafů. Stačí jí zadat objekt modelu a určit, pro kterou proměnnou chcete vytvořit parciální reziduální graf.

library(car)crPlot(lm4, variable = "x")

Přímka představuje zadaný vztah mezi x a y. Zakřivená přímka je hladká trendová čára, která shrnuje pozorovaný vztah mezi x a y. Můžeme říci, že pozorovaný vztah je nelineární. Porovnejte tento graf s grafem částečné reziduální křivky pro správný model.

crPlot(lm3, variable = "log(x)")

Hladká a přizpůsobená přímka jsou přímo nad sebou a neodhalují žádné závažné odchylky od linearity.

To neznamená, že pokud vidíte odchylky od linearity, měli byste okamžitě předpokládat, že logaritmická transformace je jediným řešením! Nelineární vztah může být složitý a nelze jej tak snadno vysvětlit jednoduchou transformací. Logaritmická transformace však může být v takových případech vhodná a rozhodně je třeba ji zvážit.

Nakonec uvažujme data, kde jsou logaritmicky transformovány jak závislá, tak nezávislá proměnná.

y <- exp(1.2 + 0.2 * log(x) + e)

Podívejte se pozorně na výše uvedený kód. Vztah mezi x a y je nyní multiplikativní a nelineární!“

Jako obvykle můžeme napasovat správný model a všimněte si, že skvěle obnovuje skutečné hodnoty, které jsme použili při generování dat:

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

Interpretujte koeficient x jako procentuální nárůst y na každé 1% zvýšení x. V tomto případě je to přibližně 0,2% nárůst y na každé 1% zvýšení x.

Při dosazení špatného modelu opět získáme odhady koeficientů a standardních chyb reziduí, které jsou šíleně mimo cíl.

lm6 <- lm(y ~ x)summary(lm6)

Kartogramy měřítka a polohy a dílčího rezidua poskytují důkaz, že s naším modelem není něco v pořádku. Graf Scale-Location ukazuje zakřivenou trendovou linii a graf Partial-Residual ukazuje lineární a hladké linie, které se neshodují.

plot(lm6, which = 3)

crPlot(lm6, variable = "x")

Jak bychom v reálném životě poznali, že správný model vyžaduje logaritmicky transformované nezávislé a závislé proměnné? Nevěděli bychom to. Mohli bychom mít tušení na základě diagnostických grafů a zkušeností s modelováním. Nebo bychom mohli mít určité odborné znalosti o procesu, který modelujeme, a měli bychom dobrý důvod se domnívat, že vztah je multiplikativní a nelineární.

Doufejme, že nyní lépe chápete nejen to, jak interpretovat logaritmicky transformované proměnné v lineárním modelu, ale také co logaritmicky transformované proměnné znamenají pro váš model.

V případě dotazů nebo vysvětlení týkajících se tohoto článku se obraťte na StatLab knihovny UVA: [email protected]

Podívejte se na celou sbírku článků StatLab knihovny UVA.

Clay Ford
Statistical Research Consultant
University of Virginia Library
17. srpna 2018
.

admin

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.

lg