2014-11-06 79 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这是更紧凑。