McNemar 检验与条件逻辑回归之间的关系

机器算法验证 物流 mcnemar 测试 克洛吉特
2022-02-10 06:00:06

我对成对观察中的二元响应数据建模感兴趣。我们的目标是推断组中事前干预的有效性,可能会调整几个协变量,并确定作为干预的一部分接受特别不同培训的组是否存在效果修改。

给定以下形式的数据:

id phase resp
1  pre   1
1  post  0
2  pre   0
2  post  0
3  pre   1
3  post  0

以及成对响应信息2×2

PreCorrectIncorrectPostCorrectabIncorrectcd

我们对假设检验感兴趣:H0:θc=1

McNemar 检验给出:下(渐近)。这是直观的,因为在零值下,我们期望相等比例的不一致对()有利于正面效应()或负面效应()。定义了正例定义的概率观察到正不一致对的几率是Q=(bc)2b+cχ12H0bcbcp=bb+cn=b+cp1p=bc

另一方面,条件逻辑回归使用不同的方法通过最大化条件似然来检验相同的假设:

L(X;β)=j=1nexp(βXj,2)exp(βXj,1)+exp(βXj,2)

其中exp(β)=θc

那么,这些测试之间有什么关系呢?如何对前面介绍的列联表进行简单测试?查看 clogit 和 McNemar 方法在 null 下的 p 值校准,您会认为它们完全不相关!

library(survival)
n <- 100
do.one <- function(n) {
  id <- rep(1:n, each=2)
  ph <- rep(0:1, times=n)
  rs <- rbinom(n*2, 1, 0.5)
  c(
    'pclogit' = coef(summary(clogit(rs ~ ph + strata(id))))[5],
    'pmctest' = mcnemar.test(table(ph,rs))$p.value
  )
}

out <- replicate(1000, do.one(n))
plot(t(out), main='Calibration plot of pvalues for McNemar and Clogit tests', 
  xlab='p-value McNemar', ylab='p-value conditional logistic regression')

在此处输入图像描述

2个回答

对不起,这是一个老问题,我偶然发现了这个。

您的 mcnemar 测试代码中存在错误。尝试:

n <- 100
do.one <- function(n) {
  id <- rep(1:n, each=2)
  case <- rep(0:1, times=n)
  rs <- rbinom(n*2, 1, 0.5)
  c(
    'pclogit' = coef(summary(clogit(case ~ rs + strata(id))))[5],
    'pmctest' = mcnemar.test(table(rs[case == 0], rs[case == 1]))$p.value
  )
}

out <- replicate(1000, do.one(n))

在此处输入图像描述

有 2 个相互竞争的统计模型。模型 #1(零假设,McNemar):正确到不正确的概率 = 不正确到正确的概率 = 0.5 或等效 b=c。模型#2:正确到不正确的概率<不正确到正确或等价的概率b > c。对于模型 #2,我们使用最大似然法和逻辑回归来确定代表模型 2 的模型参数。统计方法看起来不同,因为每种方法都反映了不同的模型。