打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
一项对变量进行各种转换的指南, 从低阶到高阶再到更高阶全覆盖!

在数据分析中,转换是将一个变量替换为该变量的某个函数的过程,例如将变量x替换为其平方根或对数。更严格地说,转换是一种改变分布或关系形态的替代。

对于存在离散值或出现左偏或右偏的变量,我们首先想到的是对数化转换,但除此之外,我们还应该考虑一些其他数据转换方式,让变量更倾向于正态分布。
反双曲正弦变换Inverse hyperbolic sine transformation:gen new_y = asinh(y)
立方根转换cube root transformation:gen curt_y = cond(y < 0 , -(-y)^(1/3), y^(1/3))
neglog转换neglog transformation:gen neglog_y = sign(y) * log(1 + abs(y))
Box-cox转换box-cox transformaiton: boxcox

下面简要整理一下数据转换指南(从低阶到高阶再到更高阶),读罢,会让我们对数据的转换有一个更为系统的认识。

下面的内容当然没有涵盖所有文献,甚至在引用文献方面也不算十分丰富。其中两篇对我们理解产生了特别深远影响的文章是 Emerson 和 Stoto (1983) 以及 Emerson (1983)。这些文章背后反映了John Wilder Tukey(1915-2000) 对数据转换价值的持续强调。
本文涵盖以下主题。你可以按顺序阅读,也可以直接跳转到每个部分。
  • 使用转换的原因

  • 最常见转换的回顾

  • 心理评论 - 针对困惑的人

  • 如何在Stata中进行转换

    • 用于比例和百分比的转换

    • 转换作为一个家族

    • 用于既有正值又有负值的变量的转换

1.使用转换的原因
有许多使用转换的理由。这里列举的并不全面。
  1. 方便

  2. 减少偏斜

  3. 等间距

  4. 线性关系

  5. 加法关系

如果只关注一个变量,1、2和3是相关的,而如果关注两个或更多变量,则4和5更为重要。然而,通常实现4和5的转换往往也会实现2和3。
  1. 方便

    一个转换后的比例可能与原比例一样自然,但对于特定目的可能更方便(例如百分比而不是原始数据,正弦而不是度数)。

    一个重要的例子是标准化,通过调整值以适应不同的水平。一般来说:

    标准化后的值 = (value - level) / spread

    标准化后的值具有0-1取值:因此,标准化对于比较以不同单位表示的变量非常有用。通常使用变量的平均值和标准差(sd)来计算标准分数:

    z = (x - x的均值) / x的标准差

    标准化对分布的形状没有影响。

  2. 减少偏斜

    转换可用于减少偏斜。对称或接近对称的分布通常比偏斜分布更容易处理和解释。更具体地说,正态或高斯分布通常被认为是理想的,因为它被许多统计方法所假定。

    要减少右偏斜,可以取平方根、对数或倒数(平方根是最弱的)。这在实践中是最常见的问题。

    要减少左偏斜,可以取平方、立方或更高次幂。

  3. 等间距

    转换可用于产生大致相等的间距,尽管水平存在显著变化,这样的数据更容易处理和解释。每个具有大致相同的spread或变异性的数据集或子集是一种称为同方差性的条件,其对立面被称为异方差性。

  4. 线性关系

    在研究变量之间的关系时,通常更容易考虑大致线性的模式,而不是高度曲线的模式。这在使用线性回归时尤为重要,它等同于将这样的模式拟合到数据中。(在Stata中,regress 是进行回归的基本命令。)

    例如,将一系列值的对数绘制为时间的函数具有一个性质,即具有恒定变化率(增长或下降)的时期会以直线呈现。

  5. 加法关系

    关系是加法而不是乘法时通常更容易分析。因此:

    y = a + bx

    其中两个项 a 和 bx 相加比

    y = ax^b

    其中两个项 a 和 x^b 相乘更容易处理。加法性是方差分析中的一个重要问题(在Stata中,anovaoneway 等)。

