Data Processing(数据处理)
数据标准化
统计分析过程如果需要对其进行数据标准化,即每个变量都减去均值后再除以方差。
proc stdize data=sashelp.class out=stdclass; var age weight height; run;
SAS 的 proc stdize 过程,本意用于数据的标化,不过,利用 missing选项,它还有一个妙用:连续变量缺失值的填补。可以设定用均值或者中位数填补,也可直接指定一个具体的值填补。
proc stdize data=sashelp.heart out=impheart missing=mean reponly oprefix sprefix=imp_; var Cholesterol; run;
高斯秩变换(秩转换)
变量的值按照从小到大的顺序排序,获得每个变量值的秩次,并用秩次代替原有变量值的过程。
data a;
value=45;output;
value=25;output;
value=94;output;
value=96;output;
value=40;output;
value=45;output;
value=25;output;
value=94;output;
value=96;output;
value=40;output;
run;
data b;
set a;
if _n_<=5 then grp=1;
else grp=2;
run;
data b;
set b;
by grp;
if first.grp then _ord_=1;
else _ord_+1;
run;
proc sort;
by grp value;
run;
data b;
set b;
by grp;
if first.grp then rank=0;
else rank+1;
proc sort;
by grp _ord_;
run;
proc sql noprint;
create table c as select *, max(rank) as max from b group by grp;
quit;
data c;
set c;
_rank_=(rank/max-0.5)*2;
epsilon=1e-6;
if _rank_=1 then _rank_=_rank_-epsilon;
else if _rank_=-1 then _rank_=_rank_+epsilon;
erf=erf(_rank_);
if _rank_ >= 0 then erfc=sqrt(cinv(abs(_rank_),1)/2);
else if _rank_ < 0 then erfc=-sqrt(cinv(abs(_rank_),1)/2);
run;
缺失数据多重插补
缺失数据类型
缺失数据类型 | 说明 |
---|---|
完全随机缺失(MCAR) | 缺失与已有观测值和其他缺失值无关,只是由于偶然性 |
随机缺失(MAR) | 缺失与已有观测有关,与其他缺失值无关 |
非随机缺失(MNAR) | 缺失与已有观测和其他缺失值有关 |
多重插补
处理缺失数据的一种策略是单次插补,为每个缺失值替换一个值。比如用其他非缺失值的平均值填补,用上一个非缺失值填补等等,这种策略不能反映缺失值预测的不确定性,由此产生的参数估计的估计方差趋向于0.
而多重插补从其分布中抽取缺失值的随机样本,此过程会产生有效的统计推断,这些推断可以反映由于缺失值导致的不确定性。进行多重插补的三个步骤:
- 对缺失数据进行m次填充,以生成m个完整的数据集
- m个完整的数据集使用统计方法进行分析
- 将m个完整数据集的结果合并得出推断结果