假設我有一個包含兩個分類預測變量(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生成的一個參考代碼和變量b的一個參考代碼之間存在線性關係。
見我的模型的輸出結果:
> 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
,與我的數據集完全相同。
編輯:
選中的答案解決的問題,但是,在這種特定的情況下,奇點可以簡單地在評論中指出忽略。
@ZheyuanLi:謝謝你提出的問題。我不確定奇點是否會對模型產生任何負面影響(或者算法收斂速度),所以如果我理解正確,我可以簡單地忽略這些奇點並按照原樣使用生成的模型進行預測。 – fab