Статистична значимість різниці відстаней


12

Я маю понад 3000 векторів на двовимірній сітці з приблизно рівномірним дискретним розподілом. Деякі пари векторів виконують певну умову. Примітка: умова стосується лише пар векторів, а не окремих векторів. У мене є список близько 1500 таких пар, назвемо це групою 1. Група 2 містить усі інші векторні пари. Хочу з’ясувати, чи відстань між векторами пари в групі 1 значно менша середньої відстані між двома векторами. Як я можу це зробити?

Статистичний тест : Чи застосована центральна гранична теорема до мого випадку? Тобто чи можу я взяти за допомогою зразків відстані та використати t-тест Стьюдента для порівняння засобів зразків, які відповідають умові, із засобами зразків, які не виконують умову? Інакше який статистичний тест був би тут доречним?

Розмір вибірки та кількість вибірок : Я розумію, що тут є дві змінні, для кожної з двох груп мені потрібно взяти n вибірок розміром m і взяти середнє значення для кожного з вибірок. Чи є якийсь принциповий спосіб вибору n і m ? Чи повинні вони бути максимально великими? Або вони повинні бути якомога меншими, доки вони показують статистичну значимість? Чи повинні вони бути однаковими для кожної з двох груп? Або вони повинні бути більшими для групи 2, яка містить значно більше векторних пар?


1
Зазвичай людям не так пощастило, що мають певні межі для своїх точок даних - інакше межі складні. Це, поряд із співвідношеннями між відстанями (створеними нерівністю трикутника), виключає розробку приємного аналітичного виразу для розподілу вибірки середніх відстаней. Тому вони зазвичай оцінюють розподіл вибірки середніх відстаней шляхом перекомпонування даних.
whuber

@whuber Я не впевнений, чи правильно я вас зрозумів, чи пропонуєте ви взяти n зразків з кожної з двох груп і використовую t-тест для порівняння засобів цих зразків? Я відредагував своє запитання, сподіваюся, що зараз зрозуміліше.
michau

Відповіді:


14

Питання "суттєво" відрізняється завжди, завжди передбачає статистичну модель для даних. У цій відповіді пропонується одна з найбільш загальних моделей, яка відповідає мінімальній інформації, наданій у питанні. Коротше кажучи, вона працюватиме в широкому масиві випадків, але це не завжди може бути найпотужнішим способом виявити різницю.

Три аспекти даних справді мають значення: форма простору, займаного точками; розподіл точок всередині цього простору; і графік, утворений парами точок, що мають "умову" - яку я назву групою "лікування". Під "графіком" я маю на увазі схему точок та взаємозв'язків, що мають на увазі пари точок у групі лікування. Наприклад, десять пар точок ("країв") графіка можуть містити до 20 різних точок або не менше п'яти точок. У першому випадку жодні два ребра не мають спільної точки, тоді як в останньому випадку краї складаються з усіх можливих пар між п'ятьма точками.

n=3000σ(vi,vj)(vσ(i),vσ(j))3000!1021024перестановки. Якщо так, то його середня відстань має бути порівнянною із середніми відстанями, що виникають у цих перестановках. Ми можемо досить легко оцінити розподіл цих випадкових середніх відстаней, відібравши кілька тисяч усіх перестановок.

(Примітно, що цей підхід буде працювати лише з незначними модифікаціями, з будь-якою відстані або взагалі будь-якою кількістю, пов'язаною з кожною можливою точковою парою. Він також буде працювати для будь-якого підсумку відстаней, а не лише до середнього.)


n=1002810010013928

10028

Фігура 1

10000

Розподіли вибірки різняться: хоча середні середні відстані однакові, коливання середньої відстані у другому випадку більше внаслідок графічної взаємозалежності між ребрами. Це одна з причин, не можна використовувати просту версію теореми про центральний межа: обчислити стандартне відхилення цього розподілу важко.

n=30001500

Малюнок 2

56

Як правило, питома вага середніх відстаней як від моделювання, так і від групи лікування, що дорівнює або перевищує середню відстань у групі лікування, може бути прийнята як р-значення цього непараметричного тесту на перестановку.


Це 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]. Це щось, що я можу використати для оцінки р-значення?
michau

1
Гаразд, я читав трохи про тести на перестановку в Монте-Карло. Згідно з моїм розумінням: якщо серед усіх 10000 перестановок, які я пробував, вище, ніж лікувальна група, я можу зробити висновок, що p <0,0001. Це так просто?
michau

1
Так, це так просто! Я додав код наприкінці, щоб обчислити та відобразити двохвосте p-значення (яке, певно, є відповідним для вашої ситуації). Для однозначного p-значення використовуйте mean(c(sim, stat) <= stat)або mean(c(sim, stat) >= stat)доречно.
whuber

Чудово! Ситуація з однохвостим тестом зараз абсолютно зрозуміла, але я все ще не розумію тесту з двома хвостами, особливо множення на 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.