White の修正による標準誤差を出力する方法

[OS] ALL
[リリース] SAS System 8以降
[キーワード] REG, MODEL, HCCME=, ACOV, WHITE, standard error, White correction

[質問]

線形回帰において、White の修正による標準誤差、t値、およびそれに対する p値を計算するにはどのようにしたらよいですか。

[回答]

SAS 9.2 以降では、REG プロシジャで対応しています。MODEL ステートメントで WHITE オプションを指定してください。

一方、SAS 9.1 以降における SAS/ETS の MODEL プロシジャでは、FIT ステートメントで HCCME=オプションを利用して計算できます。
通常の White の修正については、HCCME=0 の指定となります。

SAS 9.1 より前のリリースでは、REG プロシジャで ACOV オプションを MODEL ステートメントで指定したときに出力される行列から計算できます。

次のサンプルを参考にしてください。


                     /* Econometric Analysis 5ed.(Greene) の Example11.2 */
  DATA test;
    INPUT MDR Acc Age Income Avgexp Ownrent Selfempl @@;
    Incomesq=Income**2;
    IF Avgexp>0;
  DATALINES;
  0 1 38 4.52 124.98 1 0 0 1 33 2.42 9.85 0 0
  0 1 34 4.50 15.00 1 0 0 1 31 2.54 137.87 0 0

  (中略)
  
  0 1 26 5.00 451.20 1 0 0 1 46 5.50 251.52 1 0
  ;
  RUN;
                         /* REGプロシジャによる例。SAS9.2 以降で利用可能 */
  PROC REG DATA=test;
    MODEL Avgexp=age ownrent income incomesq/ WHITE;
  RUN;
  QUIT;


                         /* MODELプロシジャによる例。SAS9.1以降で利用可能 */
  PROC MODEL DATA=test;
    PARMS Intercept b1 b2 b3 b4;
    Avgexp=Intercept+b1*Age+b2*Ownrent+b3*Income+b4*Incomesq;
    FIT Avgexp / OLS HCCME=0;
  RUN;
  QUIT;

                /* REGプロシジャの結果からWhiteの修正による結果を計算する */
  PROC REG DATA=test;
    MODEL Avgexp=age ownrent income incomesq/ ACOV;
    ODS OUTPUT ParameterEstimates=parmest ACovEst=whiteest
               ANOVA=anovaout(WHERE=(source='Error'));
  RUN;
  QUIT;

                                            /* Whiteの標準誤差を計算する */
  DATA whiteest2;
    SET whiteest;
    ARRAY temp{*} _NUMERIC_;
    DO i=1 TO DIM(temp);
      IF VNAME(temp{i})=variable THEN StdErr=SQRT(temp{i});
    END;
    KEEP variable stderr;
  RUN;

  DATA white;
    MERGE parmest whiteest2;
    IF _N_=1 THEN SET anovaout(KEEP=DF RENAME=(DF=DF2));
    tValue=Estimate/StdErr;
    Probt=2*(1-PROBT(ABS(tValue),DF2));
    DROP DF2;
  RUN;

                                                      /* 結果のプリント */
  TITLE4 "Parameter Estimates with White's correction";
  PROC PRINT DATA=white LABEL;
  RUN;
  TITLE4;