【问题标题】:Dummy variables for Logistic regression in RR中逻辑回归的虚拟变量
【发布时间】:2015-01-03 04:46:46
【问题描述】:

我正在对三个全是二元的因素进行逻辑回归。

我的数据

   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 似乎对先前定罪 P 取 1,对入店行窃犯罪取 1。因此,如果上述两个都是 1,则交互效果仅为 1。我现在想尝试交互项的不同组合,例如,我想看看如果先前的信念是 P 犯罪不是入店行窃。

有没有办法让 R 对 1 和 0 采取不同的情况?这将极大地促进我的分析。

谢谢。

【问题讨论】:

    标签: r statistics regression logistic-regression


    【解决方案1】:

    您已经在回归中获得了两个分类变量的所有四种组合。你可以看到如下:

    这是回归的输出:

    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
    

    您可以对两个预测变量的因子值重新排序,但这只会改变属于上述四种情况的变量组合。

    更新:关于与因子排序相关的回归系数问题。改变参考水平会改变系数,因为系数将代表不同类别组合之间的对比,但不会改变YesNo 结果的预测概率。 (如果您可以仅通过更改参考类别来更改预测,则回归建模不会那么可信。)请注意,例如,即使我们将参考类别切换为 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 
    

    【讨论】:

    • 这里的主要混淆来源恐怕是交互术语。如果我们将 CrimeOther 设置为 1,PriorConvP 也设置为 1,那会不会有所不同,甚至意义重大?
    • @JohnK 在这种情况下,p 值不会改变,因为只有一个与交互相关的系数(由于两个预测变量都是二元的)。一般来说(预测变量的级别 >= 2),如果您有兴趣测试交互,您应该进行综合测试(使用anova())。
    • @DMC 对于不同的参考类别,模型整体确实略有变化。例如尝试使用此代码 levels(table1$Crime) table1$Crime
    • @JohnK 我在您的第一条评论中指的是“重要”。系数肯定会改变(不同的参数化导致不同的比较)。但 p 值不会改变。
    【解决方案2】:

    我同意@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

    【讨论】:

      猜你喜欢
      • 2021-04-27
      • 2014-02-20
      • 2019-07-22
      • 2018-01-20
      • 2018-05-23
      • 1970-01-01
      • 2021-09-17
      • 2018-03-29
      • 2020-08-19
      相关资源
      最近更新 更多