【问题标题】:All pairwise differences between two vectors两个向量之间的所有成对差异
【发布时间】:2016-03-29 18:25:04
【问题描述】:

假设我有两个向量:

X1 <- c(44350, 38920, 37530, 42280, 37320, 36910, 35720, 31220, 33400, 40710, 43830, 37390, 32340, 30770, 35800, 40250, 31490, 40460, 33730, 35850, 35320, 37500, 35380, 40910, 29040, 33950)

X2 <- c(30390, 34170, 28910, 30660, 32510, 30540, 31990, 32380, 32110, 31260, 34670, 28240, 31840, 33350, 32150, 35640, 30730, 30280, 29420, 30990, 32880, 33280, 36960, 36990)

我有兴趣计算 X1 的成员

我将如何在 R 中对任意两个向量执行此操作?

现在,假设我希望将两个向量组合起来,随机化,分成长度(X1)和长度(X2)的两个向量,然后按上述方式进行计数——创建一个随机分布以与初始计数进行比较。

如何做到这一点?

【问题讨论】:

  • all_pairs = expand.grid(X1 = X1, X2 = X2) 应该可以帮助您入门。
  • 由于矢量化X1 &lt; X2 将成对评估
  • 至于你的第二个问题,你试过什么,你卡在哪里了?你不知道如何组合向量吗?试试c() 函数。你能随机化向量吗?搜索“r 随机顺序”。你不知道如何子集?阅读 R 的介绍...
  • 这有点取决于您所说的pairwise 是什么意思。在 R 中,这通常意味着按元素位置(pmaxpmin)比较两个长度相等的向量,但目前你的向量长度不相等。如果您指的是所有可能的组合,上面的 Gregor 的expand.grid 会有所帮助。对于第 2 部分,与c 组合,与sample 混合,与[ 子集。
  • 您是否打算创建一个包含不等长向量的示例?如果是,请在一个向量用完时指定成对的含义

标签: r


【解决方案1】:

x1 中的 a 和 X2 中的 b 具有 的实例计数

(s <- sum(outer(X1,X2,`<`)))
# [1] 106

两者结合

X <- c(X1,X2)

多次随机播放、重新拆分和重新测试

set.seed(1)

r <- replicate(1000000, {
  X <- sample(X)
  X1 <- head(X,length(X1)) 
  X2 <- tail(X,length(X2))
  sum(outer(X1,X2,`<`)) })

(p <- 1 - sum(s <= r)/length(r))
# [1] 1e-05



注意:听起来您可能正在寻找像 wilcox.test 下的 Mann-Whitney 测试之类的东西。

> wilcox.test(X2,X1)

        Wilcoxon rank sum test

data:  X2 and X1
W = 106, p-value = 2.858e-05
alternative hypothesis: true location shift is not equal to 0

W = 106 与上面的s = 106 进行比较。

【讨论】:

  • 不是 Wilcoxon 检验,因为向量不是成对观察。不过,Man-Whitney 可能是我想要的。
  • 是的,请阅读wilcox.test 的帮助文件。默认值为 paired = FALSE,这将是两个向量输入的 Mann-Whitney。
猜你喜欢
  • 2018-07-03
  • 1970-01-01
  • 2013-02-03
  • 1970-01-01
  • 2015-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-17
相关资源
最近更新 更多