Solved – Interpreting a quadratic logarithmic term

interpretationlogarithmmultiple regressionregressionstata

Given the regression model

$y=\beta_0 + 300*ln(x_1) – 15 * (ln(x_1))^2 + \beta_3*x_2 + … + u $

$x$ ranges from 1 000 to 30 000 (6.9 to 10.3 on a logarithmic scale). How to interpret the diminishing effect that $x_1$ has on $y$? Is it possible to interpret it for small changes in $x_1$ analog to a "normal" quadratic term, i.e. the partial effect can be calculated as

$\Delta y = [\beta_1 – 2*\beta_2 * ln(x1)]$

and the maximum (turning point) as $x_{1} = – \beta_1 / (2*\beta_2)$, which would yield 300 / 30 = 10 with e^10=22026? How to give a meaningful and illustrative interpretation of the effect? For example, the effect of a 1% increase of $x_1$ or going from 20 000 to 21 000?

Edit

Thank you for the code and sorry for the delayed response. I managed to plot
the marginal effect of x1 but decided to use the plot of the actual and predicted values of y against x1 while holding all other variables at their mean using the following Stata code:

reg y ln(x1) (ln(x1))^2 x2 x3 x4 x5
adjust x2 x3 x4 x5 if e(sample), gen(predict)
twoway line predict x1, sort || scatter y x1

I think this illustrates the effect of x1 on y really well and the plot is
easy to understand despite the quadratic logarithmic term in the regression model.

Best Answer

Isn't the derivative that you want actually $\frac{dy}{dx_{1}}=\frac{300}{x_{1}}-\frac{30}{x_{1}}\ln x_{1}$? Your derivative is the change in $y$ for a small change in $\ln x_{1}$. I think it's probably easier to think about about changing $x_{1}$ on the original (non-logged) scale. That shows that the marginal effect of $x_{1}$ starts out positive for small $x_1$ and declines steeply until $x_{1}=e^{10}$ and is negative for $x_{1} \gt e^{10}$.

Here's some Stata code to make the graphs you asked about below. There might be a more elegant way to do the labels on the original scale, but that's all I got:

#delimit;
clear all;
set more off;

sysuse auto, clear;

gen lmpg=ln(mpg);

reg price c.lmpg##c.lmpg;

/* yhat at x of 18, 20 & 25 */
margins, at(lmpg=(`=ln(18)' `=ln(20)' `=ln(25)'));

sum lmpg;
local mean = r(mean);
local sd = r(sd);

/* yhat at mean of ln(x) and at mean plus 1 sd */
margins, at(lmpg=(`mean' `=`mean'+`sd''));
marginsplot, xlabels(`mean' "`=round(exp(`mean'),,01)'" `=`mean'+`sd'' "`=round(exp(`mean'+`sd'),.01)'");  


/* The MARGINAL effect of x on y at mean and mean of ln(x) plus 1sd */
margins, dydx(lmpg) at(lmpg=(`mean' `=`mean'+`sd''));
marginsplot, xlabels(`mean' "`=round(exp(`mean'),.01)'" `=`mean'+`sd'' "`=round(exp(`mean'+`sd'),.01)'");