A log-transzformációkat gyakran ajánlják ferde adatok, például monetáris mérések vagy bizonyos biológiai és demográfiai mérések esetén. A log-transzformáció hatására az adatok általában szétterülnek az adathalmazok, és összehozzák a szétszórt adatokat. Az alábbiakban például egy hisztogram látható az USA 50 államának területéről. Alaszka, Kalifornia, Texas és néhány más ország miatt jobbra ferde.
hist(state.area)
A log-transzformáció után vegye észre, hogy a hisztogram többé-kevésbé szimmetrikus. A nagy állapotokat közelebb hoztuk egymáshoz, a kisebbeket pedig széthúztuk.
hist(log(state.area))
Miért csináljuk ezt? Az egyik ok az, hogy az adatokat “normálisabbá”, vagyis szimmetrikusabbá tegyük. Ha olyan statisztikai elemzést végzünk, amely normalitást feltételez, a log-transzformáció segíthet megfelelni ennek a feltételezésnek. Egy másik ok az, hogy segítsen megfelelni az állandó szórás feltételezésének a lineáris modellezéssel összefüggésben. Egy másik ok pedig az, hogy egy nem lineáris összefüggést lineárisabbá tegyünk. De bár a log-transzformációt könnyű végrehajtani, az megnehezítheti az értelmezést. Tegyük fel, hogy lineáris modellt illesztünk egy log-transzformált függő változóval. Hogyan értelmezzük az együtthatókat? Mi van akkor, ha log-transzformált függő és független változóink vannak? Ez ennek a cikknek a témája.
Először egy értelmezési receptet adunk azoknak, akik csak gyors segítségre vágynak. Aztán egy kicsit mélyebbre ásunk, hogy mit mondunk a modellünkről, ha log-transzformáljuk az adatainkat.
Interpretációs szabályok
OK, lefuttattál egy regressziót/illesztettél egy lineáris modellt, és néhány változód log-transzformált.
- Csak a függő/válaszváltozót log-transzformáltuk. Határozza meg az együtthatót, vonjon le ebből a számból egyet, és szorozza meg 100-zal. Ez adja meg a válasz százalékos növekedését (vagy csökkenését) a független változó minden egy egységnyi növekedésére. Példa: Az együttható 0,198. (exp(0,198) – 1) * 100 = 21,9. A független változó minden egy egységnyi növekedése esetén a függő változónk körülbelül 22%-kal nő.
- Csak a független/prediktor változó(k) van log-transzformálva. Osszuk el az együtthatót 100-zal. Ez azt mondja, hogy a független változó 1%-os növekedése a függő változót (együttható/100) egységgel növeli (vagy csökkenti). Példa: az együttható 0,198. 0.198/100 = 0.00198. A független változó minden 1%-os növekedése esetén a függő változó körülbelül 0,002-rel nő. Az x százalékos növekedéshez szorozzuk meg az együtthatót log(1,x) értékkel. Példa: A független változó minden 10%-os növekedése esetén a függő változónk körülbelül 0,198 * log(1,10) = 0,02.
- Mind a függő/válaszváltozó, mind a független/prediktor változó(k) log-transzformáltak. Értelmezze az együtthatót a független változó minden 1%-os növekedése esetén a függő változó százalékos növekedéseként. Példa: az együttható 0,198. A független változó minden 1%-os növekedése esetén a függő változó körülbelül 0,20%-kal nő. Az x százalékos növekedéshez számítsuk ki 1,x-et az együttható hatványára, vonjuk le az 1-et, és szorozzuk meg 100-zal. Példa: A független változó minden 20%-os növekedése esetén a függő változó körülbelül (1,20 0,198 – 1) * 100 = 3,7 százalékkal nő.
Mit jelentenek valójában a log-transzformációk a modelljeid számára
Nagyon jó tudni, hogyan kell helyesen értelmezni a log-transzformált adatok együtthatóit, de fontos tudni, hogy pontosan mire utal a modelled, ha log-transzformált adatokat tartalmaz. A jobb megértés érdekében szimuláljunk az R segítségével néhány olyan adatot, amely a helyes elemzéshez log-transzformációt igényel. Egyszerűnek tartjuk a dolgot egy független változóval és normális eloszlású hibákkal. Először egy log-transzformált függő változót nézünk meg.
x <- seq(0.1,5,length.out = 100)set.seed(1)e <- rnorm(100, mean = 0, sd = 0.2)
Az első sor egy 100 értékből álló sorozatot generál 0,1-től 5-ig, és hozzárendeli x-hez. A következő sor a véletlenszám-generátor magját 1-re állítja. Ha ugyanezt tesszük, akkor a következő sor futtatásakor ugyanolyan véletlenszerűen generált adatokat kapunk, mint amilyeneket mi kaptunk. A rnorm(100, mean = 0, sd = 0.2)
kód 100 értéket generál egy 0 átlagú és 0,2 szórású normál eloszlásból. Ez lesz a mi “hibánk”. Ez az egyszerű lineáris regresszió egyik feltételezése: az adataink modellezhetők egy egyenes vonallal, de valamilyen véletlen mennyiséggel eltérnek, amelyről feltételezzük, hogy egy 0 átlagú és valamilyen szórású normál eloszlásból származik. Hibánkat e.
Most készen állunk a log-transzformált függő változónk létrehozására. Kiválasztunk egy metszéspontot (1,2) és egy meredekséget (0,2), amelyeket megszorozunk x-szel, majd hozzáadjuk a véletlen hibánkat, e-t. Végül exponenciáljuk.
y <- exp(1.2 + 0.2 * x + e)
Hogy lássuk, miért exponenciálunk, vegyük észre a következőket:
$$\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)$$
Szóval egy log-transzformált függő változó azt jelenti, hogy az egyszerű lineáris modellünket exponenciáltuk. Emlékezzünk vissza az exponensek szorzatszabályából, hogy a fenti utolsó sort átírhatjuk
$$y = \text{exp}(\beta_0) \text{exp}(\beta_1x)$$
Ez továbbá azt jelenti, hogy független változónk a szokásos additív kapcsolat helyett multiplikatív kapcsolatban áll a függő változóval. Ezért van szükség arra, hogy az x egy egységnyi változásának az y-ra gyakorolt hatását százalékban fejezzük ki.
Ha a helyes modellt illesztjük az adatokhoz, vegyük észre, hogy elég jól visszanyerjük a valódi paraméterértékeket, amelyeket az adatok előállításához használtunk.
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
A becsült 1,226-os metszéspont közel áll a valódi 1,2-es értékhez. A 0,198-as becsült meredekség nagyon közel van a 0,2-es valódi értékhez. Végül a 0,1805-ös becsült reziduális standard hiba nem áll túl messze a 0,2-es valódi értéktől.
Memlékezzünk arra, hogy a meredekség értékének értelmezéséhez exponenciálnunk kell azt.
exp(coef(lm1)) x 1.219179
Ez azt jelenti, hogy az x minden egy egységnyi növekedése körülbelül 1,22-vel szorozódik. Vagy más szavakkal, minden egyes x egy egységnyi növekedése esetén y körülbelül 22%-kal nő. Hogy megkapjuk a 22%-ot, vonjuk le az 1-et, és szorozzuk meg 100-zal.
(exp(coef(lm1)) - 1) * 100 x 21.91786
Mi lenne, ha log(y) helyett csak y-t illesztenénk be? Hogyan tudnánk kitalálni, hogy log-transzformációt kellene fontolóra vennünk? Ha csak az együtthatókat nézzük, az nem sokat mond.
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
Mivel az adatokat generáltuk, láthatjuk, hogy az együtthatók messze vannak, és a maradék standard hiba túl nagy. De a való életben ezt nem fogod tudni! Ezért csináljuk a regressziós diagnosztikát. Az egyik legfontosabb feltételezés, amit ellenőrizni kell, a hibák állandó szórása. Ezt a Scale-Location plot segítségével tudjuk megtenni. Íme a grafikon az imént lefuttatott modellre, az y log-transzformálása nélkül.
plot(lm2, which = 3) # 3 = Scale-Location plot
Megfigyelhető, hogy a standardizált reziduumok felfelé tendálnak. Ez annak a jele, hogy az állandó szórás feltételezése sérült. Hasonlítsa össze ezt az ábrát ugyanezzel az ábrával a helyes modell esetén.
plot(lm1, which = 3)
A trendvonal egyenletes, és a reziduumok egyenletesen szóródnak.
Ez azt jelenti, hogy mindig log-transzformálnunk kell a függő változót, ha gyanítjuk, hogy az állandó variancia feltételezés sérült? Nem feltétlenül. A nem konstans variancia a modell egyéb hibás specifikációiból is adódhat. Gondolja át azt is, hogy mit jelent egy log-transzformált függő változó modellezése. Azt jelenti, hogy multiplikatív kapcsolatban áll a prediktorokkal. Ez helyesnek tűnik? Használja az ítélőképességét és a tárgyi szaktudását.
Most tekintsük a log-transzformált független prediktor változóval rendelkező adatokat. Ezt könnyebb előállítani. Egyszerűen log-transzformáljuk az x-et.
y <- 1.2 + 0.2*log(x) + e
Még egyszer először illesztjük a helyes modellt, és észrevesszük, hogy az remekül visszaadja a valódi értékeket, amelyekkel az adatokat létrehoztuk:
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
A meredekségi együttható értelmezéséhez osszuk el 100-zal.
coef(lm3)/100 log(x) 0.001997892
Ez azt mondja, hogy az x 1%-os növekedése körülbelül 0,002-vel növeli a függő változót. Miért mondja ezt nekünk? Végezzünk egy kis matematikát. Az alábbiakban kiszámítjuk az y változását, ha x-et 1ről 1,01-re változtatjuk (azaz 1%-os növekedés).
$$(\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$$
Az eredmény a meredekségi együttható log(1.01)-gyel való szorzása, ami körülbelül 0.01, vagy \(\frac{1}{100}\). Ebből adódik az az értelmezés, hogy az x 1%-os növekedése a függő változót az együttható/100-mal növeli.
Még egyszer illesszük be a rossz modellt azzal, hogy a modell szintaxisában nem adunk meg log-transzformációt x számára.
lm4 <- lm(y ~ x)
A modell összefoglalóját megnézve kiderül, hogy az együtthatók becsült értékei jócskán eltérnek a valódi értékektől. A gyakorlatban azonban soha nem ismerjük a valódi értékeket. Ismét diagnosztikára van szükség a modell megfelelőségének megítéléséhez. Hasznos diagnosztika ebben az esetben a részleges maradványdiagram, amely feltárhatja a linearitástól való eltéréseket. Emlékezzünk vissza, hogy a lineáris modellek feltételezik, hogy a prediktorok additívak és lineáris kapcsolatban állnak a válaszváltozóval. A car csomag biztosítja a crPlot függvényt a részleges maradvány ábrák gyors létrehozásához. Csak adja meg neki a modellobjektumot, és adja meg, hogy melyik változóra szeretné létrehozni a részleges reziduális diagramot.
library(car)crPlot(lm4, variable = "x")
Az egyenes vonal az x és y közötti meghatározott kapcsolatot ábrázolja. A görbe vonal egy sima trendvonal, amely az x és y közötti megfigyelt kapcsolatot foglalja össze. Megállapíthatjuk, hogy a megfigyelt kapcsolat nem lineáris. Hasonlítsa össze ezt az ábrát a helyes modellhez tartozó részleges reziduális ábrával.
crPlot(lm3, variable = "log(x)")
A sima és az illesztett egyenesek pontosan egymáson vannak, ami nem mutat komoly eltérést a linearitástól.
Ez nem jelenti azt, hogy ha a linearitástól való eltéréseket látunk, akkor azonnal feltételezzük, hogy a log-transzformáció az egyetlen megoldás! A nem lineáris kapcsolat lehet összetett és nem olyan könnyen magyarázható egy egyszerű transzformációval. De a log-transzformáció alkalmas lehet ilyen esetekben, és mindenképpen megfontolandó.
Végezetül tekintsünk olyan adatokat, ahol mind a függő, mind a független változó log-transzformált.
y <- exp(1.2 + 0.2 * log(x) + e)
Nézzük meg közelebbről a fenti kódot. Az x és y közötti kapcsolat most már egyszerre multiplikatív és nem lineáris!
A szokásos módon illeszthetjük a helyes modellt, és észrevehetjük, hogy az fantasztikus munkát végez az adatok előállításához használt valódi értékek visszanyerésében:
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
Az x együtthatót úgy értelmezzük, mint az y százalékos növekedését az x minden 1%-os növekedésére. Ebben az esetben ez körülbelül 0,2%-os y-növekedést jelent minden egyes 1%-os x-növekedésre.
A rossz modell illesztése ismét olyan együttható- és reziduális standard hiba becsléseket eredményez, amelyek vadul eltérnek a céltól.
lm6 <- lm(y ~ x)summary(lm6)
A skála-hely és a parciális reziduális ábrák bizonyítékot szolgáltatnak arra, hogy valami nincs rendben a modellünkkel. A Scale-Location plot görbülő trendvonalat mutat, a Partial-Residual plot pedig lineáris és sima vonalakat, amelyek nem illeszkednek egymáshoz.
plot(lm6, which = 3)
crPlot(lm6, variable = "x")
Honnan tudnánk a való életben, hogy a helyes modellhez log-transzformált független és függő változókra van szükség? Nem tudnánk. A diagnosztikai ábrák és a modellezési tapasztalatok alapján lehet, hogy lenne egy megérzésünk. Vagy lehet, hogy van némi szaktudásunk a modellezendő folyamatról, és jó okunk van azt gondolni, hogy a kapcsolat multiplikatív és nem lineáris.
Remélhetőleg most már nem csak azt tudja jobban kezelni, hogyan kell értelmezni a log-transzformált változókat egy lineáris modellben, hanem azt is, hogy mit jelentenek a log-transzformált változók a modellje számára.
A cikkel kapcsolatos kérdésekkel vagy pontosításokkal kapcsolatban forduljon az UVA Library StatLab-hoz: [email protected]
Nézze meg az UVA Library StatLab teljes cikkgyűjteményét.
Clay Ford
Statisztikai kutatási tanácsadó
University of Virginia Library
Augusztus 17, 2018
Augusztus 17.