线性回归问题中对数变换的含义
在一个因变量取了对数的回归问题中,最小二乘估计如下:$\ln(y)=3+0.2x$ ,则系数估计“0.2”的含义是,自变量x每增长1单位对应的相关关系为:
A,变量y平均来说变为$e^{0.2}$倍
B,变量y平均增长20%
C,变量y的中位数变为$e^{0.2}$倍
以上是三种常见的答案。很难想象,一个如此初级简单的问题在不同大学不同课本的答案居然不一样?!
A项是明显错误的,无视了回归方程里随机部分(原回归方程误差项里的,或系数估计里的),搞成了解初中方程。根据琴生不等式$\exp(E(·))<E(\exp(·))$,这里严格的小于号实际上会造成相当的低估误差。可以随便跑code感受一下(附文末)。用如果哪个数据分析书这么写,大概是不搞统计的数据科学家们的手笔??…话虽如此,A选项仍有一定修正余地。正态分布取指数后服从对数正态分布,有可计算的期望从而可以适当操作一下修偏。但这对误差项的正态分布有刚性要求,不像一般的线性无偏性并不需要完整分布信息。如果误差项不满足正态,需计算一些相关bound,这是把大一入门统计问题升级为research topic,不太划算。
B项的本质是试图在刻画原关系式的一个特点:$y’/y=\beta_1$
选项措辞涉及到几个歧义项:增长率,增长速度,增长速率,需要先解决语文问题。问题出在“率”这个字上,一般用来表达“除以了什么东西”,但是除以自变量微分是速率,除以变量本身是比率,那y的微分除以y叫啥?可以考虑(dy/dx)/y=(dy/y)/dx,一种理解是y的增长比率的增长速率,这并不是个常用的、好理解的概念…而原选项的描述指的是增长率显然欠妥,但这的确是个常见的说法。它来自于(Δy/y)/Δx在分母x增量为1下的近似…然而这种近似的无偏性就崩坏了。因为:
$E((Δy/y)/Δx)=E((y_1-y_0/y_0)/1)=E[exp(β_0+β_1(x+1)+ε)/exp(β_0+β_1x+η)]-1$
$=exp(β1)E(exp(ε-η))-1$ (该推导是关于原回归方程的,其中η和ε为iid的随机误差项。对于最小二乘估计值$\hat{y}$ 和$\hat{
beta}$的相关证明推导是类似的,留作习题,下同)
最后又回到A选项类似问题了。不但绕不开对数正态分布变量期望的估量来修偏,而且还涉及有误差的泰勒展开e^β≈1+β,当然是错上加错了。B选项这里β含义的偏差随|β|或误差项方差的增大而增大。
C项是我们学校教的。但我觉得也是神坑,因为这个坑极少被正式填过(很有我校统计风采),教授课上说它是对的但也很少给证明。原理很简单,对分位数取单调递增函数并不改变其分位数,比如小明考班上第十名,之后全班所有人成绩开根号/取对数/取指数,小明还将是第十名。以中位数为例,写成公式就是 $Median(y_1/y_0)=Median[\exp(β_0+β_1(x+1)+ε)/\exp(β_0+β_1x+η)]$ $=Median[\exp(β_1+ε-η)]v $=\exp(β)\exp(Median[ε-η])) $
其中最后一步需添加假设误差变量是对称分布的,便可完成无偏性的证明。推导并不难但是出镜率极低,因为它卡在了一个尴尬的位置:更低的完全不在乎对数变换的理论合理性,反正数据“做”成长得像normal就行了;更高的有更合理的approach解决问题,尤其忌讳强行用低级工具解决它不能解决的问题。所以取对数这种流氓操作的justification从上到下就没人在乎了。
这里悄悄给本科教授Lele点个赞,他在回归分析课上经常强调非线性变换的不必要性。
附r code
x<-seq(1.0001,9,0.0001)
n<-length(x)
y<-exp(3-1.2*x+0.9*rnorm(n))
mean(log(y)[(1+1/0.0001) :n ]-log(y)[1:(n-1/0.0001)])#approx. = -1.2. Linear regression works.
log(mean(y[(1+1/0.0001) :n ]/y[1:(n-1/0.0001)]))#A's interpretation. About -0.39, far from the true parameter -1.2
#Difference of 0.81 is not by coincidence. Since the calculation introduces the difference of two N(0,0.81),giving a sigma_square of 2*0.81 to the lognormal distribution and its expectation then becomes exp(0.5*(2*0.81))=exp(0.81)
mean(y[(1+1/0.0001) :n ]/y[1:(n-1/0.0001)])#B's interpretation. About 0.67, far from the true parameter (1-1.2)=-0.2. Likewise it is due to exp(-1.2)*exp(0.81)...
log(median(y[(1+1/0.0001) :n ]/y[1:(n-1/0.0001)]))#C's interpretation. About -1.2, which is the true parameter.
后记:
写到一半我忽然感觉好像这一幕似曾相识,搜了下朋友圈发现六年前原来想过这个问题。唉~光阴似箭