在实践中,转换通常会奇迹般地同时实现其中几个目标,尤其是减少偏斜,产生几乎相等的间距以及产生几乎线性或加法关系。
2.常见转换方式综述
在初级数据分析中,最常用的转换包括倒数、对数、立方根、平方根和平方。即使没有特别强调,以下讨论假设转换仅在其产生(有限的)实数结果的范围内使用。

倒数

倒数将变量x转换为1/x,相反数则将x转换为-1/x。这是一种强力转换,对于改变分布形状具有显著影响。虽然无法应用于零值,但对负值可以使用,前提是所有值都为正时才会得到实际意义的结果。
常见用途包括:
  • 将人口密度(人数/每单位面积)转换为单位面积/每人;

  • 将每位医生服务的人数转换为每人服务的医生数量;

  • 将侵蚀速率转换为侵蚀单位深度所需的时间。

倒数会颠倒具有相同符号的值的顺序,即最大值会变为最小值,依此类推。而负数的倒数会保持相同符号的值的顺序。

对数

对数以10为底的log(x)、以e为底的ln(x),或以2为底的log2(x)表示,是一种对分布形状产生显著影响的强力转换。通常用于减少右偏斜,特别适用于测度变量。无法应用于零或负值。
指数增长或下降可通过取对数变为线性关系:
y = a * exp(bx) 可变为 ln(y) = ln(a) + bx。
对数在形成变量线性关系模型中非常有效。

立方根

立方根将变量x转换为x^(1/3),是一种对分布形状产生显著影响的较强转换,但比对数弱。通常用于减少右偏斜,可适用于零和负值。
需要注意,一个体积的立方根具有长度的单位,通常应用于降雨数据。

平方根

平方根将变量x转换为x^(1/2) = sqrt(x),对分布形状有中等影响,比对数和立方根弱。通常用于减少右偏斜,也可以应用于零值。
需要注意,一个面积的平方根具有长度的单位,通常应用于计数数据,尤其是如果值大多数比较小。

平方

平方将变量x转换为x^2,对分布形状有中等影响,可用于减少左偏斜。通常用于通过二次函数y = a + b x + c x^2拟合响应变量。
平方通常只在变量为零或正值时才有意义,因为(-x)^2和x^2是相同的。
选择转换的主要标准是它在数据上的实际效果。同时,还需考虑以下两个问题:
  1. 在物理(生物、经济等)层面上,是否合理,尤其在数值很小时或很大时的行为?

  2. 是否能保持尺度和单位的简单和方便?

3.心理学评述 - 针对困惑的人

对转换的主要动机是为了更轻松地描述数据。虽然转换后的刻度可能看起来不那么自然,但这在很大程度上是一种心理上的反对意见。随着对转换的经验增加,这种感觉往往会减弱,因为转换往往效果显著。实际上,许多熟悉的测量刻度实际上是转换后的刻度:分贝、pH值和地震震级的里氏刻度都是对数刻度。
然而,即使在经验丰富的数据分析师中,对于转换也存在争论。有些人经常使用它们,而其他人则很少使用。在这里,我稍微夸张了一些极端或不那么极端的观点,以激发思考或讨论。就我个人而言,我认为所有这些观点都是可以辩护的,或者至少可以理解的。
  • "这似乎有点像作弊。你不喜欢数据的样子,所以决定改变它们。"

  • "我明白这是一个有效的巧妙技巧。但我如何知道这个技巧何时适用于其他数据,或者是否需要另一种技巧,或者是否不需要转换?"

  • "需要转换是因为不能保证世界在所测量的刻度上运行。"

  • "当转换符合对变量行为的科学观点时,转换最合适。"

