R中的置换测试

机器算法验证 r 非参数 置换检验
2022-03-06 06:57:55

根据测量前后的数据,我有 10 个受试者的以下数据:

x <- c(12.9, 13.5, 12.8, 15.6, 17.2, 19.2, 12.6, 15.3, 14.4, 11.3) 
y <- c(12.7, 13.6, 12.0, 15.2, 16.8, 20.0, 12.0, 15.9, 16.0, 11.1)

并想进行置换测试。

我使用permTS(...)来执行双边 t 检验并获得 的值0.982

但我想expand.grid(rep(x,k ))通过交换前后标签来使用。有谁知道如何做到这一点?

鉴于可能排列的数量,不可能刺激每个排列,因此我想使用 expand.grid 来检查是否获得了相同的结果。

谢谢

2个回答

您所说的是您想将配对 t 检验统计量与通过独立切换所有可能的数据对获得的此类统计量的分布进行比较。这样的开关,小到可以快速计算完整分布。210=1024

将其编码为两组数据之间差异的 t 检验很方便R:我们只需对它们取反,而不是切换值。

让我们首先运行 t 检验:

x <- c(12.9, 13.5, 12.8, 15.6, 17.2, 19.2, 12.6, 15.3, 14.4, 11.3)
y <- c(12.7, 13.6, 12.0, 15.2, 16.8, 20.0, 12.0, 15.9, 16.0, 11.1)
(value <- t.test(x,y, paired=TRUE, alternative="two.sided"))

正如预期的那样,统计数据和 p 值为现在让我们生成排列分布(按要求使用):0.2130.836expand.grid

perms <- do.call(expand.grid, lapply(as.list(1:length(x)), function(i) c(-1,1)))
dist <- apply(perms, 1, function(p) t.test(p*(x-y), alt="t")$statistic)

(这需要秒。)作为快速检查,让我们绘制结果:0.33

hist(dist)
abline(v = value$statistic, col="Red", lwd=2)

排列分布

因为实际统计量接近分布的中间并且这是一个双边检验,所以 p 值看起来大约为左右。我们可以计算它:0.9

sum(abs(dist) > abs(value$statistic)) / 2^length(x)

结果是,与 t 分布给我们的结果相同。0.836

您应该使用配对 T 检验,因为这些是配对数据,而不是 2 样本检验。

所有可能的 pre-post 数据排列将使用

expand.grid(pre=x, post=y)

而且我们知道这只是一个 2 x 100 的矩阵,这远非不可能。我不知道你为什么要复制x,或者是什么k