距离差的统计意义


12

我在二维网格上有3000多个矢量,具有近似均匀的离散分布。一些向量对满足一定条件。注意:该条件仅适用于向量,不适用于单个向量。我有大约1500个这样的对的列表,我们称其为组1。组2包含所有其他向量对。我想找出第1组中一对向量之间的距离是否明显小于两个向量之间的平均距离。我怎样才能做到这一点?

统计检验:中心极限定理适用于我的情况吗?也就是说,我可以采用距离样本的方法,并使用学生的t检验比较满足条件的样本的方法与不满足条件的样本的方法吗?否则,什么统计检验适用于此?

样本数量和样本数量:我知道这里有两个变量,对于两个组中的每一个,我需要获取n个大小为m的样本,并取每个样本的平均值。有没有选择nm的原则方法?它们应该尽可能大吗?还是只要它们具有统计意义,就应该尽可能地少?这两个组的名称是否应该相同?还是对于包含更多向量对的第2组,它们应该更大?


1
通常,人们不太幸运,因为他们的数据点有明确的边界-否则边界会很复杂。加上距离之间的相关性(由三角形不等式创建),排除了为平均距离的采样分布开发好的解析表达式的可能性。因此,他们通常通过从数据中重新采样来估计平均距离的采样分布。
ub

@whuber我不确定我是否理解正确,您是否建议我从两组中的每组中抽取n个样本,并使用t检验比较这些样本的均值?我编辑了问题,希望现在更清楚。
michau

Answers:


14

总是“显着”不同的问题总是以数据的统计模型为前提。 该答案提出了与问题中提供的最少信息相一致的最通用的模型之一。简而言之,它可以在各种各样的情况下工作,但它可能并不总是检测差异的最有效方法。

数据的三个方面确实很重要:点所占据的空间的形状;点在该空间中的分布;以及由具有“条件”的点对组成的图形-我将其称为“处理”组。“图”是指治疗组中的点对所暗示的点和互连的模式。例如,图形的十个点对(“边”)可能涉及多达20个不同的点或少至五个点。在前一种情况下,没有两个边共享一个公共点,而在后一种情况下,边由五个点之间的所有可能的对组成。

n=3000σ(vi,vj)(vσ(i),vσ(j))3000!1021024排列。如果是这样,则其平均距离应与这些排列中出现的平均距离相当。通过对所有这些排列中的数千个样本进行采样,我们可以很容易地估计出这些随机平均距离的分布。

(值得注意的是,此方法仅需稍作修改即可适用于与每个可能的点对相关的任何距离或实际上与任何数量相关的任何量。它也适用于距离的任何汇总,而不仅仅是平均值。)


n=1002810010013928

10028

图1

10000

采样分布不同:尽管平均距离平均相同,但由于边缘之间的图形相互依赖性, 第二种情况下平均距离的变化更大这是无法使用中心极限定理的简单版本的原因之一:计算此分布的标准偏差很困难。

n=30001500

图2

56

通常,从平均距离的比例在模拟和作为治疗组等于或大于比所述治疗组中的平均距离可以作为这个的p值非参数置换检验。


这是R用于创建插图的代码。

n.vectors <- 3000
n.condition <- 1500
d <- 2              # Dimension of the space
n.sim <- 1e4        # Number of iterations
set.seed(17)
par(mfrow=c(2, 2))
#
# Construct a dataset like the actual one.
#
# `m` indexes the pairs of vectors with a "condition."
# `x` contains the coordinates of all vectors.
x <- matrix(runif(d*n.vectors), nrow=d)
x <- x[, order(x[1, ]+x[2, ])]
#
# Create two kinds of conditions and analyze each.
#
for (independent in c(TRUE, FALSE)) {
  if (independent) {
    i <- sample.int(n.vectors, n.condition)
    j <- sample.int(n.vectors-1, n.condition)
    j <- (i + j - 1) %% n.condition + 1
    m <- cbind(i,j)
  } else {
    u <- floor(sqrt(2*n.condition))
    v <- ceiling(2*n.condition/u)
    m <- as.matrix(expand.grid(1:u, 1:v))
    m <- m[m[,1] < m[,2], ]
  }
  #
  # Plot the configuration.
  #
  plot(t(x), pch=19, cex=0.5, col="Gray", asp=1, bty="n",
       main="The Data", xlab="X", ylab="Y",
       sub=paste(length(unique(as.vector(m))), "points"))
  invisible(apply(m, 1, function(i) lines(t(x[, i]), col="#80000040")))
  points(t(x[, unique(as.vector(m))]), pch=16, col="Red", cex=0.6)
  #
  # Precompute all distances between all points.
  #
  distances <- sapply(1:n.vectors, function(i) sqrt(colSums((x-x[,i])^2)))
  #
  # Compute the mean distance in any set of pairs.
  #
  mean.distance <- function(m, distances)
    mean(distances[m])
  #
  # Sample from the points using the same *pattern* in the "condition."
  # `m` is a two-column array pairing indexes between 1 and `n` inclusive.
  sample.graph <- function(m, n) {
    n.permuted <- sample.int(n, n)
    cbind(n.permuted[m[,1]], n.permuted[m[,2]])
  }
  #
  # Simulate the sampling distribution of mean distances for randomly chosen
  # subsets of a specified size.
  #
  system.time(
    sim <- replicate(n.sim, mean.distance(sample.graph(m, n.vectors), distances))
  stat <- mean.distance(m, distances)
  p.value <- 2 * min(mean(c(sim, stat) <= stat), mean(c(sim, stat) >= stat))

  hist(sim, freq=FALSE, 
       sub=paste("p-value:", signif(p.value, ceiling(log10(length(sim))/2)+1)),
       main="Histogram of mean distances", xlab="Distance")
  abline(v = stat, lwd=2, lty=3, col="Red")
}

非常感谢!那就是我想要的。但是您介意澄清应该如何计算p值吗?我不理解“距模拟和治疗组的平均距离等于或大于治疗组的平均距离的比例”的表述。您在谈论两个平均距离的比例,其中之一是“距治疗组的平均距离等于或大于治疗组的平均距离”。我很困惑,听起来像是重言式。您可以编写公式或R代码来使其更清晰吗?
michau

无论如何,事实证明我的情况与您的第二个示例相似,排列的平均距离约为22,标准差约为0.3,治疗组的平均值为12。差异具有统计学意义。我现在唯一要做的就是估计p值。实际上,即使有相当大的排列样本(10000),所有平均值无一例外都在相当狭窄的区间内,例如[21,23]。这是我可以用来估计p值的东西吗?
michau

1
好的,我现在已经阅读了一些有关蒙特卡洛置换测试的信息。根据我的理解:如果我尝试的所有10000个排列的平均值均高于治疗组的平均值,则可以得出p <0.0001的结论。就这么简单吗?
michau

1
是的,就是这么简单!我在最后添加了代码,以计算并显示两个尾部的p值(可以说,它适合您的情况)。对于单尾p值,请使用mean(c(sim, stat) <= stat)mean(c(sim, stat) >= stat)适当地使用。
ub

大!单尾检验的情况现在已经很清楚了,但是我仍然不明白两尾检验,尤其是乘以2。如果10000个排列给我的平均值在[21,23]范围内,则不这意味着12和32都在99.99%的置信区间之外,这对应于p <0.0001?我不应该简单地计算stat任一方向上距离分布中间的平均距离吗?有点像p.value <- mean(abs(c(sim, stat)-mean(sim)) >= abs(stat-mean(sim)))
michau
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.