通常情况下,将结果逆向转换回来通常也是有益的,可以使用反向或逆转换:
  • 倒数:t = 1 / x,逆转换:x = 1 / t

  • 以10为底的对数:t = log10(x),逆转换:x = 10^t

  • 以e为底的对数:t = ln(x),逆转换:x = exp(t)

  • 以2为底的对数:t = log2(x),逆转换:x = 2^t

  • 立方根:t = x^(1/3),逆转换:x = t^3

  • 平方根:t = x^(1/2),逆转换:x = t^2

4.在Stata中进行转换

基本步骤:
  1. 绘制数据的图表,查看数据中的模式与最简单的理想模式的匹配程度。可以尝试使用 dotplotscatter 命令。

  2. 查看数据的覆盖范围。如果范围很小,转换的效果会很小。

  3. 仔细考虑包括零值或负值的数据集。某些转换在数学上不能应用于某些值,通常也没有科学意义。

标准得分(均值为0,标准差为1)可以使用 egen 命令来创建:
. egen stdpopi = std(popi)
基本的转换可以使用 generate 命令创建新变量:
. gen logeener = ln(energy)
. gen l10ener = log10(energy)
. gen curtener = energy^(1/3)
. gen sqrtener = sqrt(energy)
. gen sqener = energy^2
对于比例或百分比,可以进行相应的转换。
对于负数的立方根需要特别小心。Stata使用通用例程来计算幂,并不会寻找特殊情况。每当负值存在时,计算立方根的更通用的方法是 sign(x) * (abs(x)^(1/3))
注意仔细处理有关缺失值的消息:除非原始变量中有缺失值,否则它们表示尝试在未定义的情况下应用转换。例如,是否存在零或负值?
在使用变换前创建一个转换后的变量并非总显得必要。许多图形命令允许使用选项 yscale(log)xscale(log)。这非常有用,因为图表是使用原始值标记的,但它并不会在内存中留下一个转换后的变量。
其他命令:
  • laddergladderqladder 尝试对变量进行多种转换,目的是显示它们产生更接近正态(高斯)分布的程度。在实践中,这样的命令可能会对初级水平的用户有所帮助,但也可能会令人困惑。例如,它们可能建议与你的科学知识相矛盾的转换。

  • boxcoxlnskew0 是更高级的命令,只有在学习了教科书对其解释后才应使用。Box 和 Cox (1964) 是关键的原始参考文献。

对于一些统计人员来说,关于转换的争论在很大程度上被广义线性模型的出现所回避。在这样的模型中,使用指定的连接函数在转换后的刻度上进行估计,但结果报告在响应变量的原始刻度上。Stata中的命令是 glm
比例和百分比的转换(高级)
介于0和1之间的比例或介于0和100之间的百分比通常受益于特殊的转换。最常见的是logit(或逻辑)变换,它是:
对于比例,logit p = log (p / (1 - p))

