数据形态变换与标准化及在R语言中的实现


  统计方法的参数假设条件有三(独立样本、正态分布、方差齐性),虽然在分析中可以选择 非参数检验的方法从而避开数据正态分布和方差齐性假设条件要求。但完全符合参数假设的方法仍然是主要的分析手段。因此,如何使得数据达到假设条件要求,也是需要深入学习的内容。本文介绍一些数据形态变换、数据标准化的一些常规方法,以及其在R语言中的实现途径。方法和实现途径没有完全的一一对应,但在文中皆可以找到。

1 数据形态变换

  数据形态变换主要目的是将不符合正态分布的数据分布形态进行规则变化,使结果符合正态分布,有效的处理办法主要针对数据偏度远离于0(称为偏态),偏态分为左偏态或右偏态。对处理后的数据要进行是否符合正态分布进行检查,通过后进行后续的统计分析。数据形态变换过程中,也可能会顺带将数据处理到符合方差齐性要求,因此在数据形态变换后,检验数据是否符合正态分布时,同时也检验组间数据是否符合方差齐性要求。如果各种方法应用后数据仍然不符合正态分布的,后续的分析中选择非参数检验的方法进行,当然也有人认为,无论是否符合正态分布和方差齐性要求,直接选择非参数检验方法进行避开繁琐的处理。

1.1 右偏态数据变换方法

  • 对数(ln、log10)
  • 均方根(全为正数)
  • 3次方根(正负均有)

1.1 左偏态数据变换方法

  • e的乘方
  • 平方
  • 3次方

2 数据标准化(Normalization)

2.1 线性变换

  通常将数据线性变换到[0, 1],即进行0-1标准化(0-1 normalization)。

常用的

  又叫min-max标准化(Min-max normalization),线性函数归一化,离差标准化。适用于最大值最小值已知确定。得到值离上限、下限的相对距离,标准化后的值 ∈ [ 0 , 1 ] \in[0, 1] [0,1]。计算公式如下:
x i ′ = x i − min ⁡ ( x ) max ⁡ ( x ) − min ⁡ ( x ) x_i' = \frac{x_i-\min(x)}{\max(x)-\min(x)} xi=max(x)min(x)ximin(x)
  式中 x x x为需要转换的数, x i ′ x_i' xi为标准化后的值,下同。

最大值标准化

  将数据除以最大值,适用于数据在正值范围下限为0的情况。
x i ′ = x i max ⁡ ( x ) x_i' = \frac{x_i}{\max(x)} xi=max(x)xi
  式中 x x x为需要转换的数。

总和标准化

  将数据除以总和,也即求相对总量的比例,标准化后的值 ∈ [ 0 , 1 ] \in[0, 1] [0,1],且总和为1.
x i ′ = x i ∑ i = 0 N x x_i' = \frac{x_i}{\sum_{i=0}^N x} xi=i=0Nxxi
  式中 x x x为需要转换的数。 N N N x x x的元素个数。

小数定标(decimal scaling)

  将数据除以量级的最大值,形式上是将小数点移位,标准化后的值 ∈ [ − 1 , 1 ] \in[-1, 1] [1,1],与最大值标准化相近。
x i ′ = x i 1 0 j x_i' = \frac{x_i}{10^j} xi=10jxi
  式中 x x x为需要转换的数, j j j为满足条件的最小整数。

2.2 非线性标准化

  通常根据非线性关系变化到[0, 1],方法多样,

反正切(atan)

x i ′ = arctan ⁡ ( x i ) ∗ 2 π x_i' = \frac{\arctan(x_i) * 2}{\pi} xi=πarctan(xi)2
  式中 x x x为需要转换的数。

对数(log)

x i ′ = log ⁡ 10 ( x i ) log ⁡ 10 ( m a x ( x ) ) x_i' = \frac{\log_{10} (x_i)}{\log_{10}(max(x))} xi=log10(max(x))log10(xi)
  式中 x x x为需要转换的数。

2.3 数据中心化

  级将值减去总体均值得到的值,中心化后的数据均值为0,适用于属性A的最大值和最小值未知的情况,或有超出取值范围的离群数据的情况。计算公式如下:
x i ′ = ( x i − μ ) x_i' = (x_i-\mu) xi=(xiμ)
  式中 x x x为需要转换的数, μ \mu μ x x x的均值。

