2つのカテゴリ予測変数(a、b)とバイナリターゲット(y)変数を含むデータセットがあるとします。ファクタ参照セルコーディングによって導入された線形相関変数を無視する方法
> df <- data.frame(
> a = factor(c("cat1","cat2","cat3","cat1","cat2")),
> b = factor(c("cat1","cat1","cat3","cat2","cat2")),
> y = factor(c(T,F,T,F,T))
>)
次の論理的な関係は、データ内に存在します。
if (a = cat3) then (b = cat3 and y = true)
else if (a = b) then (y = true) else y = false
は、私は私のデータセットのためのモデルを構築するためにglm
を使用したいです。 glm
は、カテゴリ変数aとbに参照セルコーディングを自動的に適用します。また、変数alias
(here)が導入されないように、各因子変数に適切な数のコードを見つけることにも注意します。
しかし、上記のデータセットの場合と同様に、変数aに対して生成された1つの参照コードと変数bの1つの参照コードとの間に線形関係が存在することがあります。
は私のモデルの出力を参照してください。
> model <- glm(y ~ ., family=binomial(link='logit'), data=df)
> summary(model)
...
Coefficients: (1 not defined because of singularities)
Estimate Std. Error z value Pr(>|z|)
(Intercept) 1.965e-16 1.732e+00 0.000 1.000
acat2 -2.396e-16 2.000e+00 0.000 1.000
acat3 1.857e+01 6.523e+03 0.003 0.998
bcat2 0.000e+00 2.000e+00 0.000 1.000
bcat3 NA NA NA NA # <- get rid of this?
どのように私はこのケースを処理する必要がありますか? glmに生成された参照コードの一部を省略するように指示する方法はありますか? 実際の問題では私の"cat3"
の値はNA
に相当します。私は私のデータセットのまったく同じインスタンスでNA
という2つの有意義な変数を持っています。
EDIT:
確認答えはコメントで指摘したようにしかし、この特定のケースでは特異点を無視することができ、問題を解決します。
@ ZheyuanLi:質問をお寄せいただきありがとうございます。特異点がモデル(またはアルゴリズムの収束速度など)に悪影響を及ぼすかどうかはわかりませんでした。正しく理解すれば、これらの特異点を無視して、その予測モデルをそのまま使用できますか? – fab