항상 "의미 적으로"다른 문제는 항상 데이터에 대한 통계 모델을 전제로합니다. 이 답변은 질문에 제공된 최소한의 정보와 일치하는 가장 일반적인 모델 중 하나를 제안합니다. 요컨대, 다양한 경우에 작동하지만 차이를 감지하는 가장 강력한 방법은 아닙니다.
데이터의 세 가지 측면이 중요합니다. 점이 차지하는 공간의 모양; 해당 공간 내의 점들의 분포; 그리고“조건”을 가진 포인트 쌍에 의해 형성된 그래프 –“치료”그룹이라고 부릅니다. "그래프"는 치료 그룹에서 포인트 쌍에 의해 암시 된 포인트 및 상호 연결의 패턴을 의미한다. 예를 들어, 그래프의 10 개의 점 쌍 ( "가장자리")은 최대 20 개의 별개의 점 또는 5 개의 적은 점을 포함 할 수 있습니다. 전자의 경우 두 개의 모서리가 공통점을 공유하지 않지만 후자의 경우 모서리는 5 개의 점 사이의 모든 가능한 쌍으로 구성됩니다.
n = 3000σ( V나는, v제이)( Vσ( 나는 ), vσ( J ))3000 ! ≈ 1021024순열. 그렇다면 평균 거리는 해당 순열에 나타나는 평균 거리와 비교할 수 있어야합니다. 모든 순열 중 수천 개를 샘플링하여 임의의 평균 거리 분포를 쉽게 추정 할 수 있습니다.
(이 방법과 함께, 단지 약간의 수정과 함께 작동합니다 주목할 만하다 어떤 실제로 거리 나 무엇이든지 가능한 모든 포인트 쌍에 관련된 모든 수량. 그것은 것이다 또한 거리의 요약에 대한 작업, 단지 평균 수 없습니다.)
n=10028100100−13928
10028
10000
샘플링 분포는 다릅니다. 평균 거리는 평균이지만 두 번째 경우 에는 에지 간의 그래픽 상호 종속성으로 인해 평균 거리의 편차가 더 큽니다 . 이것이 바로 중앙 한계 정리의 간단한 버전을 사용할 수없는 한 가지 이유 입니다.이 분포의 표준 편차를 계산하는 것은 어렵습니다.
n=30001500
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")
}