거리 차이의 통계적 유의성


12

2 차원 그리드에 3000 개가 넘는 벡터가 있고 대략 균일 한 이산 분포가 있습니다. 일부 벡터 쌍은 특정 조건을 충족합니다. 참고 : 조건은 개별 벡터가 아닌 벡터 에만 적용됩니다 . 약 1500 개 쌍의 목록이 있습니다. 그룹 1이라고합시다. 그룹 2는 다른 모든 벡터 쌍을 포함합니다. 그룹 1에서 한 쌍의 벡터 사이의 거리가 두 벡터 사이의 평균 거리보다 현저히 작은 지 알고 싶습니다. 어떻게해야합니까?

통계 테스트 : 중앙 제한 정리가 내 경우에 적용됩니까? 즉, 거리 표본을 사용하고 조건을 충족하지 않는 표본과 조건을 충족시키는 표본을 비교하기 위해 Student 's t-test를 사용할 수 있습니까? 그렇지 않으면 여기서 어떤 통계 테스트가 적합합니까?

샘플 크기와 샘플 수 : 여기에 두 개의 변수가 있다는 것을 이해합니다. 두 그룹 각각 에 대해 크기 mn 샘플 을 취하고 각 샘플의 평균을 취해야합니다. nm 을 선택하는 원칙적인 방법이 있습니까? 가능한 한 커야합니까? 또는 통계적 유의성을 나타내는 한 가능한 한 작아야합니까? 두 그룹 각각에 대해 동일해야합니까? 또는 더 많은 벡터 쌍을 포함하는 그룹 2의 경우 더 커야합니까?


1
일반적으로 사람들은 데이터 포인트에 대해 명확한 경계를 갖는 것만 큼 운이 좋지 않습니다. 그렇지 않으면 경계가 복잡합니다. 이것은 거리 (삼각형 부등식으로 생성) 간의 상관 관계와 함께 평균 거리의 샘플링 분포에 대한 훌륭한 분석 표현 개발을 불가능하게합니다. 따라서 이들은 일반적으로 데이터에서 리샘플링하여 평균 거리의 샘플링 분포를 추정합니다.
whuber

@ whuber 나는 당신을 올바르게 이해하는지 잘 모르겠습니다 . 두 그룹 각각에서 n 개의 샘플을 가져 와서 t- 테스트를 사용하여 해당 샘플의 평균을 비교할 것을 제안 합니까? 내 질문을 편집했습니다. 지금 명확 해지기를 바랍니다.
michau

답변:


14

항상 "의미 적으로"다른 문제는 항상 데이터에 대한 통계 모델을 전제로합니다. 이 답변은 질문에 제공된 최소한의 정보와 일치하는 가장 일반적인 모델 중 하나를 제안합니다. 요컨대, 다양한 경우에 작동하지만 차이를 감지하는 가장 강력한 방법은 아닙니다.

데이터의 세 가지 측면이 중요합니다. 점이 차지하는 공간의 모양; 해당 공간 내의 점들의 분포; 그리고“조건”을 가진 포인트 쌍에 의해 형성된 그래프 –“치료”그룹이라고 부릅니다. "그래프"는 치료 그룹에서 포인트 쌍에 의해 암시 된 포인트 및 상호 연결의 패턴을 의미한다. 예를 들어, 그래프의 10 개의 점 쌍 ( "가장자리")은 최대 20 개의 별개의 점 또는 5 개의 적은 점을 포함 할 수 있습니다. 전자의 경우 두 개의 모서리가 공통점을 공유하지 않지만 후자의 경우 모서리는 5 개의 점 사이의 모든 가능한 쌍으로 구성됩니다.

n=3000σ(vi,vj)(vσ(i),vσ(j))3000!1021024순열. 그렇다면 평균 거리는 해당 순열에 나타나는 평균 거리와 비교할 수 있어야합니다. 모든 순열 중 수천 개를 샘플링하여 임의의 평균 거리 분포를 쉽게 추정 할 수 있습니다.

(이 방법과 함께, 단지 약간의 수정과 함께 작동합니다 주목할 만하다 어떤 실제로 거리 나 무엇이든지 가능한 모든 포인트 쌍에 관련된 모든 수량. 그것은 것이다 또한 거리의 요약에 대한 작업, 단지 평균 수 없습니다.)


n=1002810010013928

10028

그림 1

10000

샘플링 분포는 다릅니다. 평균 거리는 평균이지만 두 번째 경우 에는 에지 간의 그래픽 상호 종속성으로 인해 평균 거리의 편차가 더 큽니다 . 이것이 바로 중앙 한계 정리의 간단한 버전을 사용할 수없는 한 가지 이유 입니다.이 분포의 표준 편차를 계산하는 것은 어렵습니다.

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- 값을 계산하는 방법을 분명히 설명 하시겠습니까? 나는 "치료 그룹의 평균 거리와 같거나 큰 시뮬레이션 그룹과 치료 그룹의 평균 거리 비율"이라는 공식을 이해하지 못합니다. 두 평균 거리의 비율에 대해 이야기하고 있으며 그 중 하나는 "치료 그룹의 평균 거리와 같거나 큰 치료 그룹과의 평균 거리"입니다. 혼란 스러워요. 수식이나 R 코드를 작성하여 더 명확하게 만들 수 있습니까?
michau

어쨌든 내 경우는 두 번째 예와 비슷하며 평균 편차 거리는 22 정도이며 표준 편차는 0.3이며 처리 그룹의 평균은 12입니다. 따라서 차이는 통계적으로 유의합니다. 내가 지금 고투하고있는 유일한 것은 p- 값의 추정입니다. 실제로 상당히 큰 순열 표본 (10000)이 있더라도 예외가없는 모든 수단은 상당히 좁은 간격에 있습니다. [21, 23] 이것이 p- 값을 추정하는 데 사용할 수있는 것입니까?
michau

1
좋아, 나는 지금 Monte Carlo 순열 테스트에 대해 조금 읽었습니다. 내 이해에 따르면 : 내가 시도한 모든 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.