查看原文
其他

用Stata实现数据标准化

爬虫俱乐部 Stata and Python数据分析 2022-03-15

本文作者:杨慧琳

文字编辑:李钊颖

技术总编:高金凤

重磅!!!爬虫俱乐部将于2019年10月2日至10月5日在湖北武汉举行Python编程技术培训,本次培训采用理论与案例相结合的方式,旨在帮助零基础学员轻松入门Python,由浅入深学习和掌握Python编程技术,尤其是爬虫技术和文本分析技术。该培训目前在火热招生中,点击《爬虫俱乐部2019十一Python编程技术培训报名啦!》或点击文末阅读原文,了解培训详细信息,抓紧时间报名吧!
在进行数据分析或模型估计时,经常需要对数据进行标准化处理(normalization)。例如,在一个数据集中变量A的取值区间为[0,10],变量B的取值区间为[100,1000]。若直接采用原始数据进行分析,由于变量B量纲更大,这样可能造成模型估计偏误。
 
借助数据标准化处理,可以将原始数据转换为无量纲、无数量级差异的标准化数值。通过将数据按照一定比例缩放,使变量取值落于一个特定区间或服从特定分布,消除了量纲、变量自身变异和数值大小的影响,从而便于对不同变量和数据进行综合分析、比较。
 
在介绍Stata软件的数据标准化操作之前,首先了解两种常用的数据标准化方法。

 

(一)  数据标准化方法


1、离差标准化


离差标准化是令变量的观测值减去该变量的最小值,然后除以该变量的极差,把数值标准化至Z分数,即:

经过离差标准化之后,变量的正、负数值均转化为正向数值,全部取值将处于[0,1]的范围内,相当于将一组数据按照大小排序压缩到一个小区间内。离差标准化是消除观测值量纲和变异大小因素影响的最简单方法。


2、标准差标准化


标准差标准化也称作Z-score标准化,当某个变量的最大、最小值未知,或存在超出取值范围的离群值(outliers)时,则不适合计算极差,此时可采用标准差标准化处理方式。在计算过程中,令变量观测值减去该变量的平均值,然后除以该变量的标准差,即:

经过上述处理,变量约有一半取值小于0,一半取值大于0,近似服从N(0,1)的标准正态分布。但采用该种方法,原来数值较大的观测值依然可能对估计结果产生显著影响,需进一步消除变量间的差异性。


(二)Stata操作


1、离差标准化

假设存在某一变量data,其描述性统计结果如下:

依据离差标准化方法介绍,可以直接调用内存中的返回值,计算变量data标准化后的数值:

return list //查看返回值gen a = (data-r(min))/(r(max)-r(min))sum a

通过以上处理,便生成了变量data的标准化数值,取值区间为[0,1],标准差也大大减少。
 
在Stata中,也有一个便捷的离差标准化外部命令nscale。在使用之前,需通过“ssc install nscale”进行安装。其基本语法如下:

nscale varlist [,options]

nscale命令几个主要的选项:
generate(namelist):生成新变量namelist,用于存放标准化后的数值
prefix(name):生成含有特定前缀name的新变量,用于存放标准化后的数值
missing(#):若原观测值取值为#,则将标准化数值替换为缺失值“.”
up:与missing(#)选项连用,若原观测值取值不小于#,则将标准化数值替换为缺失值“.”
down:与missing(#)选项连用,若原观测值取值不大于#,则将标准化数值替换为缺失值“.”
 
在本文中,我们对变量data的所有取值进行标准化,并新生成一个标准化变量new_data,如下:
nscale data, pre(new_)sum new_*

如上,使用命令nscale标准化后的变量与直接通过公式计算得出的标准化数值结果一致。

 

2、标准差标准化

依然使用变量data进行标准差标准化处理,基于以上理论介绍,执行如下计算程序:

sum data //输入return list可查看返回值gen b = (data-r(mean))/r(sd)
对新生成的标准化变量b进行描述性统计,并绘制其频率直方图和正态分布概率密度曲线。执行程序:
sum bhist b, bin(100) norm

由上,经过标准差标准化处理后,新变量b的方差为1,均值为-4.68×10-11,非常接近于0,整体数值大致服从于N(0,1)分布。
 
此外,Stata内置的std()函数,可以快速实现以上标准差标准化计算过程。std()函数的语法如下:

 

std(exp) [, mean(#) std(#)]

 

其中,括号内为需要进行标准化的变量exp,选项mean(#) 和std(#)允许用户自定义新变量的均值和标准差,默认生成均值为0、标准差为1的标准化变量。
 在本例中,直接使用该函数对变量data进行标准差标准化,程序和结果如下:
egen new1_data = std(data) //默认均值为0,标准差为1sum new1_data

通过观察可知,采用标准差标准化方法时,新生成变量的均值、方差并不严格为0、1。在实际操作中,还需依据变量自身特点,探索最适用的标准化方法。



对爬虫俱乐部的推文累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫!

往期推文推荐

字符串方法介绍

Jupyter Notebook的使用

Stata16新功能之“框架”——frlink连接多个数据集(3)

Stata16新功能之“框架”——基础命令大合集(2)

三分钟教你读懂Python报错

解析XML文件

命令更新之reg2docx:将回归结果输出到word

命令更新之t2docx——报告分组均值t检验

爬虫俱乐部2019十一Python编程技术培训报名啦!

数据类型——Dict、Set与Frozenset简析

数据类型介绍——tuple、list和range对象
把pdf文件批量转成docx文件
格式化字符串方法的比较
朝花夕拾—— 如何输出内存中的矩阵与绘图
Stata16新功能——定义图形元素的绝对大小
将数值型计算“一网打尽”——(1)
Stata16新功能之“框架”——读入多个数据集(1)
手持Python,斗图不输!
朝花夕拾——cnstock与cntrade强强联合

关于我们

微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。


此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。

投稿邮箱:statatraining@163.com

投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存