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值处理

  1. 直接删掉含NA的那行
na.omit(data)
  1. 用某值将其替换掉,如0
data[is.na(data)] <- 0 
  1. 通过探索相关性将NA值填补上
cor(data , use = "complete.obs")
  1. the k-nearest neighbours
# 通过means, median, weighAvg
library(DMwR)
cleanData <- knnImputation(data, k = 10, scale = T, 
              meth = "weighAvg", distData = NULL)

# 用没有缺失的值得中位数插入
cleanData <- centralImputation(data)
  1. impute any missing values in the training set using proximities
library(randomForest)  
data.imputed <- rfImpute(variable1 ~ ., data = data, iter=6)
  1. 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
虽然分布改变了,但是也没有完全正态化。

常用方法

  1. atan函数转换

  2. min-max标准化(Min-Max Normalization)

    也称为离差标准化,是对原始数据的线性变换,使结果值映射到[0 - 1]之间。

    X=(x-min)/(max-min)

    其中max为样本数据的最大值,min为样本数据的最小值。

    优点:所有的值都会是正值,会更加反映数据的意义。

    缺陷:当有新数据加入时,可能导致max和min的变化,需要重新定义。

  3. log 转化

    log2

    log10

  4. scale(){base}

    x是数值矩阵,当center=TRUE时,为数据对象x按列进行中心化;当scale=TRUE时,为数据对象x按列进行标准化。

    • 中心化是把每个数据减去均值;
    • 标准化是在中心化后的数据基础上再除以数据的标准差;

vegan 中数据标准化方法

  1. 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标准化以后再取平方根;
  2. wisconsin() {vegan}:除以列最大值,再除以行和。

FactoMineR 内置标准化参数

PCA(x, scale.unit = TRUE)
上一篇下一篇

猜你喜欢

热点阅读