文章目录
- 1 数据形态变换
- 1.1 右偏态数据变换方法
- 1.1 左偏态数据变换方法
- 2 数据标准化(Normalization)
- 2.1 线性变换
- 常用的
- 最大值标准化
- 总和标准化
- 小数定标(decimal scaling)
- 2.2 非线性标准化
- 反正切(atan)
- 对数(log)
- 2.3 数据中心化
- 2.4 z-score标准化
- 3. R语言中的实现数据形态变换和数据标准化
- 3.1 形态变换
- 3.1.1 右偏态处理
- 3.1.2 左偏态处理
- 3.2 标准化
- 3.2.1 内置函数
- 3.2.2 其它函数
- 按行/列向进行
- 对整个数据框进行
统计方法的参数假设条件有三(独立样本、正态分布、方差齐性),虽然在分析中可以选择
非参数检验的方法从而避开数据正态分布和方差齐性假设条件要求。但完全符合参数假设的方法仍然是主要的分析手段。因此,如何使得数据达到假设条件要求,也是需要深入学习的内容。本文介绍一些数据形态变换、数据标准化的一些常规方法,以及其在R语言中的实现途径。方法和实现途径没有完全的一一对应,但在文中皆可以找到。
1 数据形态变换
数据形态变换主要目的是将不符合正态分布的数据分布形态进行规则变化,使结果符合正态分布,有效的处理办法主要针对数据偏度远离于0(称为偏态),偏态分为左偏态或右偏态。对处理后的数据要进行是否符合正态分布进行检查,通过后进行后续的统计分析。数据形态变换过程中,也可能会顺带将数据处理到符合方差齐性要求,因此在数据形态变换后,检验数据是否符合正态分布时,同时也检验组间数据是否符合方差齐性要求。如果各种方法应用后数据仍然不符合正态分布的,后续的分析中选择非参数检验的方法进行,当然也有人认为,无论是否符合正态分布和方差齐性要求,直接选择非参数检验方法进行避开繁琐的处理。
1.1 右偏态数据变换方法
- 对数(ln、log10)
- 均方根(全为正数)
- 3次方根(正负均有)
1.1 左偏态数据变换方法
- e的乘方
- 平方
- 3次方
2 数据标准化(Normalization)
2.1 线性变换
通常将数据线性变换到[0, 1],即进行0-1标准化(0-1 normalization)。
常用的
。计算公式如下:
式中为需要转换的数,为标准化后的值,下同。
最大值标准化
将数据除以最大值,适用于数据在正值范围下限为0的情况。
式中为需要转换的数。
总和标准化
,且总和为1.
式中为需要转换的数。为的元素个数。
小数定标(decimal scaling)
,与最大值标准化相近。
式中为需要转换的数,为满足条件的最小整数。
2.2 非线性标准化
通常根据非线性关系变化到[0, 1],方法多样,
反正切(atan)
式中为需要转换的数。
对数(log)
式中为需要转换的数。
2.3 数据中心化
级将值减去总体均值得到的值,中心化后的数据均值为0,适用于属性A的最大值和最小值未知的情况,或有超出取值范围的离群数据的情况。计算公式如下:
式中为需要转换的数,为的均值。
2.4 z-score标准化
为0,标准差为1。计算公式如下:
式中为需要转换的数,为的均值,为标准差(标准偏差)。
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')