LOGISTICプロシジャにおけるカテゴリカル変数のコード化について

[OS] ALL
[リリース] 8.1 8.2
[キーワード] LOGISTIC, CONTRAST, PARAM=, GLM, EFFECT

[質問]

カテゴリカル変数(たとえばTREAT)を含むロジスティック回帰の分析をLOGISTICプロシジャにて実行しています。その際、GLMプロシジャ、GENMODプロシジャと同じように、CONTRASTステートメントを指定していますが、ログ画面に以下のメッセージが表示されます。

WARNING: More coefficients than levels specified for effect 
treat.  Some coefficients will be ignored.
このメッセージを回避する方法を教えてください。

[回答]

LOGISTICプロシジャのCLASSステートメントでカテゴリカル変数を指定している場合、ダミー変数を作成するデフォルトの方法がEFFECTコーディングとなります。GLMプロシジャ、GENMODプロシジャでは異なる方法(GLMコーディング)でダミー変数を作成しているので、CONTRASTステートメントの係数の指定に注意する必要があります。

ここでは、メッセージを回避する方法として2つご紹介します。なお、簡単な例として、水準数が3であると仮定します。

例 1:LOGISTICプロシジャのCLASSステートメントでPARAM=オプションを指定することにより、ダミー変数の作成方法をGLMコーディングに変更する例


PROC LOGISTIC DATA=one;
  CLASS treat / PARAM=glm;           /* GLMコーディングを指定 */
  MODEL RESP=treat;
  CONTRAST '1 vs 2'  treat 1 -1  0;
  CONTRAST '1 vs 3'  treat 1  0 -1;
  CONTRAST '2 vs 3'  treat 0  1 -1;
RUN;

GLMコーディングを用いることにより、GLMプロシジャ、GENMODプロシジャと同じようにCONTRASTステートメントにおける係数の指定を行うことができます。

例 2:デフォルトであるEFFECTコーディングに従い、係数の指定を行なう例

EFFECTコーディングの場合、以下のように水準数より1つ少ない数のダミー変数(X_1,X_2)が作成されます。

  TREAT    X_1     X_2
    1       1       0
    2       0       1
    3      -1      -1

この場合、変数TREATにおける最初の水準(1)と2番目の水準(2)を比較する場合には、2行目の係数を1行目の係数から差し引くことにより、CONTRASTステートメントにて指定すべき係数を求めることができます。他の比較に関しても同じようにして求められます。その結果、以下のようにCONTRASTステートメントの係数を指定することになります。


PROC LOGISTIC DATA=one;
  CLASS treat;
  MODEL RESP=treat;
                       /* EFFECTコーディングにおける水準の比較 */
  CONTRAST '1 vs 2'  treat 1 -1;
  CONTRAST '1 vs 3'  treat 2  1;
  CONTRAST '2 vs 3'  treat 1  2;
RUN;