关于对数问题的一些知乎高赞回答整理
————————————————————————————————————————
平时在一些数据处理中,经常会把原始数据取对数后进一步处理。之所以这样做是基于对数函数在其定义域内是单调增函数,取对数后不会改变数据的相对关系,取对数作用主要有:
1. 缩小数据的绝对数值,方便计算。例如,每个数据项的值都很大,许多这样的值进行计算可能对超过常用数据类型的取值范围,这时取对数,就把数值缩小了,例如TF-IDF计算时,由于在大规模语料库中,很多词的频率是非常大的数字。
2. 取对数后,可以将乘法计算转换称加法计算。
3. 某些情况下,在数据的整个值域中的在不同区间的差异带来的影响不同。例如,中文分词的mmseg算法,计算语素自由度时候就取了对数,这是因为,如果某两个字的频率分别都是500,频率和为1000,另外两个字的频率分别为200和800,如果单纯比较频率和都是相等的,但是取对数后,log500=2.69897, log200=2.30103, log800=2.90308 这时候前者为2log500=5.39794, 后者为log200+log800=5.20411,这时前者的和更大,取前者。因为前面两个词频率都是500,可见都比较常见。后面有个词频是200,说明不太常见,所以选择前者。
从log函数的图像可以看到,自变量x的值越小,函数值y的变化越快,还是前面的例子,同样是相差了300,但log500-log200>log800-log500,因为前面一对的比后面一对更小。
也就是说,对数值小的部分差异的敏感程度比数值大的部分的差异敏感程度更高。这也是符合生活常识的,例如对于价格,买个家电,如果价格相差几百元能够很大程度影响你决策,但是你买汽车时相差几百元你会忽略不计了。
4. 取对数之后不会改变数据的性质和相关关系,但压缩了变量的尺度,例如800/200=4, 但log800/log200=1.2616,数据更加平稳,也消弱了模型的共线性、异方差性等。
5. 所得到的数据易消除异方差问题。
6. 在经济学中,常取自然对数再做回归,这时回归方程为 lnY=a lnX+b ,两边同时对X求导,1/Y*(DY/DX)=a*1/X, b=(DY/DX)*(X/Y)=(DY*X)/(DX*Y)=(DY/Y)/(DX/X) 这正好是弹性的定义。
当然,如果数据集中有负数当然就不能取对数了。实践中,取对数的一般是水平量,而不是比例数据,例如变化率等。
作者:搬砖达人
链接:https://www.zhihu.com/question/22012482/answer/34754104
——————————————————————————————————————————
经济数据大多数都是偏态分布,比如收入GDP之类的,而且大多是右偏的。取对数可以将大于中位数的值按一定比例缩小,从而形成正态分布的数据。这对做计量模型,解决异方差问题都是很有帮助的。
——————————————————————————————————————————
作者:连玉君
链接:https://www.zhihu.com/question/22012482/answer/2118257021
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
Why 取对数?
(1) 缩小数据之间的绝对差异;避免个别极端值的影响
(2) 尽可能满足经典线性模型假定(Classic Linear Model)
避免共线性
避免异方差,满足同方差基本假定
尽可能符合正态分布
(3) 经济学意义
用线性模型估计非线性关系 比如,考虑教育回报方程,相比于“每多接受一年教育,增加的工资相同”,“每多接受一年教育,工资增长的百分数相同”更合理。具体而言,相比于“每多接受一年教育,小时工资都增加 54 美分”,“每多接受一年教育,工资都增长 8%”更合理。因为后者更能刻画工资增长量随受教育程度的增加而增加的规律,即教育回报递增,受教育程度对工资水平的偏效应随着受教育程度的增加而增加(见 Wooldridge 的 Introductory Econometrics,2009,4e,pp.43)。
直接估计弹性/半弹性 弹性是经济学中一个重要指标,衡量了一个变量的百分比变动会导致另一个变量百分比变动的程度。半弹性,即因变量取对数,自变量不取,表示自变量变动一个单位引起因变量多少的百分比变化。 比如产出对资本和工人劳动时间回归,变量都取对数。
经济理论模型中,某些变量本身就以对数形式存在,则应取对数 比如,劳动经济学中研究教育投资回报率的决定因素,通常以工资对数为被解释变量,这是从 Mincer 模型推导出来的。
为更便于研究,可能会取对数。
How 取对数?
当数据均为正数时,可直接取对数;当数据为非负数据,且有较多 0 时,可 ln(x+1),尽可能保留更多的样本;当数据存在负数时,可能需要再看一下数据本身是否存在问题,此时没法直接取对数。
Stata 中,log(·)和 ln(·)都以自然对数为底。如果要换底,比如 log10(·)表示以 10 为底。
网友评论