具有分类变量的多变量回归交互作用项

时间:2020-08-06 09:32:46

标签: r glm interaction

我是R的新手,正在研究glm模型,并希望在亚组分析中寻找BMI组和患者组(4组)对死亡率(二元)的相互作用。我有以下代码:

model <- glm(death~patient.group*bmi.group, data = data, family = "binomial")
summary(model)

我得到以下信息:

Coefficients:
                            Estimate Std. Error z value Pr(>|z|)    
(Intercept)               -3.4798903  0.0361911 -96.153  < 2e-16 ***
patient.group2             0.0067614  0.0507124   0.133    0.894    
patient.group3             0.0142658  0.0503444   0.283    0.777    
patient.group4             0.0212416  0.0497523   0.427    0.669    
bmi.group2                 0.1009282  0.0478828   2.108    0.035 *  
bmi.group3                 0.2397047  0.0552043   4.342 1.41e-05 ***
patient.group2:bmi.group2 -0.0488768  0.0676473  -0.723    0.470    
patient.group3:bmi.group2 -0.0461319  0.0672853  -0.686    0.493    
patient.group4:bmi.group2 -0.1014986  0.0672675  -1.509    0.131    
patient.group2:bmi.group3 -0.0806240  0.0791977  -1.018    0.309    
patient.group3:bmi.group3 -0.0008951  0.0785683  -0.011    0.991    
patient.group4:bmi.group3 -0.0546519  0.0795683  -0.687    0.492    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

如此显示,我将为每个patient.group:bmi.group设置一个p值。我的问题是,有没有办法让patient.group:bmi.group获得一个p值,而不给每个子组一个p值?我试图在网上寻找答案,但仍然找不到答案:(

非常感谢。

1 个答案:

答案 0 :(得分:1)

这取决于您将患者和BMI组视为因素还是连续的协变量。如果它们是协变量,则@ jay.sf的建议是合适的。对于患者组的线性效应和BMI组的线性效应之间的相互作用,它拟合一个自由度项。

但这取决于组的顺序和定义。例如,假设患者组1和2之间的“差异”与患者组2和3之间的“差异”相同,依此类推。患者组的排序是否以某种方式使得第1组<第2组<第3组<第4组?对于BMI同样如此。该模型还假设患者规模上1个单位的变化与BMI规模上1个单位的变化“相同”。我不知道这些是否是合理的假设。

通常将患者组和BMI组都视为因素。这假定不按组排序,也不假定任何两个组之间的差异等于任何其他两个组之​​间的差异。在这种情况下,jay.sf的建议可能会产生误导性的答案。

为了说明我的观点...

首先,生成一些您未提供的人工数据:

data <- tibble() %>% 
          expand(patient.group=1:4, bmi.group=1:3, rep=1:5) %>% 
          mutate(
            z=-0.25*patient.group + 0.75*bmi.group, 
            death=rbernoulli(nrow(.), exp(z)/exp(1+z))
          ) %>% 
          select(-z)

按照jay.sf的建议,设置一个具有交互作用的简单连续协变量模型:

covariateModel <- glm(death~patient.group * bmi.group, data = data, family = "binomial")
summary(covariateModel)

部分给予

Coefficients:
                        Estimate Std. Error z value Pr(>|z|)
(Intercept)              -2.6962     1.8207  -1.481    0.139
patient.group             0.7407     0.6472   1.144    0.252
bmi.group                 1.2697     0.8340   1.523    0.128
patient.group:bmi.group  -0.3807     0.2984  -1.276    0.202

在这里,patient.group:bmi.group交互的p值是基于单个自由度z检验的Wald检验。

需要稍微复杂一点的方法才能使因子模型具有交互作用,并获得对“整体”交互作用的检验。

mainEffectModel <- glm(death~as.factor(patient.group) + as.factor(bmi.group), data = data, family = "binomial")
interactionModel <- glm(death~as.factor(patient.group) * as.factor(bmi.group), data = data, family = "binomial")
anova(mainEffectModel, interactionModel, test="Chisq")

给予

Analysis of Deviance Table

Model 1: death ~ as.factor(patient.group) + as.factor(bmi.group)
Model 2: death ~ as.factor(patient.group) * as.factor(bmi.group)
  Resid. Df Resid. Dev Df Deviance Pr(>Chi)
1        54     81.159                     
2        48     70.579  6    10.58   0.1023

在这里,偏差的变化是一个得分测试,并作为卡方统计量分布在(4-1)x(3-1)= 6个自由度上。

这两种方法使用我的特定数据集会给出类似的答案,但它们可能并非总是如此。两者在统计上都是正确的,但是哪一种最合适则取决于您的特定情况。没有足够的信息要评论。

This excellent post提供了更多上下文。

相关问题