Câu hỏi về "đáng kể" luôn luôn khác nhau, luôn đặt ra một mô hình thống kê cho dữ liệu. Câu trả lời này đề xuất một trong những mô hình chung nhất phù hợp với thông tin tối thiểu được cung cấp trong câu hỏi. Nói tóm lại, nó sẽ hoạt động trong một loạt các trường hợp, nhưng nó có thể không phải luôn luôn là cách mạnh mẽ nhất để phát hiện sự khác biệt.
Ba khía cạnh của dữ liệu thực sự quan trọng: hình dạng của không gian bị chiếm bởi các điểm; sự phân bố các điểm trong không gian đó; và biểu đồ được hình thành bởi các cặp điểm có "điều kiện" - mà tôi sẽ gọi là nhóm "điều trị". Theo "biểu đồ", ý tôi là mô hình các điểm và mối liên kết được ngụ ý bởi các cặp điểm trong nhóm điều trị. Chẳng hạn, mười cặp điểm ("cạnh") của biểu đồ có thể liên quan đến tối đa 20 điểm khác biệt hoặc ít nhất là năm điểm. Trong trường hợp trước, không có hai cạnh nào có chung một điểm, trong khi ở trường hợp sau, cạnh này bao gồm tất cả các cặp có thể có giữa năm điểm.
n = 3000σ( vTôi, vj)( vσ( tôi ), vσ( j ))3000 ! ≈ 1021024hoán vị. Nếu vậy, khoảng cách trung bình của nó phải tương đương với khoảng cách trung bình xuất hiện trong các hoán vị đó. Chúng tôi có thể dễ dàng ước tính phân phối các khoảng cách trung bình ngẫu nhiên đó bằng cách lấy mẫu vài nghìn của tất cả các hoán vị đó.
(Đáng chú ý là cách tiếp cận này sẽ hoạt động, chỉ với những sửa đổi nhỏ, với bất kỳ khoảng cách hoặc bất kỳ số lượng nào liên quan đến mọi cặp điểm có thể. Nó cũng sẽ hoạt động cho mọi tóm tắt về khoảng cách, không chỉ trung bình.
n = 10028100100 - 13928
10028
10000
Các phân phối lấy mẫu khác nhau: mặc dù trung bình khoảng cách trung bình là như nhau, sự khác biệt về khoảng cách trung bình sẽ lớn hơn trong trường hợp thứ hai do sự phụ thuộc lẫn nhau giữa các cạnh đồ họa. Đây là một lý do không có phiên bản đơn giản nào của Định lý giới hạn trung tâm có thể được sử dụng: tính toán độ lệch chuẩn của phân phối này là khó khăn.
n=30001500
56
Nói chung, tỷ lệ khoảng cách trung bình từ cả mô phỏng và nhóm điều trị bằng hoặc lớn hơn khoảng cách trung bình trong nhóm điều trị có thể được lấy làm giá trị p của xét nghiệm hoán vị không đối xứng này .
Đây là R
mã được sử dụng để tạo ra các minh họa.
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")
}