调整分层以适应与R的混淆

时间:2018-12-29 23:57:37

标签: r statistics multivariate-testing

我有4次暴露(或属性)的数据(每个都是二进制数据,例如高/低,真/假,红色/蓝色)和1种疾病结果(真/假患病)。

我想在控制混杂因素的同时,计算每次接触导致疾病结果的相对风险。

我更喜欢使用分层,但是有4次曝光是很多分层。但是,如果有一种简便的方法,我将接受多元分析。分层是指https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5384727/

是否有软件工具可以帮助我输入包含5列的表格(4次暴露,1种疾病的结果)并按层生成相对风险值(具有95%的置信区间)?

数据结构为(前3列为曝光,最后一列为结果)。这些只是示例暴露来说明我的意思,而不是我的实际暴露量和结果:

|吃过早餐|行使|睡了超过7小时|很开心|

|真实|错误真实|错误

|错误真实|真实|真实|

|错误真实|错误错误

1 个答案:

答案 0 :(得分:0)

我无法为您提供分层服务,但是在R中进行多次逻辑回归非常简单。

首先提供一些示例数据。
350个样本,包含三个二进制解释变量和一个二进制响应变量。我还添加了两个解释变量之间的交互。

set.seed(1)
n <- 350
v1 <- sample(0:1, n, r=TRUE)
v2 <- sample(0:1, n, r=TRUE)
v3 <- sample(0:1, n, r=TRUE)
re <- 0.6*v1 + 0.8*v2 + 0.6*v3 + v1*v3 + rnorm(n)
re <- re > 1.3

dtf <- data.frame(re, v1, v2, v3)

然后我们退步。

# full model
mod0 <- glm(re ~ v1*v2*v3, data=dtf, family=binomial(link="logit"))
summary(mod0)

# full model minus three-way interaction
mod1 <- glm(re ~ v1*v2*v3 - v1:v2:v3, data=dtf, family=binomial(link="logit"))
summary(mod1)

# v1:v3 as only interaction
mod2 <- glm(re ~ v1+v2+v3 + v1:v3, data=dtf, family=binomial(link="logit"))
summary(mod2)

anova(mod0, mod1, mod2)

# odds ratio coefficients and confidence intervals
library(MASS)
exp(cbind(coef(mod2), confint(mod2)))

由于这些是逻辑回归(使用logit链接函数),因此响应的依据不是风险比,而是对数比值比。如果您想估计风险比率,那么严格来说就不是逻辑回归,因为您必须使用对数作为链接函数。通常建议不要这样做,但可以这样做。

mod3 <- glm(re ~ v1+v2+v3 + v1:v3, data=dtf, family=binomial(link="log"),
  start=c(log(mean(re)), 0, 0, 0, 0))
summary(mod3)

# risk ratio
exp(cbind(coef(mod3), confint(mod3)))