或者对于百分比,logit p = log (p / (100 - p))
其中p是比例或百分比。
这种转换对极小和极大值的处理是对称的,拉出了尾部并将中间部分拉向了0.5或50%。p对logit p的图表因此呈现出一个扁平的S形。严格来说,对于0和1(100%)这两个极端值,logit p无法确定:如果它们在数据中出现,就需要进行一些调整。
对于这种logit变换的一个理由可以用扩散过程(比如识字的传播)来说明。从零到几个百分点的推动可能需要相当长的时间;一旦识字开始传播,其增长会变得更加迅速,然后逐渐减缓;最后的几个百分点可能在转变为识字时非常缓慢,因为我们剩下的是那些孤立的和笨拙的人,他们最不愿接受任何新事物。结果得到的曲线在时间上是一个扁平的S形,通过对识字取对数,它变得更接近线性。更正式地说,同样的想法可能是通过想象采纳(感染等)与那些不采纳的人之间的接触次数成正比来加以证明的,这将呈二次方形上升然后下降。更一般地说,许多关系中的预测值在逻辑上不能小于0或大于1(100%)。使用logit是确保这一点的一种方法:否则模型可能会产生荒谬的预测。
对于比例的情况,仅考虑logit:
logit p = log (p / (1 - p))
可以重写为:
logit p = log p  - log (1 - p)
在这种形式下,它可以看作是一组折叠变换中的一个成员:
p的变换 = 对p进行的某些处理 - 对(1 - p)进行的某些处理。
这种写法突出了对待极高和极低值的对称方式。(如果p很小,1 - p就很大,反之亦然。)logit有时被称为折叠对数。最简单的其他这种转换是折叠根(即平方根):
p的折叠根 = p的平方根  - (1 - p)的平方根。
与平方根和对数一样,折叠根的优点是它可以在不调整数据值为0和1(100%)的情况下应用。折叠根是比logit更弱的变换。在实践中,它使用得要少得多。
在早期文献中(偶尔仍在使用)还有两种用于比例和百分比的变换,分别是角变换和概率变换。角变换是:
反正弦(p的平方根)
或者其正弦值为p的平方根的角。在实践中,它的行为非常类似于:
p^0.41 - (1 - p)^0.41,
进而接近于:
p^0.5 - (1 - p)^0.5,
这又是一种写折叠根的方式(Tukey 1960)。概率变换是一种与正态(高斯)分布有数学联系的变换,它不仅在行为上非常类似于logit,而且在处理上更加繁琐。因此,它现在不太常见,除非在更高级的应用中,它保留了一些优点。
作为一个家族的变换(高级)
之前提到的主要变换,除了对数之外,即倒数、立方根、平方根和平方,都是幂。所涉及的幂是:
立方根     1/3
平方根     1/2
平方       2
请注意,解释的顺序不是任意挑选的,而是按照幂的数值顺序排列的。因此,这些变换都是一个家族的成员。此外,与乍看起来的情况相反,对数实际上也属于这个家族。了解这一点对于看待实践中使用的变换不仅仅是一堆技巧,而是一系列不同大小或强度的工具(就像一套螺丝刀或钻头)是很重要的。因此,我们可以在这个序列中填充更多的幂,例如:
倒数平方       -2
倒数           -1
(得到1)       0
立方根         1/3
平方根         1/2
恒等变换       1
平方           2
立方           3
四次方         4
在这里的补充中,恒等变换,比如x^1 = x,实际上可以说是一种没有变换的变换。x对x的图形自然是一条直线,所以幂为1将变换的图形分为向上凸的(小于1的幂)和向上凹的(大于1的幂)。小于1的幂将高值挤在一起并将低值拉开,而大于1的幂则相反。
另一方面,幂为0的变换是退化的,因为它总是产生1作为结果。然而,我们现在将看到,从严格意义上讲,对数x(严格地说,是自然对数或ln x)实际上也属于幂为0的家族。
如果你了解微积分,你将知道以下幂的序列:
..., x^-3, x^-2, x^-1, x^0, x^1, x^2, ...
在除了加法常数之外,有积分,具体来说:
..., -x^-2 / 2, -x^-1, ln x, x, x^2 / 2, x^3 / 3, ...
这个映射可以通过微分来逆转。因此,积分x^(p - 1)将得到x^p / p,除非p为0,在这种情况下它将得到ln x。因此,我们可以定义一个家族:
t_p(x) = x^p     如果 p != 0,
      = ln x     如果 p == 0.
在选择幂或对数时从家族中进行选择的想法是一个关键的概念。由此可见,如果变换对于我们的目的和数据来说过于弱或过于强,通常可以选择家族中的另一个成员。

许多关于变换的讨论侧重于稍有不同的家族,出于各种数学和统计原因。在这方面的经典参考文献是Box和Cox(1964),但也请注意Tukey(1957)的早期工作。最常见的情况是,定义被更改为:

t_p(x) = (x^p - 1) / p 如果 p != 0,
      = ln x           如果 p == 0.

