距離の差の統計的有意性


12

2次元グリッド上に3000を超えるベクトルがあり、ほぼ均一な離散分布です。ベクトルのいくつかのペアは特定の条件を満たす。注:条件はベクトルのペアにのみ適用され、個々のベクトルには適用されません。約1500個のこのようなペアのリストがあります。これをグループ1と呼びましょう。グループ2には他のすべてのベクトルペアが含まれています。グループ1のペアのベクトル間の距離が、2つのベクトル間の平均距離よりも大幅に短いかどうかを確認したいと思います。どうやってやるの?

統計的検定:中心極限定理は私の事例に適用できますか?つまり、距離のサンプルを使用し、スチューデントのt検定を使用して、条件を満たすサンプルの平均と条件を満たさないサンプルの平均を比較できますか?それ以外の場合、ここではどのような統計的検定が適切でしょうか?

サンプルサイズとサンプル数:ここには2つの変数があることがわかります。2つのグループのそれぞれに対して、サイズmのn個のサンプルを取得し、各サンプルの平均を取得する必要があります。nmを選択する原則的な方法はありますか?それらは可能な限り大きくすべきですか?または、統計的有意性を示す限り、できるだけ小さくする必要がありますか?2つのグループのそれぞれで同じにする必要がありますか?または、より多くのベクトルペアを含むグループ2の方が大きくする必要がありますか?


1
通常、人々はデータポイントに明確な境界があるほど幸運ではありません。そうでなければ、境界は複雑です。これは、距離間の相関関係(三角形の不等式によって作成される)とともに、平均距離のサンプリング分布の優れた分析式の開発を妨げます。したがって、通常、データからリサンプリングすることにより、平均距離のサンプリング分布を推定します。
whuber

@whuber私はあなたを正しく理解しているかどうかわかりません、2つのグループのそれぞれからn個のサンプルを取り、それらのサンプルの平均を比較するためにt検定を使用することを提案していますか?私は自分の質問を編集しましたが、今より明確になっていることを望みます。
ミッチャウ

回答:


14

常に「大幅に」異なるという問題は、常にデータの統計モデルを前提としています。 この回答は、質問で提供される最小限の情報と一致する最も一般的なモデルの1つを提案します。つまり、さまざまなケースで機能しますが、違いを検出する最も強力な方法とは限りません。

データの3つの側面は本当に重要です。ポイントが占める空間の形状。その空間内のポイントの分布。そして、「条件」を持つポイントペアによって形成されたグラフ。これを「治療」グループと呼びます。「グラフ」とは、治療グループのポイントペアによって暗示されるポイントと相互接続のパターンを意味します。たとえば、グラフの10個のポイントペア(「エッジ」)には、最大20個の異なるポイントまたはわずか5個のポイントを含めることができます。前者の場合、共通のポイントを共有する2つのエッジはありませんが、後者の場合、エッジは5つのポイント間のすべての可能なペアで構成されます。

n=3000σvvjvσvσj30001021024順列。その場合、その平均距離は、これらの順列に現れる平均距離に匹敵するはずです。これらの順列の数千個をサンプリングすることにより、これらのランダムな平均距離の分布をかなり簡単に推定できます。

(このアプローチは、わずかな修正を加えるだけで、あらゆる距離または実際にあらゆる可能なポイントペアに関連付けられた量で機能することは注目に値します。平均だけでなく、距離のサマリーでも機能します。)


n=1002810010013928

10028エッジは、それらのすべての可能なペアで構成されています。

図1

右側のヒストグラムは、次のサンプリング分布を示しています 10000

サンプリング分布は異なります。平均では平均距離は同じですが、2番目の場合、エッジ間のグラフィカルな相互依存性により 、平均距離の変動は大きくなります。これは、中央極限定理の単純なバージョンを使用できない理由の1つです。この分布の標準偏差を計算することは困難です。

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値を計算する方法を明確にしたいですか?「シミュレーションと治療グループの両方からの平均距離が治療グループの平均距離以上である割合」の定式化がわかりません。あなたは2つの平均距離の割合について話しているが、そのうちの1つは「治療群からの平均距離であり、治療群の平均距離以上である」。私は混乱しています、それはトートロジーのように聞こえます。より明確にするために、式またはRコードを記述できますか?
-michau

いずれにせよ、私の場合は2番目の例に似ており、順列の平均距離は約22で、標準偏差は約0.3であり、治療グループの平均は12です。差は統計的に有意です。私が今苦労しているのは、p値の推定だけです。実際、順列のかなり大きなサンプル(10000)であっても、例外のないすべての平均はかなり狭い間隔にあります。[21、23]としましょう。これは、p値を推定するために使用できるものですか?
-michau

1
OK、モンテカルロ置換テストについて少し読んだ。私の理解によると、私が試したすべての10000個の順列の平均が治療グループの平均よりも高い場合、p <0.0001と結論付けることができます。それと同じくらい簡単ですか?
-michau

1
はい、それは簡単です!最後にコードを追加して、両側のp値を計算して表示します(おそらく、これはあなたの状況に適したものです)。片側p値の場合、いずれかmean(c(sim, stat) <= stat)または必要mean(c(sim, stat) >= stat)に応じて使用します。
whuber

すごい!片側検定の状況は今では完全に明らかですが、両側検定、特に2による乗算はまだ理解できません。 12と32の両方が99.99%の信頼区間の外にあることを意味します。これはp <0.0001に相当しますか?statどちらの方向でも、分布の中央から遠く離れた平均距離を単純に数えるべきではありませんか?のようなものp.value <- mean(abs(c(sim, stat)-mean(sim)) >= abs(stat-mean(sim)))
-michau
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.