|
|
単一代入法や多重代入法による欠損値への代入方法
[OS] ALL
[リリース] SAS8.2以降
[キーワード] SINGLE IMPUTATION, MULTIPLE IMPUTATION
[質問]
単一値代入法(single imputation)や多重代入法(multiple imputation)に基づいて、欠損値への代入(補完、埋め込み)を行なうには、どのようにしたらよいですか。
[回答]
多重代入法についてはMIプロシジャとMIANALYZEプロシジャが対応しています。これら2種のプロシジャは、SAS 8では評価版の扱いですが、SAS9では正規版となり、新たな機能も追加されています。
詳細については、下記のドキュメントをご参照ください。
- SAS/STAT Software: Changes and Enhancements, Release 8.2 (英語版、注文番号:58309)
- SAS/STAT 9.1 User's Guide
一方、単一値代入法を包括的に扱うプロシジャはありませんが、代入方法に応じて以下のような対処策が考えられます。
- ■ 全ての欠損値に同じ値(たとえば0)を代入する方法
-
DATAステップでMISSING関数を使用すれば可能です。下記のFAQをご参照ください。
また、SAS/STATのSTDIZEプロシジャを利用することもできます。この場合、MISSING=オプションで指定した数値が欠損値に代入されます。
PROC STDIZE DATA=data1 REPONLY MISSING=0 OUT=out1;
VAR _numeric_;
RUN;
- ■ 各変数に平均を代入する方法
-
前項のプログラムから、MISSING=オプションの指定を削除すると、各変数に平均が代入されます。また、下記のように、Base SASのSTANDARDプロシジャも使用できます。
PROC STANDARD DATA=data2 REPLACE OUT=out2;
VAR _numeric_;
RUN;
なお、STDIZEプロシジャでは中央値を代入することもできます。PROC STDIZEステートメントのオプションとしてMETHOD=MEDIANを指定してください。
- ■ 各変数に指定した値を代入する方法
-
STDIZEプロシジャで対応可能です。代入する値を事前にデータセットとして用意し、オプションとして「METHOD=IN( )」を指定してください。かっこの中には、用意したデータセットの名前を指定します。
以下の例は、変数xにおける欠損値に対して1を、変数yにおける欠損値に対して2を代入するものです。
/* 方法1 */
DATA impute;
LENGTH _type_$ 8;
INPUT _type_ x y;
CARDS;
LOCATION 1 2
SCALE 1 1
;
RUN;
PROC STDIZE DATA=data3 METHOD=IN(impute) REPONLY OUT=out3;
VAR x y;
RUN;
/* 方法2 */
DATA impute2;
loc_x=1;
loc_y=2;
scal_x=1;
scal_y=1;
RUN;
PROC STDIZE DATA=data3 METHOD=IN(impute2) REPONLY OUT=out4;
VAR x y;
LOCATION loc_x loc_y;
SCALE scal_x scal_y;
RUN;
- ■ 線形回帰に基づく方法や、群ごとの平均を代入する方法
-
SAS/STATのREGプロシジャやGLMプロシジャでは、OUTPUTステートメントを利用すると、従属変数が欠損値である場合でもその予測値が算出されます。この機能を応用してください。
- ■ LOCF(Last Observation Carried Forward)に基づく方法
-
LVCF(Last Value Carried Forward)とも呼ばれます。一般には、DATAステップを利用して対応することができます。下記のFAQのプログラムを参考にしてください。
また、米国で開かれているSASユーザー会(SUGI28)では、LOCFに関する下記の論文が発表されています。
- ■ Hot Deck法、およびCold Deck法
-
一般には、DATAステップを用いて条件分けを行って対応することが考えられます。また、状況によっては何らかのプロシジャの併用が必要となる場合もあります。
|