美文网首页
问卷数据的标准化

问卷数据的标准化

作者: 雲梦尘 | 来源:发表于2017-12-15 16:56 被阅读160次

    1 Normalization Method(标准化 / 归一化)

    1.1 归一化方法(Normalization Method)

    1. 把数变为(0,1)之间的小数
      主要是为了数据处理方便提出来的,把数据映射到0~1范围之内处理,更加便捷快速,应该归到数字信号处理范畴之内。

    2. 把有量纲表达式变为无量纲表达式
      归一化是一种简化计算的方式,即将有量纲的表达式,经过变换,化为无量纲的表达式,成为纯量。
      比如,复数阻抗可以归一化书写:Z = R + jωL = R(1 + jωL/R) ,复数部分变成了纯数量了,没有量纲。
      另外,微波之中也就是电路分析、信号系统、电磁波传输等,有很多运算都可以如此处理,既保证了运算的便捷,又能凸现出物理量的本质含义。

    1.2 标准化方法(Normalization Method)

    数据的标准化是将数据按比例缩放,使之落入一个小的特定区间。由于信用指标体系的各个指标度量单位是不同的,为了能够将指标参与评价计算,需要对指标进行规范化处理,通过函数变换将其数值映射到某个数值区间。一般常用的有以下几种方法。

    • (1) 最小-最大规范化对原始数据进行线性变换。假定MaxA与MinA分别表示属性A的最大与最小值。最小最大规范化通过计算将属性A的值映射到区间[a, b]上的v。一般来说,将最小-最大规范化在用于信用指标数据上,常用的有以下两种函数形式:

      • a) 效益型指标(越大越好型)的隶属函数:
      • b) 成本型指标(越小越好型)的隶属函数:
    • (2) z-score规范化也称零-均值规范化。属性A的值是基于A的平均值与标准差规范化。

    • (3) 小数定标规范化是通过移动属性A的小数点位置来实现的。小数点的移动位数依赖于A的最大绝对值。

    问卷数据一般采用Z标准化方法:
    即每一变量值与其平均值之差除以该变量的标准差。无量纲化后各变量的平均值为0,标准差为1,从而消除量纲和数量级的影响。该方法是目前多变量综合分析中使用最多的一种方法。在原始数据呈正态分布的情况下,利用该方法进行数据无量纲处理是较合理的。

    2 用R、Stata实现标准化

    2.1 Stata:

    • 对单个变量的标准化:
    egen newvar = std(oldvar)
    

    生成的newvar的均数为0,SD为1

    • 对多个变量的标准化:
      如:对一堆变量(var1-var50)进行标准化
      • foreach命令进行循环操作
      • 外部命令center
    ssc install center
    center var1 var2 ... , prefix(z_) standardize
    

    2.2 R语言:

    2.2.1 数据中心化和标准化

    1. 数据的中心化
      所谓数据的中心化是指数据集中的各项数据减去数据集的均值。
      例如有数据集1, 2, 3, 6, 3,其均值为3,那么中心化之后的数据集为1-3,2-3,3-3,6-3,3-3,即:-2,-1,0,3,0

    2. 数据的标准化
      所谓数据的标准化是指中心化之后的数据在除以数据集的标准差,即数据集中的各项数据减去数据集的均值再除以数据集的标准差。
      例如有数据集1, 2, 3, 6, 3,其均值为3,其标准差为1.87,那么标准化之后的数据集为(1-3)/1.87,(2-3)/1.87,(3-3)/1.87,(6-3)/1.87,(3-3)/1.87,即:-1.069,-0.535,0,1.604,0

    数据中心化和标准化的意义是一样的,为了消除量纲对数据结构的影响。

    2.2.2 具体操作

    2.2.2.1 使用scale方法

    在R语言中可以使用scale方法来对数据进行中心化和标准化:

    #限定输出小数点后数字的位数为3位
    options(digits=3) 
    data <- c(1, 2, 3, 6, 3)
    #数据中心化
     scale(data, center=T,scale=F)
     [,1] [1,] -2 [2,] -1 [3,] 0 [4,] 3 [5,] 0 
    attr(,"scaled:center")  //显示均值
     [1] 3 
    #数据标准化 
    scale(data, center=T,scale=T) 
    [,1] [1,] -1.06904 [2,] -0.53452 [3,] 0.00000 [4,] 1.60357 [5,] 0.00000 
    attr(,"scaled:center")   //显示均值
    [1] 3 
    attr(,"scaled:scale")   //显示标准差
    [1] 1.8708
    

    scale方法中的两个参数center和scale的解释:
    1.center和scale默认为真,即T或者TRUE
    2.center为真表示数据中心化
    3.scale为真表示数据标准化

    2.2.2.2 更多方法

    数据集
    x<-cbind(c(1,2,3,4),c(5,5,10,20),c(3,6,9,12))
    
    自己写标准化
    x_min_temp<-apply(x,2,min) 
    x_min<-matrix(rep(x_min_temp,4),byrow=TRUE,ncol=3) #需要输入行数和列数
    abs(x-x_min) #当前值减去均值
    x_extreme_temp<-apply(x,2,max)-apply(x,2,min)
    x_extreme<-matrix(rep(x_extreme_temp,4),byrow=TRUE,ncol=3) #需要输入行数和列数
    abs(x-x_min)/x_extreme
    
    sweep函数
    center <- sweep(x, 2, apply(x, 2, min),'-')  #在列的方向上减去最小值,不加‘-’也行
    R <- apply(x, 2, max) - apply(x,2,min)    #算出极差,即列上的最大值-最小值
    x_star<- sweep(center, 2, R, "/")        #把减去均值后的矩阵在列的方向上除以极差向量
    

    sweep函数更简洁、易懂,且不需要输入行数和列数,二者性能也差不多

    sweep再举一个例子:

    m<-matrix(c(1:9),byrow=TRUE,nrow=3)
    //第一行都加1,第二行都加4,第三行都加7
    sweep(m, 1, c(1,4,7), "+")  
    
    scale函数,这个比较简单,不多说
    scale(x, center = TRUE, scale = TRUE)
    

    有些地方说归一化,有些地方说标准化。

    相关文章

      网友评论

          本文标题:问卷数据的标准化

          本文链接:https://www.haomeiwen.com/subject/dsxdwxtx.html