Pertanyaan "signifikan" selalu berbeda, selalu mengandaikan model statistik untuk data. Jawaban ini mengusulkan salah satu model paling umum yang konsisten dengan informasi minimal yang disediakan dalam pertanyaan. Singkatnya, ini akan bekerja dalam beragam kasus, tetapi mungkin tidak selalu menjadi cara paling ampuh untuk mendeteksi perbedaan.
Tiga aspek data benar-benar penting: bentuk ruang yang ditempati oleh titik; distribusi titik-titik dalam ruang itu; dan grafik yang dibentuk oleh pasangan-pasangan titik memiliki "kondisi" - yang saya sebut kelompok "pengobatan". Yang saya maksud dengan "grafik" adalah pola titik dan interkoneksi yang tersirat oleh pasangan titik dalam kelompok perlakuan. Misalnya, sepuluh pasangan-titik ("tepian") grafik dapat melibatkan hingga 20 titik berbeda atau sedikitnya lima titik. Dalam kasus sebelumnya, tidak ada dua sisi yang memiliki titik yang sama, sedangkan pada sisi yang kedua ujungnya terdiri dari semua pasangan yang memungkinkan antara lima titik.
Untuk menentukan apakah jarak rata-rata di antara tepi dalam kelompok perlakuan adalah "signifikan," kita dapat mempertimbangkan proses acak di mana semua poin secara acak diijinkan oleh permutasi . Ini juga memungkinkan tepi: tepi diganti oleh . Hipotesis nol adalah bahwa kelompok perlakuan tepi muncul sebagai salah satu dari permutasi . Jika demikian, jarak rata-rata harus sebanding dengan jarak rata-rata yang muncul dalam permutasi tersebut. Kita dapat dengan mudah memperkirakan distribusi jarak rata-rata acak dengan mengambil sampel beberapa ribu dari semua permutasi tersebut.σ ( v i , v j ) ( v σ ( i ) , v σ ( j ) ) 3000 ! ≈ 10 21024n = 3000σ( vsaya, vj)( vσ( i ), vσ( j ))3000 ! ≈ 1021024
(Perlu dicatat bahwa pendekatan ini akan bekerja, dengan hanya modifikasi kecil, dengan jarak apa pun atau kuantitas apa pun yang terkait dengan setiap pasangan titik yang memungkinkan. Ia juga akan bekerja untuk ringkasan jarak apa pun, bukan hanya rata-rata.)
Sebagai ilustrasi, berikut adalah dua situasi yang melibatkan poin dan sisi dalam kelompok perlakuan. Di baris atas poin pertama di setiap sisi dipilih secara acak dari poin dan kemudian poin kedua dari setiap tepi dipilih secara independen dan acak dari poin berbeda dari titik pertama mereka. Seluruhnya poin terlibat dalam sisi ini.28 100 100 - 1 39 28n = 10028100100−13928
Di baris bawah, delapan dari poin dipilih secara acak. The tepi terdiri dari semua pasangan yang mungkin dari mereka.2810028
Histogram di sebelah kanan menunjukkan distribusi sampling untuk permutasi acak konfigurasi. Jarak rata-rata aktual untuk data ditandai dengan garis merah putus-putus vertikal. Kedua cara konsisten dengan distribusi sampling: tidak terletak jauh ke kanan atau kiri.10000
Distribusi pengambilan sampel berbeda: meskipun rata-rata jarak rata-rata adalah sama, variasi dalam jarak rata-rata lebih besar dalam kasus kedua karena saling ketergantungan grafis antara tepi. Ini adalah salah satu alasan mengapa tidak ada versi sederhana dari Teorema Limit Pusat yang dapat digunakan: menghitung standar deviasi distribusi ini sulit.
Berikut ini adalah hasil yang sebanding dengan data yang dijelaskan dalam pertanyaan: poin kira-kira terdistribusi secara seragam dalam satu kotak dan pasangan mereka berada dalam kelompok perlakuan. Perhitungan hanya membutuhkan beberapa detik, menunjukkan kepraktisannya.1500n=30001500
Pasangan di baris atas lagi dipilih secara acak. Di baris bawah, semua tepi pada kelompok perlakuan hanya menggunakan poin terdekat dengan sudut kiri bawah. Jarak rata-rata mereka jauh lebih kecil daripada distribusi sampling sehingga ini dapat dianggap signifikan secara statistik.56
Secara umum, proporsi jarak rata-rata dari kedua simulasi dan kelompok perlakuan yang sama dengan atau lebih besar dari jarak rata-rata dalam kelompok perlakuan dapat diambil sebagai nilai p dari tes permutasi nonparametrik ini .
Ini adalah R
kode yang digunakan untuk membuat ilustrasi.
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")
}