R - NA处理和数据标准化
2019-12-04 本文已影响0人
吴十三和小可爱的札记
NA值处理
数据NA值查看
# 查看是否有NA值
is.na(data)
na.fail(DF)
# 查看有多少NA值
length(data[is.na(data)])
# 显示出NA数超过某百分比值的行,如20%
manyNAs(data , 0.2)
NA值处理
- 直接删掉含NA的那行
na.omit(data)
- 用某值将其替换掉,如0
data[is.na(data)] <- 0
- 通过探索相关性将NA值填补上
cor(data , use = "complete.obs")
- the k-nearest neighbours
# 通过means, median, weighAvg
library(DMwR)
cleanData <- knnImputation(data, k = 10, scale = T,
meth = "weighAvg", distData = NULL)
# 用没有缺失的值得中位数插入
cleanData <- centralImputation(data)
- impute any missing values in the training set using proximities
library(randomForest)
data.imputed <- rfImpute(variable1 ~ ., data = data, iter=6)
- missMDA :Impute the missing values of a dataset with the Principal Components Analysis model.
数据标准化
数据的标准化(normalization)是将数据按比例缩放,使之落入一个特定区间;目的是去除数据的单位限制,将其转化为无量纲的纯数值,便于不同单位或量级的指标能够进行比较和加权,在某些比较和评价的指标处理中经常会用到。其中最典型的就是数据的归一化处理,即将数据统一映射到[0,1]区间上。
目前数据标准化方法有多种,归结起来可以分为直线型方法(如极值法、标准差法)、折线型方法(如三折线法)、曲线型方法(如半正态性分布)。不同的标准化方法,对系统的评价结果会产生不同的影响,但在数据标准化方法的选择上并没有通用的法则。
数据标准化是不会改变原数据的分布状况的,否则相当于原始数据发生了改变,那就修改了源数据了。(并不)
# 生成均匀分布数据
set.seed(13)
data <- runif(1000)
scale <- scale(data)
norm <- rnorm(1000)
ggplot() + geom_density(aes(x = data))
data.jpeg
# scale(){base} 标准化
scale <- scale(data)
ggplot() + geom_density(aes(x = scale))
scale.jpeg
# min-max
min_max = (data-min(data))/(max(data)-min(data))
# qqplot 检测分布变化
qqplot(data, min_max)
data, min_max.jpeg
log <- log10(data)/log10(max(data))
qqplot(norm, log)
norm, log.jpeg
虽然分布改变了,但是也没有完全正态化。
常用方法
-
atan函数转换
-
min-max标准化(Min-Max Normalization)
也称为离差标准化,是对原始数据的线性变换,使结果值映射到[0 - 1]之间。
X=(x-min)/(max-min)
其中max为样本数据的最大值,min为样本数据的最小值。
优点:所有的值都会是正值,会更加反映数据的意义。
缺陷:当有新数据加入时,可能导致max和min的变化,需要重新定义。
-
log 转化
log2
log10
-
scale(){base}
x是数值矩阵,当center=TRUE时,为数据对象x按列进行中心化;当scale=TRUE时,为数据对象x按列进行标准化。
- 中心化是把每个数据减去均值;
- 标准化是在中心化后的数据基础上再除以数据的标准差;
vegan 中数据标准化方法
-
decostand() {vegan}(x, method, MARGIN, range.global, na.rm = FALSE)
- total: 除以行和或列和 (default MARGIN = 1);
- max:除以行或列的最大值(default MARGIN = 2);
- freq:除以行或列的最大值,并乘以非零值的个数(default MARGIN=2);
- normalize:使行或列的平方和等于1 (default MARGIN = 1);
- range: 标准化使行或列的值在0 ... 1 (default MARGIN = 2).
- standardize:标准化使行或列的和为1且方差为1(default MARGIN = 2);
- pa: 将数据转换为0、1数据;
- chi.square: 除以行和及列和的平方根;
- hellinger: 采用total标准化以后再取平方根;
-
wisconsin() {vegan}:除以列最大值,再除以行和。
FactoMineR 内置标准化参数
PCA(x, scale.unit = TRUE)