Las transformaciones logarítmicas se recomiendan a menudo para los datos sesgados, como las medidas monetarias o ciertas medidas biológicas y demográficas. La transformación logarítmica de los datos suele tener el efecto de dispersar los grupos de datos y reunir los datos dispersos. Por ejemplo, a continuación se muestra un histograma de las áreas de los 50 estados de EE.UU.. Está sesgado a la derecha debido a Alaska, California, Texas y algunos otros.
hist(state.area)
Después de una transformación logarítmica, observe que el histograma es más o menos simétrico. Hemos acercado los estados grandes y espaciado los más pequeños.
hist(log(state.area))
¿Por qué hacer esto? Una de las razones es hacer que los datos sean más «normales», o simétricos. Si estamos realizando un análisis estadístico que asume la normalidad, una transformación logarítmica podría ayudarnos a cumplir este supuesto. Otra razón es para ayudar a cumplir el supuesto de varianza constante en el contexto de la modelización lineal. Otra razón es para ayudar a que una relación no lineal sea más lineal. Pero aunque es fácil aplicar una transformación logarítmica, puede complicar la interpretación. Digamos que ajustamos un modelo lineal con una variable dependiente transformada logarítmicamente. ¿Cómo interpretamos los coeficientes? ¿Y si tenemos variables dependientes e independientes transformadas logarítmicamente? Ese es el tema de este artículo.
Primero proporcionaremos una receta para la interpretación para aquellos que sólo quieren una ayuda rápida. Luego profundizaremos un poco más en lo que estamos diciendo sobre nuestro modelo cuando transformamos logarítmicamente nuestros datos.
Reglas de interpretación
Bien, has realizado una regresión/ajustado un modelo lineal y algunas de tus variables están transformadas logarítmicamente.
- Sólo la variable dependiente/respuesta está transformada logarítmicamente. Exponencie el coeficiente, reste uno a este número y multiplíquelo por 100. Esto da el porcentaje de aumento (o disminución) en la respuesta por cada aumento de una unidad en la variable independiente. Ejemplo: el coeficiente es 0,198. (exp(0,198) – 1) * 100 = 21,9. Por cada aumento de una unidad en la variable independiente, nuestra variable dependiente aumenta aproximadamente un 22%.
- Sólo la(s) variable(s) independiente(s)/predictora(s) está(n) transformada(s) en logaritmo. Divida el coeficiente por 100. Esto nos dice que un aumento del 1% en la variable independiente aumenta (o disminuye) la variable dependiente en (coeficiente/100) unidades. Ejemplo: el coeficiente es 0,198. 0.198/100 = 0.00198. Por cada 1% de aumento de la variable independiente, nuestra variable dependiente aumenta aproximadamente 0,002. Para un aumento del x por ciento, multiplique el coeficiente por log(1,x). Ejemplo: Por cada 10% de aumento en la variable independiente, nuestra variable dependiente aumenta en aproximadamente 0,198 * log(1,10) = 0,02.
- Tanto la variable dependiente/de respuesta como la(s) independiente(s)/predictora(s) están transformadas en logaritmos. Interprete el coeficiente como el aumento porcentual de la variable dependiente por cada 1% de aumento de la variable independiente. Ejemplo: el coeficiente es 0,198. Por cada 1% de aumento de la variable independiente, nuestra variable dependiente aumenta aproximadamente un 0,20%. Para un incremento porcentual de x, calcule 1,x a la potencia del coeficiente, reste 1 y multiplique por 100. Ejemplo: Por cada aumento del 20% en la variable independiente, nuestra variable dependiente aumenta aproximadamente (1,20 0,198 – 1) * 100 = 3,7 por ciento.
Qué significan realmente las transformaciones logarítmicas para sus modelos
Es bueno saber cómo interpretar correctamente los coeficientes de los datos transformados logarítmicamente, pero es importante saber qué implica exactamente su modelo cuando incluye datos transformados logarítmicamente. Para obtener una mejor comprensión, vamos a utilizar R para simular algunos datos que requerirán transformaciones logarítmicas para un análisis correcto. Lo mantendremos simple con una variable independiente y errores normalmente distribuidos. Primero veremos una variable dependiente transformada logarítmicamente.
x <- seq(0.1,5,length.out = 100)set.seed(1)e <- rnorm(100, mean = 0, sd = 0.2)
La primera línea genera una secuencia de 100 valores de 0,1 a 5 y la asigna a x. La siguiente línea establece la semilla del generador de números aleatorios en 1. Si haces lo mismo, obtendrás los mismos datos generados aleatoriamente que obtuvimos al ejecutar la siguiente línea. El código rnorm(100, mean = 0, sd = 0.2)
genera 100 valores de una distribución Normal con una media de 0 y una desviación estándar de 0,2. Este será nuestro «error». Esta es una de las suposiciones de la regresión lineal simple: nuestros datos pueden ser modelados con una línea recta pero estarán desviados por alguna cantidad aleatoria que suponemos proviene de una distribución Normal con media 0 y alguna desviación estándar. Asignamos nuestro error a e.
Ahora estamos listos para crear nuestra variable dependiente transformada logarítmicamente. Elegimos un intercepto (1,2) y una pendiente (0,2), que multiplicamos por x, y luego añadimos nuestro error aleatorio, e. Finalmente exponenciamos.
y <- exp(1.2 + 0.2 * x + e)
Para ver por qué exponenciamos, observe lo siguiente:
$${log}(y) = \beta_0 + \beta_1x$$
$$text{exp}(\text{log}(y)) = \text{exp}(\beta_0 + \beta_1x)$$
$$y = \text{exp}(\beta_0 + \beta_1x)$$
Así que una variable dependiente transformada logarítmicamente implica nuestro modelo lineal simple.transformada implica que nuestro modelo lineal simple ha sido exponenciado. Recordemos, a partir de la regla del producto de los exponentes, que podemos reescribir la última línea anterior como
$$y = \text{exp}(\beta_0) \text{exp}(\beta_1x)$$
Esto implica además que nuestra variable independiente tiene una relación multiplicativa con nuestra variable dependiente en lugar de la relación aditiva habitual. De ahí la necesidad de expresar el efecto de un cambio de una unidad en x sobre y como un porcentaje.
Si ajustamos el modelo correcto a los datos, observe que hacemos un trabajo bastante bueno para recuperar los verdaderos valores de los parámetros que utilizamos para generar los datos.
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
El intercepto estimado de 1,226 se acerca al valor verdadero de 1,2. La pendiente estimada de 0,198 está muy cerca del valor real de 0,2. Por último, el error estándar residual estimado de 0,1805 no está demasiado lejos del valor real de 0,2.
Recordemos que para interpretar el valor de la pendiente tenemos que exponenciarlo.
exp(coef(lm1)) x 1.219179
Esto dice que cada incremento de una unidad en x se multiplica por aproximadamente 1,22. O, en otras palabras, por cada aumento de una unidad en x, y aumenta aproximadamente un 22%. Para obtener el 22%, resta 1 y multiplica por 100.
(exp(coef(lm1)) - 1) * 100 x 21.91786
¿Qué pasa si ajustamos sólo y en lugar de log(y)? Cómo podríamos averiguar que debemos considerar una transformación logarítmica? Sólo mirar los coeficientes no te va a decir mucho.
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
Claro, ya que generamos los datos, podemos ver que los coeficientes están muy lejos y el error estándar residual es demasiado alto. Pero en la vida real no lo sabrás. Por eso hacemos diagnósticos de regresión. Un supuesto clave a comprobar es la varianza constante de los errores. Podemos hacer esto con un gráfico de Escala-Localización. Aquí está el gráfico para el modelo que acabamos de ejecutar sin la transformación logarítmica y.
plot(lm2, which = 3) # 3 = Scale-Location plot
Nota que los residuos estandarizados tienen una tendencia al alza. Esto es una señal de que se ha violado el supuesto de varianza constante. Compare este gráfico con el mismo gráfico para el modelo correcto.
plot(lm1, which = 3)
La línea de tendencia es uniforme y los residuos están uniformemente dispersos.
¿Significa esto que siempre se debe realizar una transformación logarítmica de la variable dependiente si se sospecha que se ha violado el supuesto de varianza constante? No necesariamente. La varianza no constante puede deberse a otros errores de especificación en su modelo. Piense también en lo que significa modelar una variable dependiente transformada logarítmicamente. Dice que tiene una relación multiplicativa con los predictores. ¿Le parece correcto? Use su juicio y experiencia en el tema.
Ahora consideremos los datos con una variable predictora independiente transformada logarítmicamente. Esto es más fácil de generar. Simplemente transformamos logarítmicamente x.
y <- 1.2 + 0.2*log(x) + e
Una vez más, primero ajustamos el modelo correcto y observamos que hace un gran trabajo al recuperar los valores verdaderos que utilizamos para generar los datos:
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
Para interpretar el coeficiente de la pendiente lo dividimos por 100.
coef(lm3)/100 log(x) 0.001997892
Esto nos dice que un incremento del 1% en x aumenta la variable dependiente en aproximadamente 0,002. ¿Por qué nos dice esto? Hagamos algunos cálculos. A continuación calculamos el cambio en y al cambiar x de 1 a 1,01 (es decir, un aumento del 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$$
El resultado es multiplicar el coeficiente de la pendiente por log(1,01), que es aproximadamente igual a 0,01, o \(\frac{1}{100}\). De ahí la interpretación de que un incremento del 1% en x aumenta la variable dependiente en el coeficiente/100.
Una vez más vamos a ajustar el modelo incorrecto al no especificar una transformación logarítmica para x en la sintaxis del modelo.
lm4 <- lm(y ~ x)
Ver un resumen del modelo revelará que las estimaciones de los coeficientes están muy alejadas de los valores reales. Pero en la práctica nunca conocemos los valores reales. Una vez más, los diagnósticos son necesarios para evaluar la adecuación del modelo. Un diagnóstico útil en este caso es un gráfico parcial-residual que puede revelar desviaciones de la linealidad. Recordemos que los modelos lineales asumen que los predictores son aditivos y tienen una relación lineal con la variable de respuesta. El paquete car proporciona la función crPlot para crear rápidamente gráficos parciales-residuales. Sólo tiene que darle el objeto modelo y especificar para qué variable quiere crear el gráfico de residuos parciales.
library(car)crPlot(lm4, variable = "x")
La línea recta representa la relación especificada entre x e y. La línea curva es una línea de tendencia suave que resume la relación observada entre x e y. Podemos decir que la relación observada no es lineal. Compare este gráfico con el gráfico parcial-residual para el modelo correcto.
crPlot(lm3, variable = "log(x)")
Las líneas suaves y ajustadas están una encima de la otra revelando que no hay desviaciones serias de la linealidad.
Esto no significa que si se observan desviaciones de la linealidad se deba asumir inmediatamente que una transformación logarítmica es la única solución. La relación no lineal puede ser compleja y no se explica tan fácilmente con una simple transformación. Pero una transformación logarítmica puede ser adecuada en tales casos y ciertamente algo a considerar.
Por último, consideremos los datos en los que tanto la variable dependiente como la independiente están transformadas logarítmicamente.
y <- exp(1.2 + 0.2 * log(x) + e)
Mira atentamente el código anterior. La relación entre x e y es ahora multiplicativa y no lineal!
Como siempre, podemos ajustar el modelo correcto y notar que hace un trabajo fantástico al recuperar los verdaderos valores que usamos para generar los datos:
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 el coeficiente de x como el porcentaje de incremento en y por cada 1% de incremento en x. En este caso, eso es aproximadamente un aumento del 0,2% en y por cada aumento del 1% en x.
Ajustar el modelo incorrecto produce una vez más estimaciones del coeficiente y del error estándar residual que están muy lejos del objetivo.
lm6 <- lm(y ~ x)summary(lm6)
Los gráficos de Escala-Localización y Parcial-Residual proporcionan evidencia de que algo está mal con nuestro modelo. El gráfico Escala-Localización muestra una línea de tendencia curva y el gráfico Parcial-Residual muestra líneas lineales y suaves que no coinciden.
plot(lm6, which = 3)
crPlot(lm6, variable = "x")
¿Cómo sabríamos en la vida real que el modelo correcto requiere variables independientes y dependientes transformadas logarítmicamente? No lo sabríamos. Podríamos tener una corazonada basada en los gráficos de diagnóstico y la experiencia de modelado. O podríamos tener alguna experiencia en el proceso que estamos modelando y tener buenas razones para pensar que la relación es multiplicativa y no lineal.
Es de esperar que ahora tenga un mejor manejo no sólo de cómo interpretar las variables transformadas en logaritmos en un modelo lineal, sino también lo que significan las variables transformadas en logaritmos para su modelo.
Para preguntas o aclaraciones sobre este artículo, póngase en contacto con el StatLab de la Biblioteca de la UVA: [email protected]
Vea toda la colección de artículos del StatLab de la Biblioteca de la UVA.
Clay Ford
Consultor de Investigación Estadística
Biblioteca de la Universidad de Virginia
17 de agosto de 2018