高度偏斜数据的 t 检验

机器算法验证 t检验 偏度 置换检验
2022-01-20 16:03:54

我有一个包含数以万计医疗费用数据观察的数据集。该数据高度向右倾斜,并且有很多零。两组人看起来像这样(在这种情况下,两个年龄组,每个年龄组 > 3000 obs):

 Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
 0.0      0.0      0.0   4536.0    302.6 395300.0 
Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
 0.0      0.0      0.0   4964.0    423.8 721700.0 

如果我对此数据执行 Welch 的 t 检验,我会得到一个结果:

Welch Two Sample t-test

data:  x and y
t = -0.4777, df = 3366.488, p-value = 0.6329
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -2185.896  1329.358
sample estimates:
mean of x mean of y 
 4536.186  4964.455 

我知道对这些数据使用 t 检验是不正确的,因为它非常不正常。但是,如果我对均值的差异使用置换检验,我会一直得到几乎相同的 p 值(并且随着更多的迭代它会变得更接近)。

在 R 和 permTS 中使用 perm 包和精确的 Monte Carlo

    Exact Permutation Test Estimated by Monte Carlo

data:  x and y
p-value = 0.6188
alternative hypothesis: true mean x - mean y is not equal to 0
sample estimates:
mean x - mean y 
      -428.2691 

p-value estimated from 500 Monte Carlo replications
99 percent confidence interval on p-value:
 0.5117552 0.7277040 

为什么排列检验统计量如此接近 t.test 值?如果我记录数据,那么我会得到 0.28 的 t.test p 值,并且与置换测试相同。我认为 t 检验值比我在这里得到的更垃圾。我喜欢的许多其他数据集都是如此,我想知道为什么 t 检验似乎在不应该工作的情况下工作。

我在这里担心的是个人成本不是 iid 有许多成本分布非常不同的子群体(女性与男性、慢性病等)似乎违反了中心极限定理的 iid 要求,或者我不应该担心关于那个?

3个回答

t 检验和置换检验都没有太大的能力来识别两个这种异常偏斜分布之间的均值差异。 因此,它们都给出了无痛 p 值,表明根本没有意义。问题不在于他们似乎同意;那是因为他们很难发现任何差异,他们根本无法不同意!


出于某种直觉,考虑一下如果一个数据集中单个值发生变化会发生什么。例如,假设第二个数据集中没有出现最大值 721,700。平均值将下降大约 721700/3000,即 240。然而,平均值的差异仅为 4964-4536 = 438,甚至没有两倍大。这表明(尽管它没有证明)任何对均值的比较都不会发现差异显着。

但是,我们可以验证 t 检验不适用。 让我们生成一些与这些具有相同统计特征的数据集。为此,我创建了混合物,其中

  • 5/8在任何情况下,数据都是零。
  • 其余数据具有对数正态分布。
  • 该分布的参数被安排来重现观察到的平均值和第三四分位数。

事实证明,在这些模拟中,最大值也离报告的最大值不远。

让我们将第一个数据集复制 10,000 次并跟踪其平均值。(当我们对第二个数据集执行此操作时,结果将几乎相同。)这些均值的直方图估计均值的采样分布。当该分布近似正态时,t 检验有效;它偏离正态性的程度表明学生 t 分布会出错的程度。因此,作为参考,我还绘制了(红色)正态分布的 PDF 以适合这些结果。

直方图 1

我们看不到太多细节,因为有一些非常大的异常值。(这就是我提到的这种手段的敏感性的体现。)其中有 123 个——1.23%——超过 10,000 个。让我们专注于其余部分,以便我们可以看到细节,因为这些异常值可能是由于假设的分布对数正态性导致的,而原始数据集不一定是这种情况。

直方图 2

这仍然严重偏斜并且明显偏离正态近似,为问题中所述的现象提供了充分的解释。它还让我们了解测试可以检测到的均值差异有多大:它必须在 3000 左右或更多才能显得显着。相反,如果您有大约 428 的实际差异,则可能会检测到(3000/428)2=50数倍的数据(在每组中)。 给定 50 倍的数据,我估计在 5% 的显着性水平上检测到这种差异的能力约为 0.4(这不好,但至少你会有机会)。