这个t(x, p)具有各种特性,突显了家族的相似之处。

  1. 当 p -> 0 时,ln x 是其极限,得到 (x^p - 1) / p.

  2. 在 x = 1 时,对所有 p,t_p(x) = 0.

  3. t_p(x) 的第一导数(变化率)如果 p != 0 就是 x^(p - 1),如果 p == 0 就是 1 / x。在 x = 1 时,这总是1。

  4. t_p(x) 的第二导数如果 p != 0 就是 (p - 1) x^(p - 2),如果 p == 0 就是 -1 / x^2。在 x = 1 时,这总是 (p - 1)。

同时涉及正负值的变量的转换(更高级)
大部分关于转换的文献都集中在以下两种相关情况中:所涉及的变量要么严格为正,要么为零或正。如果不符合第一种情况,某些变换将不产生实数结果(特别是对数和倒数);如果不符合第二种情况,那么一些其他变换将不产生实数结果,或者更普遍地说,可能不会有用(特别是平方根或平方)。
然而,在某些情况下,特定的响应变量可以同时为正和负。每当响应是余额、变化、差异或导数时,这种情况很常见。尽管这类变量通常呈现偏斜,但可能需要进行变换的最尴尬特性是尾部(也称为长尾或厚尾),在某种术语中称为高峰度。零通常具有强烈的实质含义,因此我们希望保留负值、零和正值之间的区别(请注意,摄氏或华氏温度在这里实际上并不符合要求,因为它们的零点在统计上是任意的,无论水是否融化或冻结都很重要)。
在这些情况下,对于右偏斜和严格为正的变量,经验可能表明应寻找一种变换,当x为正时,它的行为类似于ln x,当x为负时,它的行为类似于-ln(-x)。这仍然会带来如何处理零的问题。此外,从任何草图中都清楚地看出(用Stata术语来说):
cond(x <= 0, -ln(-x), ln(x))
将是无用的。
一个好点的方法是使用:
-ln(-x + 1)   如果 x <= 0,
ln(x + 1)     如果 x > 0.  
这也可以写成:
sign(x) ln(|x| + 1)
其中sign(x)是1(如果x > 0),0(如果x == 0)和-1(如果x < 0)。这个函数通过原点,对于小x(正负),它的行为类似于x,对于大|x|,它的行为类似于sign(x) ln(abs(x))。在x = 0时,梯度在1处最陡,因此相对于原点附近的值,变换会拉回极端值。最近它被称为neglog变换(Whittaker等人,2005年)。早期参考文献是John和Draper(1980年)。在Stata语言中,可以这样写:
cond(x <= 0, -ln(-x + 1), ln(x + 1))
或者neglog transformation
sign(x) * ln(abs(x) + 1)
逆变换是:
cond(t <= 0, 1 - exp(-t), exp(t) - 1)
幂为0以外的一般化是:
- [(-x + 1)^p - 1] / p   如果 x <= 0,
[(x + 1)^p - 1] / p   如果 x > 0.
影响既是正数又是负数的变量的偏斜和重尾的转换由Yeo和Johnson(2000年)讨论。
在这个领域的另一个可能性是应用反双曲正弦函数arsinh(也称为arg sinh、sinh^-1和arcsinh)。这是双曲正弦函数的反函数,而双曲正弦函数又被定义为:
sinh(x) = (exp(x) - exp(-x)) / 2.
在Mata中,sinh和arsinh函数可以计算为sinh(x)和asinh(x),在Stata中,可以计算为(exp(x) - exp(-x))/2和ln(x + sqrt(x^2 + 1))。
arsinh函数也会通过原点,并在原点处最陡。对于大|x|,它的行为类似于sign(x) ln(|2x|)。因此,在实践中,neglog(x)和arsinh(x)具有大致相似的效果。另请参阅Johnson(1949年)。
Source: Nicholas J. Cox,Transformations: an introduction