2.4 z-score标准化

  又叫标准差标准化,中心化,零均值化,z-score标准化,是在数据中心化基础上除以标准差得到的结果。spss默认的标准化方法就是z-score标准化。转换后的数据均值 μ \mu μ为0,标准差 σ \sigma σ为1。计算公式如下:
x i ′ = ( x i − μ ) σ x_i' = \frac{(x_i-\mu)}{\sigma} xi=σ(xiμ)
  式中 x x x为需要转换的数, μ \mu μ x x x的均值, σ \sigma σ为标准差(标准偏差)。

3. R语言中的实现数据形态变换和数据标准化

3.1 形态变换

3.1.1 右偏态处理

  • 对数(ln、log10)
log(x)  # 默认以e为底。log(x,base = 4)为以4为底
log10(x)  # 以10为底
  • 均方根

  适用于全为正数情况

sqrt(x)
x^(1/2)
  • 3次方根

  正负均适用。

x^(1/3)

3.1.2 左偏态处理

  • e的乘方
exp(x)
  • 平方
    适用于全正数含0或全负含0的情况。
x^2
  • 3次方
x^3

3.2 标准化

3.2.1 内置函数

  R语言内置函数scale(x, center = TRUE, scale = TRUE)可实现中心化及标准差标准化。

  • 仅进行中心化
scale(x, center = TRUE, scale = FALSE)
  • 既进行中心化又进行标准差标准化
scale(x, center = TRUE, scale = TRUE)
  • 仅进行标准差标准化(很少用到)
scale(x, center = FALSE, scale = apply(x, 2, sd, na.rm = TRUE))

3.2.2 其它函数

  vegan程序包中的decostand(x, method, MARGIN, range.global, logbase = 2, na.rm=FALSE, ...)以及wisconsin(x)函数将数据(x为二维数据表)进行数据标准化方法,共提供10余种数据标准化方法(method)。

按行/列向进行
  • total(总和)

  值除以总和(默认MARGIN=1,即对数据表的向进行计算)。

decostand(x, method='total', MARGIN=2)
  • max(最大值)

  值除以最大值(默认MARGIN=2,即对数据表的向进行计算)。

decostand(x, method='max', MARGIN=2)
  • frequency(频率)

  值除以总和,再乘以非0值的数量。因此非0值项的平均值为1(默认MARGIN=2,即对数据表的向进行计算)。

decostand(x, method='frequency', MARGIN=2)
  • normalize(正规化)

  使值平方和等于1(默认MARGIN=1,即对数据表的向进行计算),也叫弦转化。

decostand(x, method='normalize', MARGIN=2)
  • range(范围)

  将值标准化到范围[0, 1] (默认MARGIN=2,即对数据表的向进行计算)。如果所有值都是常量,则它们将转换为0。

decostand(x, method='range', MARGIN=2)
  • rank(秩),rrank(r秩)

  rank用递增的排序替换值,保持0不变。而rrank类似,但使用最大为1的相对排名(默认MARGIN=1,即对数据表的向进行计算)。平均排名用于平等值。

decostand(x, method='rank', MARGIN=2)
decostand(x, method='rrank', MARGIN=2)
  • standardize(标准化)

  将x标度到均值为0和标准差为1(默认MARGIN=2,即对数据表的向进行计算)。即z-score

decostand(x, method='standardize', MARGIN=2)
对整个数据框进行

  这一部分是生态学通常在统计分析中会用到的方法,在这些计算中,Na值将被赋值为0。

  • pa(有无转化)

  x标度为出现/缺失(1/0)。不分行/列对整体进行,例如在整理样方-物种表物种频度。

decostand(x, method='po')
  • chi.square(卡方转化)

  除以行和后,再以列和的平方根,再除以矩阵总和的平方根(默认MARGIN=1,即对数据表的向进行计算)。当与欧氏距离一起使用时,距离应与对应分析中使用的卡方距离相似。但是,cmdscale的结果仍然不同,因为CA是加权排序方法

decostand(x, method='chi.square')
  • hellinger(Hellinger转化)

  “total(总和)”法值的均方根。

decostand(x, method='hellinger')
  • wiconsin(Wisconsin标准化)

  值除以列向最大值后再除以行向总和。

decostand(x, method='hellinger')

个人水平有限,难免有遗漏和错误之处,恳请批评指正

  • 7
    点赞
  • 98
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值