Transformările logaritmice sunt adesea recomandate pentru date înclinate, cum ar fi măsurile monetare sau anumite măsuri biologice și demografice. Transformarea logaritmică a datelor are, de obicei, efectul de a împrăștia aglomerările de date și de a reuni datele împrăștiate. De exemplu, mai jos este o histogramă a suprafețelor tuturor celor 50 de state americane. Aceasta este înclinată spre dreapta din cauza Alaska, California, Texas și a altor câteva state.
hist(state.area)
După o transformare logaritmică, observați că histograma este mai mult sau mai puțin simetrică. Am apropiat stările mari și am distanțat stările mici.
hist(log(state.area))
De ce să facem asta? Un motiv este acela de a face datele mai „normale”, sau simetrice. Dacă efectuăm o analiză statistică care presupune normalitate, o transformare logaritmică ne-ar putea ajuta să respectăm această ipoteză. Un alt motiv este acela de a ajuta la respectarea ipotezei de varianță constantă în contextul modelării liniare. Un alt motiv este acela de a face o relație neliniară mai liniară. Dar, deși este ușor de implementat o transformare logaritmică, aceasta poate complica interpretarea. Să spunem că potrivim un model liniar cu o variabilă dependentă transformată în logaritmi. Cum interpretăm coeficienții? Ce se întâmplă dacă avem variabile dependente și independente transformate în logaritmi? Acesta este subiectul acestui articol.
În primul rând, vom oferi o rețetă de interpretare pentru cei care doresc doar un ajutor rapid. Apoi vom aprofunda puțin mai mult ceea ce spunem despre modelul nostru atunci când ne transformăm datele prin log-transformare.
Rețete de interpretare
OK, ați efectuat o regresie/ajustat un model liniar și unele dintre variabilele dvs. sunt transformate în logaritm.
- Doar variabila dependentă/răspuns este transformată în logaritm. Exponențializați coeficientul, scădeți unu din acest număr și înmulțițiți cu 100. Se obține astfel procentul de creștere (sau scădere) a răspunsului pentru fiecare creștere de o unitate a variabilei independente. Exemplu: coeficientul este 0,198. (exp(0,198) – 1) * 100 = 21,9. Pentru fiecare creștere de o unitate a variabilei independente, variabila noastră dependentă crește cu aproximativ 22%.
- Numai variabila (variabilele) independentă/predictor este (sunt) transformată (e) în logaritm. Împărțiți coeficientul la 100. Acest lucru ne spune că o creștere de 1% a variabilei independente crește (sau scade) variabila dependentă cu (coeficient/100) unități. Exemplu: coeficientul este 0,198. 0.198/100 = 0.00198. Pentru fiecare creștere de 1% a variabilei independente, variabila noastră dependentă crește cu aproximativ 0,002. Pentru o creștere de x procente, înmulțiți coeficientul cu log(1,x). Exemplu: Pentru fiecare creștere de 10% a variabilei independente, variabila noastră dependentă crește cu aproximativ 0,198 * log(1,10) = 0,02.
- Atât variabila dependentă/variabila de răspuns, cât și variabila (variabilele) independentă(e)/predictor(e) sunt transformate în log. Interpretați coeficientul ca fiind creșterea procentuală a variabilei dependente pentru fiecare creștere de 1% a variabilei independente. Exemplu: coeficientul este 0,198. Pentru fiecare creștere cu 1% a variabilei independente, variabila noastră dependentă crește cu aproximativ 0,20%. Pentru creșterea procentuală x, calculați 1,x la puterea coeficientului, scădeți 1 și înmulțițiți cu 100. Exemplu: Pentru fiecare creștere cu 20% a variabilei independente, variabila noastră dependentă crește cu aproximativ (1,20 0,198 – 1) * 100 = 3,7%.
Ce înseamnă cu adevărat transformările logaritmice pentru modelele dumneavoastră
Este frumos să știți cum să interpretați corect coeficienții pentru datele transformate în logaritmi, dar este important să știți ce anume implică modelul dumneavoastră atunci când include date transformate în logaritmi. Pentru a înțelege mai bine, haideți să folosim R pentru a simula câteva date care vor necesita transformări log-transformate pentru o analiză corectă. Vom păstra lucrurile simple, cu o singură variabilă independentă și erori distribuite normal. Mai întâi ne vom uita la o variabilă dependentă cu transformare logaritmică.
x <- seq(0.1,5,length.out = 100)set.seed(1)e <- rnorm(100, mean = 0, sd = 0.2)
Prima linie generează o secvență de 100 de valori de la 0,1 la 5 și o atribuie lui x. Următoarea linie setează sămânța generatorului de numere aleatoare la 1. Dacă faceți același lucru, veți obține aceleași date generate aleatoriu pe care le-am obținut și noi atunci când executați următoarea linie. Codul rnorm(100, mean = 0, sd = 0.2)
generează 100 de valori dintr-o distribuție normală cu o medie de 0 și o abatere standard de 0,2. Aceasta va fi „eroarea” noastră. Aceasta este una dintre ipotezele regresiei liniare simple: datele noastre pot fi modelate cu o linie dreaptă, dar vor fi deplasate cu o anumită valoare aleatorie pe care presupunem că provine dintr-o distribuție Normală cu media 0 și o anumită abatere standard. Atribuim eroarea noastră la e.
Acum suntem gata să creăm variabila noastră dependentă transformată în logaritm. Alegem o interceptare (1,2) și o pantă (0,2), pe care le înmulțim cu x și apoi adăugăm eroarea noastră aleatorie, e. În cele din urmă, o exponențiem.
y <- exp(1.2 + 0.2 * x + e)
Pentru a vedea de ce exponențiem, observați următoarele:
$$$\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)$$
Atunci un log-transformată în log înseamnă că modelul nostru liniar simplu a fost exponențiat. Reamintim din regula produsului exponenților că putem rescrie ultima linie de mai sus sub forma
$$y = \text{exp}(\beta_0) \text{exp}(\beta_1x)$$
Acest lucru implică și mai mult faptul că variabila noastră independentă are o relație multiplicativă cu variabila noastră dependentă în loc de relația aditivă obișnuită. De aici necesitatea de a exprima efectul unei modificări de o unitate în x asupra lui y sub formă de procent.
Dacă potrivim modelul corect la date, observați că facem o treabă destul de bună în a recupera adevăratele valori ale parametrilor pe care i-am folosit pentru a genera datele.
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
Interceptul estimat de 1,226 este apropiat de adevărata valoare de 1,2. Panta estimată de 0,198 este foarte apropiată de valoarea adevărată de 0,2. În cele din urmă, eroarea standard reziduală estimată de 0,1805 nu este prea departe de valoarea reală de 0,2.
Reamintim că pentru a interpreta valoarea pantei trebuie să o exponențializăm.
exp(coef(lm1)) x 1.219179
Aceasta spune că fiecare creștere de o unitate a lui x este înmulțită cu aproximativ 1,22. Sau, cu alte cuvinte, pentru fiecare creștere de o unitate în x, y crește cu aproximativ 22%. Pentru a obține 22%, scădeți 1 și înmulțițiți cu 100.
(exp(coef(lm1)) - 1) * 100 x 21.91786
Ce se întâmplă dacă potrivim doar y în loc de log(y)? Cum ne-am putea da seama că ar trebui să luăm în considerare o transformare log? Doar uitându-vă la coeficienți nu vă va spune prea multe.
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
Sigur, din moment ce am generat datele, putem vedea că coeficienții sunt foarte departe și că eroarea standard reziduală este mult prea mare. Dar în viața reală nu veți ști acest lucru! Acesta este motivul pentru care facem diagnostice de regresie. O ipoteză cheie care trebuie verificată este varianța constantă a erorilor. Putem face acest lucru cu ajutorul unui grafic Scale-Location. Iată graficul pentru modelul pe care tocmai l-am rulat fără transformarea logaritmică a lui y.
plot(lm2, which = 3) # 3 = Scale-Location plot
Observați că reziduurile standardizate au o tendință ascendentă. Acesta este un semn că ipoteza varianței constante a fost încălcată. Comparați acest grafic cu același grafic pentru modelul corect.
plot(lm1, which = 3)
Linia de tendință este uniformă, iar reziduurile sunt uniform împrăștiate.
Înseamnă acest lucru că ar trebui să transformați întotdeauna variabila dependentă în logaritm dacă suspectați că ipoteza de variație constantă a fost încălcată? Nu neapărat. Varianța neconstantă se poate datora altor specificații eronate din modelul dumneavoastră. Gândiți-vă, de asemenea, la ceea ce înseamnă modelarea unei variabile dependente transformate în logaritmi. Aceasta înseamnă că are o relație multiplicativă cu predictorii. Vi se pare corect? Folosiți-vă judecata și expertiza în domeniu.
Acum să luăm în considerare datele cu o variabilă predictor independentă transformată în logaritm. Aceasta este mai ușor de generat. Pur și simplu facem o log-transformare a lui x.
y <- 1.2 + 0.2*log(x) + e
Încă o dată potrivim mai întâi modelul corect și observăm că acesta face o treabă excelentă de recuperare a valorilor reale pe care le-am folosit pentru a genera datele:
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
Pentru a interpreta coeficientul de pantă îl împărțim la 100.
coef(lm3)/100 log(x) 0.001997892
Aceasta ne spune că o creștere cu 1% a lui x crește variabila dependentă cu aproximativ 0,002. De ce ne spune acest lucru? Haideți să facem niște calcule. Mai jos calculăm modificarea lui y la schimbarea lui x de la 1 la 1,01 (adică o creștere de 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$$$
Rezultatul este înmulțirea coeficientului de pantă cu log(1.01), care este aproximativ egal cu 0.01, sau \(\frac{1}{100}\). De aici rezultă interpretarea că o creștere cu 1% a lui x crește variabila dependentă cu coeficientul/100.
Încă o dată să potrivim modelul greșit prin faptul că nu am specificat o transformare logaritmică pentru x în sintaxa modelului.
lm4 <- lm(y ~ x)
Vizualizarea unui rezumat al modelului va arăta că estimările coeficienților sunt foarte departe de valorile reale. Dar, în practică, nu cunoaștem niciodată valorile reale. Încă o dată sunt necesare diagnostice pentru a evalua adecvarea modelului. O diagnoză utilă în acest caz este un grafic parțial rezidual care poate dezvălui abaterile de la linearitate. Reamintim că modelele liniare presupun că predictorii sunt aditivi și au o relație liniară cu variabila de răspuns. Pachetul car oferă funcția crPlot pentru crearea rapidă a graficelor parțial-reziduale. Trebuie doar să îi dați obiectul model și să specificați pentru ce variabilă doriți să creați graficul rezidual parțial.
library(car)crPlot(lm4, variable = "x")
Linia dreaptă reprezintă relația specificată între x și y. Linia curbă este o linie de tendință netedă care rezumă relația observată între x și y. Putem spune că relația observată este neliniară. Comparați acest grafic cu graficul parțial-rezidual pentru modelul corect.
crPlot(lm3, variable = "log(x)")
Dreapta netedă și cea ajustată sunt chiar una peste alta, dezvăluind că nu există abateri serioase de la linearitate.
Acest lucru nu înseamnă că, dacă observați abateri de la liniaritate, trebuie să presupuneți imediat că o transformare logaritmică este singura și unica soluție! Relația neliniară poate fi complexă și nu atât de ușor de explicat cu o simplă transformare. Dar o transformare logaritmică poate fi potrivită în astfel de cazuri și, cu siguranță, este ceva de luat în considerare.
În cele din urmă, să luăm în considerare datele în care atât variabila dependentă cât și cea independentă sunt transformate logaritmic.
y <- exp(1.2 + 0.2 * log(x) + e)
Uitați-vă cu atenție la codul de mai sus. Relația dintre x și y este acum atât multiplicativă, cât și neliniară!
Ca de obicei, putem potrivi modelul corect și observăm că acesta face o treabă fantastică de recuperare a valorilor reale pe care le-am folosit pentru a genera datele:
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
Interpretați coeficientul x ca fiind creșterea procentuală a lui y pentru fiecare creștere de 1% a lui x. În acest caz, este vorba de o creștere de aproximativ 0,2% în y pentru fiecare creștere de 1% în x.
Adaptarea modelului greșit produce încă o dată estimări ale coeficientului și ale erorii standard reziduale care sunt extrem de departe de țintă.
lm6 <- lm(y ~ x)summary(lm6)
Plogramele Scale-Location și Partial-Residual oferă dovezi că ceva este în neregulă cu modelul nostru. Graficul Scale-Location arată o linie de tendință curbată, iar graficul Partial-Residual arată linii liniare și netede care nu se potrivesc.
plot(lm6, which = 3)
crPlot(lm6, variable = "x")
Cum am putea ști în viața reală că modelul corect necesită variabile independente și dependente transformate în logaritmi? Nu am ști. Am putea avea o bănuială bazată pe diagramele de diagnosticare și pe experiența de modelare. Sau am putea avea o anumită expertiză în materie în ceea ce privește procesul pe care îl modelăm și am avea motive întemeiate să credem că relația este multiplicativă și neliniară.
Sperăm că acum știți mai bine nu numai cum să interpretați variabilele transformate în logaritmi într-un model liniar, ci și ce înseamnă variabilele transformate în logaritmi pentru modelul dumneavoastră.
Pentru întrebări sau clarificări cu privire la acest articol, contactați UVA Library StatLab: [email protected]
Veziți întreaga colecție de articole din UVA Library StatLab.
Clay Ford
Consilier de cercetare statistică
Biblioteca Universității din Virginia
August 17, 2018
.