此外,我们再说一下数据的标准化处理方法及Stata代码。
为什么需要进行归一化或标准化处理呢?
因为,有时候因变量Y和自变量X的量纲差距很大,例如,X取值区间为(0,1),Y取值区间为(0,1000),两者的差距很大,可能导致系数过小。
此时,若对数据进行归一化处理,在寻找回归系数的过程就会变得平缓,更容易得到最优解。

一些归一化方法的Stata操作程序如下:

ssc install norm, replace       //安装norm命令

norm x1 x2 x3, by(year) method(zee)   //Standardized Z-score

norm x1 x2 x3, by(year) method(mmx)  //Min-Max Normalization

norm x1 x2 x3, by(year) method(softmax)   //Softmax Normalization

norm x1 x2 x3, by(year) method(sigmoid)   //Sigmoid Normalization

关于计量方法类书籍,参看:1.一些比较常见的因果推断书籍25本汇总, 很多可以直接下载PDF,2.推荐一本专攻处理效应分析的书籍, 包括主流政策评估计量方法,3.年龄-时期-队列分析及其实现过程和经典书籍, 附code和数据!4.推荐使用Python语言做因果推断前沿方法的书籍,5.使用Stata做时间序列分析书籍, 包括模型讲解以及Stata示例操作,6.一本最新因果推断书籍, 包括了机器学习因果推断方法, 学习主流和前沿方法,7.社会经济政策的评估计量经济学, 提供书籍和数据和程序文件,8.全面且前沿的因果推断课程, 提供视频, 课件, 书籍和经典文献,9.从网页上直接复制代码的因果推断书籍出现了, 学会主流方法成效极快,10.推荐书籍"用R软件做应用因果分析", 有需要的学者可以自行下载!11.哪本因果推断书籍最好?我们给你整理好了这个书单!12.“不一样”的因果推断书籍, 很多观点让我们能恍然大悟, 涵盖了不少其他书里没有的因果推断方法!13.搞懂因果推断中内生性问题解决方法必读的书籍和文献已搜集好!14.一位“诗人”教授写了本因果推断书籍, 现在可以直接下载PDF参看!15.使用R软件学习计量经济学方法三本书籍推荐,16.数据缺失方法处理大全, 经典书籍助你修复数据,17.中介和调节效应操作指南, 经典书籍和PPT珍藏版,18.用R语言做Econometrics的书籍推荐, 值得拥有的经典,19.史上最全的因果识别经典前沿书籍, 仅此一份,20.重磅好书"环境能源计量经济学(附代码)", 该领域主流, 时髦和前沿的计量方法,21.Acemoglu又出版了两本经济学教课书!22.Stata17MP版最新使用指南全书, 包括DSGE, Lasso回归, ERM, 贝叶斯分析等,23.全新因果推断方法新书, 配套R, Stata和Python的代码, 还包括教授视频和PPT素材!24.学习计量, 统计和各种软件的必备书单,25.机器学习第一书, 数据挖掘, 推理和预测,26.计量回归中的交互项到底什么鬼? 捎一本书给你,27.荐书,计量经济学宝典,28.送书: 应用时间序列分析(经典),29.计量经济学教科书,多门类多级别的一个都不能少,30.50本经济学书单,入门到精通分门别类,31.从入门到进阶的Python数据分析手册, 课程内容完全免费!32.2卷RDD断点回归使用手册, 含Stata和R软件操作流程,33.社会网络分析最新文献和软件学习手册,34.环境, 能源和资源经济学手册推荐, 经典著作需要反复咀嚼,35.各领域经济学手册全在这里, 不学手册只能做重复研究,36.史上最全博士论文撰写指导手册Handbook

下面这些短链接文章属于合集,可以收藏起来阅读,不然以后都找不到了。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
PSM的stata实现
一个数平方根是2n 1和3,4n是3m 16立方根,求m的值
人教版八年级上册数学知识点及基本方法步骤
[初二数学]平方根与立方根混搭实例
七上数学每日一练:立方根及开立方练习题及答案_2020年单选题版.pdf
初二篇—平方根与立方根
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服