了解对数据进行子集化时的回归结果

机器算法验证 回归 置信区间 混杂
2022-04-09 08:33:25

我有一些跨越几年的数据:2006-2010。我已经运行逻辑回归来对数据进行建模。对于整个数据集,我得到一个 95% 的置信区间来表示感兴趣的参数的优势比

(0.34 - 0.47 ) 

说明效果非常显着。但是,对于每一年,使用相同的模型规范,置信区间为:

2006: (0.78 - 1.94) (not significant)
2007: (0.61 - 0.93)
2008: (0.63 - 0.90)
2009: (0.92 - 1.30) (not significant)
2010: (0.88 - 1.33) (not significant)

我如何调和整个数据集的置信区间低于所有个别年份的置信区间?我猜这与样本量有关——更大的样本量会导致更低的 p 值:我想我得到了这背后的数学原理,但我无法理解它背后的直觉。

更新1

为了回应迈克尔和彼得的回答,我提供了更多信息。

型号为:

death~treatment+age+imd+smoking+clinicals+drugs+comorbidities

笔记:

  1. 死亡是二元的
  2. 治疗是二元的 - 是否给予治疗 A 或治疗 B。这是我给出的置信区间的感兴趣的参数(我通过对估计值 +/- 1.96xSE 的 CI 求幂获得)
  3. 年龄是年龄
  4. imd 是患者的社会经济地位指数
  5. 吸烟是分类的,并且具有与患者吸烟状况有关的几个级别。
  6. 临床是一组临床测量,如心率、血压
  7. 药物是一组二元协变量,指示是否给予特定药物
  8. 合并症是一组二元协变量,表明患者是否患有某些疾病:例如哮喘、糖尿病

在整个模型中,我没有将年份作为协变量包括在内 - 相同的模型公式用于子集数据和整个数据。

连续变量之间的共线性没有问题,但我不太确定分类变量之间的关联。我认为这可能是一个问题,但我不知道如何解决它 - 我尝试了一些卡方检验,但没有任何东西独立于其他任何东西(我认为这可能是由于样本量 - 据我的老师说它没有例如,哮喘与糖尿病共存是没有意义的)

更新2

在迈克尔进一步评论之后,我现在提供更多信息……治疗 A/B 的比例在此期间发生了很大变化 - 这是 2006 年的一种新治疗,几乎没有使用,但现在是首选治疗:

2006: 555 out of 11,505
2007: 2,810 out of 12,307
2008: 5,669 out of 13,243
2009: 9,111 out of 14,654
2010: 12,368 out of 15,573

总体:92,767 中的 30,643

死亡率没有太大变化(整个过程中约为 7%)

3个回答

在这种情况下,它似乎与样本量无关,因为个别年份的 CI 甚至不与整个时期的 CI 重叠。

很难说到底发生了什么。您的代码会有所帮助 - 完整数据集的模型是否包括作为 IV 的年份?你的因变量是什么?你的自变量是什么?

显然,年份似乎是一个令人困惑的变量。换句话说,你有

DV ~ IV

但是,此外,DV 与年份有关,IV 与年份有关。

与时间混淆是很常见的。如果 DV 随着时间的推移变得更有可能,并且 IV 随着时间的推移而增加,那么就会存在一组与您发现的关系类似的关系。

为了扩展 Peter Flom 的回答(在 Michael Chernick 随后的回复中得到回应),这张图可能有助于直觉。

逻辑图

下面的R代码展示了它是如何产生的。简而言之,它每年生成 400 个数据点,变量的值x范围从02通过24,每年向上移动:这是一种(轻度)混淆xyear它创造了概率y根据逻辑模型,并为以后使用,生成二进制观察z根据这些概率。绘制了概率,颜色区分了年份。最后,用虚线对这 2000 个观测值进行逻辑拟合。

# Create sample data
#
logistic <- function(x) 1 / (1 + exp(-x))
n <- 400      # Values per year
offset <- 80  # Shift in x-values year-to-year
year <- as.factor(floor(seq(from=2006,to=2011-1/n, by=1/n)))
x <- as.vector(sapply(1:5, function(i) offset*i + 1:n)) / n * 2
y <- logistic((4 - 2/3 * x - unclass(year)))
set.seed(17)
z <- rbinom(length(y), 1, prob=y)
data <- data.frame(cbind(x, year, y, z))
#
# Plot the *probabilities* which underlie the data.
#
par(mfrow=c(1,1))
plot(x, y, col=year, pch=19, cex=0.75, ylab="Probability", 
     main="Individual and Overall Fits")
#
# Plot the overall fit.
#
b <- summary(glm(z ~ x, data=data, family=binomial(link="logit")))$coefficients
curve(logistic(b[1] + b[2]*x), add=TRUE, lwd=3, lty=2, col="Gray")

显然,这种下降曲线的“阶梯”的效果是使整个模型平均通过中间,这表明下降比任何单个步骤(年份)显示的要陡峭得多。

我们也可以计算优势比及其 95% CI:

output <- function(d) {
  b <- summary(glm(z ~ x, data=d, family=binomial(link="logit")))$coefficients
  a <- b["x", "Estimate"]
  u <- b["x", "Std. Error"]
  z <- qnorm(c(.025, .975))
  exp(c(a, a + z*u))
}
output(data)
by(data, data$year, output)

每个模型的(清理后的)输出,形式为(估计、下限、上限),是

Overall
0.17 0.14 0.20
year: 1
0.54 0.31 0.94
year: 2
0.53 0.37 0.78
year: 3
0.36 0.25 0.53
year: 4
0.61 0.36 1.03
year: 5
0.47 0.22 1.01

0.17 的总体系数低于任何年度(特定年份)拟合的置信下限,其中一些显然甚至不显着(因为它们的置信区间包括 1.0)。


注释

这种现象并不是逻辑回归所特有的:它出现在许多普通的回归中,并且以这种形式,已经在本网站的其他地方进行了讨论和说明。(恐怕发现讨论可能需要一些聪明的搜索。)许多教科书使用这样的例子来说明在统计模型中包含和控制重要变量的价值并讨论混淆。

这个例子使用了相当大的(子)样本量:这表明置信区间宽度的变化并不完全是由于样本量的变化。事实上,大部分的变化是因为每一个“阶梯”都比整体趋势要浅得多,因此根本就没有趋势那么容易区分。

没有进行多重测试:我们只关注一个协变量。

我认为较小的样本量可以解释为什么有些年份很重要而有些年份不重要。实际上,如果您对 5 个不同的测试进行多重性校正,您可能会发现在对测试进行适当的 p 值调整的情况下,它们都不显着。

但是彼得发现了一个重要的观察结果。个别年份给出的优势比接近 1(三个案例 1 包含在区间中)。但是,当汇总这些年份时,与任何单个年份相比,该比率离 1 远得多。这向我表明,影响结果的某些因素每年都不同。如果是这种情况,如果不将该混杂因素作为模型中的另一个协变量包含在内,则数据实际上是不可合并的。然而,要理解这一点,我们需要了解更多细节。您还没有告诉我们您正在使用什么协变量以及您正在比较的协变量的值以获得优势比。

但是,关于直觉的问题的答案,您看到的结果是由于样本量的差异、多次测试以及模型依赖于年份的某些原因导致的,因此无法合并。