这是R产生这些数字的代码。

#
# Generate positive random values with a median of 0, given Q3,
# and given mean. Make a proportion 1-e of them true zeros.
#
rskew <- function(n, x.mean, x.q3, e=3/8) {
  beta <- qnorm(1 - (1/4)/e)
  gamma <- 2*(log(x.q3) - log(x.mean/e))
  sigma <- sqrt(beta^2 - gamma) + beta
  mu <- log(x.mean/e) - sigma^2/2
  m <- floor(n * e)
  c(exp(rnorm(m, mu, sigma)), rep(0, n-m))
}
#
# See how closely the summary statistics are reproduced.
# (The quartiles will be close; the maxima not too far off;
# the means may differ a lot, though.)
#
set.seed(23)
x <- rskew(3300, 4536, 302.6)
y <- rskew(3400, 4964, 423.8)
summary(x)
summary(y)
#
# Estimate the sampling distribution of the mean.
#
set.seed(17)
sim.x <- replicate(10^4, mean(rskew(3367, 4536, 302.6)))
hist(sim.x, freq=FALSE, ylim=c(0, dnorm(0, sd=sd(sim.x))))
curve(dnorm(x, mean(sim.x), sd(sim.x)), add=TRUE, col="Red")
hist(sim.x[sim.x < 10000], xlab="x", freq=FALSE)
curve(dnorm(x, mean(sim.x), sd(sim.x)), add=TRUE, col="Red")
#
# Can a t-test detect a difference with more data?
#
set.seed(23)
n.factor <- 50
z <- replicate(10^3, {
  x <- rskew(3300*n.factor, 4536, 302.6)
  y <- rskew(3400*n.factor, 4964, 423.8)
  t.test(x,y)$p.value
})
hist(z)
mean(z < .05) # The estimated power at a 5% significance level

当 n 很大时(如 300,甚至远小于 3000),t 检验与 z 检验基本相同。也就是说,t 检验只不过是中心极限定理的一个应用,它表示你的两组中的每一组的平均值几乎完全是正态分布的(即使这两个平均值的观测值与正态分布相差甚远分散式!)。这也是您的典型 t 表不费心显示大于 1000 的 n 值的原因(例如,此 t 表)因此,看到您获得如此良好的结果,我并不感到惊讶。

编辑: 我似乎低估了偏度的极端及其重要性。虽然我的上述观点在不太极端的情况下是有价值的,但 whuber对这个问题的回答总体上要好得多。

我知道这个答案已经晚了。但是,我正在获得医疗服务研究博士学位,因此我经常使用医疗保健数据,包括成本数据。

我不知道 OP 有什么数据。如果它是横截面数据,那么它很可能是合理的 IID。独立意味着每个单位,因此每个人,都是独立的。这很可能是合理的。至于同分布,数据可以建模为全部来自,例如,具有对数链接的广义线性模型中的伽马分布。这是人们在实践中通常会做的事情。或者,如果您想花哨的话,可能有处理多余 0 的障碍模型(在计量经济学中很流行)。顺便说一句,这在医疗保健支出中很常见。OP 在技术上是正确的,即数据不一定是相同分布的,例如均值和方差会随着年龄而变化,但在多元回归模型中这是一个可行的假设。

如果每个人在数据集中的时间超过一年,那么数据就不是 IID。有更复杂的模型可用于此。其中一个相对简单的可能是广义估计方程、伽马分布和对数链接,假设一个可交换的工作相关性。或者,如果这些数据来自公开可用的调查数据,则被抽样的概率不相等——其中许多调查采访了每个家庭中的多人,而且它们还对人口进行分层并对某些群体(例如少数族裔)进行过度抽样。用户必须对此进行纠正。

我不使用 t 检验,尤其是对于观察数据。混杂因素太多,因此您需要在(广义)线性模型中对其进行调整。因此,我无法评论与 t 检验相关的问题。