2014-11-06 105 views
1

我對三個二元因素進行邏輯迴歸。Logistic迴歸的虛擬變量R

我的數據

table1<-expand.grid(Crime=factor(c("Shoplifting","Other Theft Acts")),Gender=factor(c("Men","Women")), 
    Priorconv=factor(c("N","P"))) 
    table1<-data.frame(table1,Yes=c(24,52,48,22,17,60,15,4),No=c(1,9,3,2,6,34,6,3)) 

和模型

fit4<-glm(cbind(Yes,No)~Priorconv+Crime+Priorconv:Crime,data=table1,family=binomial) 
summary(fit4) 

[R似乎需要1前科P和1作案行竊。因此,如果上述兩者都爲1,則交互效果僅爲1.現在我想嘗試交互術語的不同組合,例如,我想看看如果事先定罪是犯罪行爲P 不是在偷東西。

有沒有辦法讓R爲1和0做不同的事情?這將大大方便我的分析。

謝謝。

回答

4

您已經在迴歸中獲得了兩個分類變量的所有四種組合。你可以看到這個如下:

這裏是你迴歸的輸出:

Call: 
glm(formula = cbind(Yes, No) ~ Priorconv + Crime + Priorconv:Crime, 
    family = binomial, data = table1) 

Coefficients: 
          Estimate Std. Error z value Pr(>|z|)  
(Intercept)     1.9062  0.3231 5.899 3.66e-09 *** 
PriorconvP     -1.3582  0.3835 -3.542 0.000398 *** 
CrimeShoplifting    0.9842  0.6069 1.622 0.104863  
PriorconvP:CrimeShoplifting -0.5513  0.7249 -0.761 0.446942 

所以,Priorconv,參考類別(具有虛擬值= 0)爲N。而對於Crime,參考類別是Other。因此,這裏是如何解釋迴歸結果爲每個四種可能性(其中log(P /(1-P))是Yes結果的賠率日誌):

1. PriorConv = N and Crime = Other. This is just the case where both dummies are 
    zero, so your regression is just the intercept: 

log(p/(1-p)) = 1.90 

2. PriorConv = P and Crime = Other. So the Priorconv dummy equals 1 and the 
    Crime dummy is still zero: 

log(p/(1-p)) = 1.90 - 1.36 

3. PriorConv = N and Crime = Shoplifting. So the Priorconv dummy is 0 and the 
    Crime dummy is now 1: 

log(p/(1-p)) = 1.90 + 0.98 

4. PriorConv = P and Crime = Shoplifting. Now both dummies are 1: 

log(p/(1-p)) = 1.90 - 1.36 + 0.98 - 0.55 

您可以重新排列因素兩個預測變量的值,但是這隻會改變哪些變量組合落入上述四種情況中的每一種。

更新:關於迴歸係數相對於因素排序的問題。更改參考水平將改變係數,因爲係數將表示不同類別組合之間的對比,但不會改變預測結果的概率。 (如果僅僅通過改變參考類別就可以改變預測,那麼迴歸建模就不會那麼可信)。例如,注意,即使我們切換參考類別爲Priorconv

m1 = glm(cbind(Yes,No)~Priorconv+Crime+Priorconv:Crime,data=table1,family=binomial) 
predict(m1, type="response") 

1   2   3   4   5   6   7   8 
0.9473684 0.8705882 0.9473684 0.8705882 0.7272727 0.6336634 0.7272727 0.6336634 

table2 = table1 
table2$Priorconv = relevel(table2$Priorconv, ref = "P") 

m2 = glm(cbind(Yes,No)~Priorconv+Crime+Priorconv:Crime,data=table2,family=binomial) 
predict(m2, type="response") 

1   2   3   4   5   6   7   8 
0.9473684 0.8705882 0.9473684 0.8705882 0.7272727 0.6336634 0.7272727 0.6336634 
+0

這裏混淆的主要來源是恐懼交互術語。如果我們將CrimeOther設置爲1,並且PriorConvP也設置爲1,那麼它會不會有所不同,甚至可能很重要? – JohnK 2014-11-06 16:36:57

+2

@JohnK在這種情況下,p值不會改變,因爲只有一個與交互相關的係數(由於兩個預測變量都是二進制的)。一般而言(預測因子> = 2級),如果你對測試交互感興趣,你應該做一個綜合測試(使用'anova()')。 – davechilders 2014-11-06 16:43:59

+0

@DMC對於不同的參考類別,模型總體上會發生輕微變化。嘗試使用此代碼級別(表1 $ Crime) table1 $ Crime <-relevel(table1 $ Crime,ref =「Shoplifting」) levels(table1 $ Crime) table1 $ Priorconv <-relevel(table1 $ Priorconv,ref =「N」) m <-glm(cbind(Yes,No)〜Priorconv * Crime,data = table1,family = binomial) summary(m) – JohnK 2014-11-06 17:00:12

1

我同意@ eipi10提供的解釋。您還可以使用relevel擬合模型前更改參考電平:

levels(table1$Priorconv) 
## [1] "N" "P" 

table1$Priorconv <- relevel(table1$Priorconv, ref = "P") 
levels(table1$Priorconv) 
## [1] "P" "N" 

m <- glm(cbind(Yes, No) ~ Priorconv*Crime, data = table1, family = binomial) 
summary(m) 

注意,我改變了glm()formula參數包括:Priorconv*Crime這是更緊湊。