秩转换数据的参数检验是否等同于原始数据的非参数检验?

机器算法验证 r 假设检验 数据转换 非参数 排名
2022-03-17 04:04:14

许多非参数检验与排名数据上的参数等效项相同。至少,这是我从这篇关于弗里德曼测试的博文和浏览这篇 1981 年的文章中学到的。. 这似乎非常实用,尤其是出于教学目的。但是我找不到任何这种等价的证明,所以我决定自己尝试一下。

然而,虽然它们匹配得很紧密,但它们并不完全匹配,而且对于配对样本,差异很大。我错过了什么还是这种“等价”不完美?这里有几个例子:

# generate two dependent samples.
set.seed(42)
x1 = rnorm(20)
x2 = x1 + rnorm(20, 1, 4)
x = data.frame(score=c(x1,x2), time=rep(c('pre', 'post'), each=20))

# Correlation of ranks. Exact correlation.
# p_spearman=0.0074, p_pearson=0.0064
cor.test(x1, x2, method='spearman')
cor.test(rank(x1), rank(x2), method='pearson')

# Unpaired samples between-subjects-difference test.
# p_wilcox=0.718, p_t-test=0.711
wilcox.test(x$score ~ x$time)
t.test(rank(x$score) ~ x$time)

# Paired samples within-subject-difference test. Bad p-value?
# p_mann-whitney=0.927, p_t-test=1.00
wilcox.test(x1, x2, paired=T)
t.test(rank(x1), rank(x2), paired=T)
1个回答

我认为重要的是要清楚地区分

一个。使用秩的参数统计作为非参数检验的基础

湾。在等级上使用参数检验

(我们也可以考虑第三种选择——比如“b”。但以某种方式缩放或调整统计数据以更好地逼近普通表中的“真实”p值。我暂时忽略这种可能性,但这可能是一项富有成效的努力。)

在第一种情况下,我们将照常计算统计量,但在找到 p 值时,我们将查看该测试统计量在 null 下的分布。特别是,基于非参数秩的检验是置换检验(因为秩集对于每个样本大小是固定的,对于连续分布,不依赖于特定的观察值)。因此,我们将计算应用于等级的参数检验的排列分布。

当我们这样做时,我们确实有时会得到一个等效于众所周知的非参数测试的测试(在这种情况下,等效意味着它以相同的方式“排序”可能的样本集,所以它总是给出相同的p 值)

在第二种情况下,我们只是忽略了我们有等级并将等级视为来自任何假设分布的独立样本。不会给出与非参数检验相同的 p 值。事实上,在小样本中,分布不可能是正确的。但是,对于某些测试,在较大的样本量下它可能会变得相当接近,然后测试将具有大约正确的显着性水平。发生这种情况时,p 值可能与第一种情况非常相似。

我们可以通过普通的等方差二样本 t 检验与 Wilcoxon 检验来看到这一点:

在此处输入图像描述

第一个图向我们展示,在这个例子中,每个样本的 p 值确实是相同的顺序(单调性表明 a 部分下的“等效测试”一直保持不变——正如这对测试)。这也是令人鼓舞的,因为看起来 p-vaue 对非常接近y=x线。第二个图显示了 p 值的差异。现在我们可以看到直接应用于等级的 t 检验就好像它们是独立同分布的正态数据一样给出的 p 值几乎总是低于 Wilcoxon-Mann-Whitney(实际上,通常太低)。

[其他样本量显示类似的模式 - 在相同的样本量下,差异模式的大致形状仍然存在,但随着样本量的增加,第二个图的 y 轴上的比例变小;在不相等的样本量下,第二个图的形状会发生变化,但 t 的较低 p 值仍然存在。]

因此,如果我们使用“b.”中的测试,我们在任何显着性水平上都经常拒绝。

然而,由于随着样本量的增加,这种差异会变小,如果两个样本都很大,这可能不会给我们带来太多困扰。

(请注意,这个讨论还没有调查功率,也没有任何其他测试,但这个简单的比较,但我提出的许多观点将延续到其他测试。)

哦,我猜人们会想要代码。我在 R 中做到了:

n1=40;n=n1+n1
res=replicate(1000,{v=sample(n);
                    c(t.test(v[1:n1],v[(n1+1):n],var.equal=TRUE)$p.value,
                      wilcox.test(v[1:n1],v[(n1+1):n])$p.value)
                    })

注意v包含当前随机排列的秩下的空

在我的笔记本电脑上大约需要一秒钟。请注意,t 检验 p 值在第一res而 WMW p 值在第二行。