Significância estatística da diferença entre distâncias

12

Eu tenho mais de 3000 vetores em uma grade bidimensional, com uma distribuição discreta aproximadamente uniforme. Alguns pares de vetores cumprem uma determinada condição. Nota: a condição é aplicável apenas a pares de vetores, não a vetores individuais. Eu tenho uma lista de cerca de 1500 pares, vamos chamá-lo de grupo 1. O grupo 2 contém todos os outros pares de vetores. Quero descobrir se a distância entre vetores em um par no grupo 1 é significativamente menor da distância média entre dois vetores. Como eu posso fazer isso?

Teste estatístico : o teorema do limite central é aplicável ao meu caso? Ou seja, posso tirar médias de amostras de distâncias e usar o teste t de Student para comparar médias de amostras que atendem à condição com médias de amostras que não atendem à condição? Caso contrário, que teste estatístico seria apropriado aqui?

Tamanho da amostra e número de amostras : Eu entendo que existem duas variáveis ​​aqui. Para cada um dos dois grupos, preciso colher n amostras do tamanho m e medir a média de cada uma das amostras. Existe alguma maneira de princípios para escolher n e m ? Eles devem ser o maior possível? Ou devem ser o mínimo possível, desde que mostrem a significância estatística? Eles devem ser iguais para cada um dos dois grupos? Ou eles devem ser maiores para o grupo 2, que contém muito mais pares de vetores?

michau
fonte
1
Normalmente, as pessoas não têm a sorte de ter limites definidos para seus pontos de dados - ou então os limites são complicados. Isso, juntamente com as correlações entre distâncias (criadas pela desigualdade do triângulo), impede o desenvolvimento de uma boa expressão analítica para a distribuição amostral das distâncias médias. Portanto, eles tipicamente estimam as distribuições amostrais das distâncias médias por amostragem a partir dos dados.
whuber
@whuber Não sei se entendi direito, você está sugerindo que eu colete n amostras de cada um dos dois grupos e use o teste t para comparar as médias dessas amostras? Eu editei minha pergunta, espero que esteja mais clara agora.
Michau

Respostas:

14

A questão de "significativamente" diferente sempre, sempre pressupõe um modelo estatístico para os dados. Esta resposta propõe um dos modelos mais gerais que é consistente com as informações mínimas fornecidas na pergunta. Em resumo, ele funcionará em uma ampla variedade de casos, mas nem sempre pode ser a maneira mais poderosa de detectar uma diferença.

Três aspectos dos dados são realmente importantes: a forma do espaço ocupado pelos pontos; a distribuição dos pontos dentro desse espaço; e o gráfico formado pelos pares de pontos com a "condição" - que chamarei de grupo "tratamento". Por "gráfico", quero dizer o padrão de pontos e interconexões implícitos pelos pares de pontos no grupo de tratamento. Por exemplo, dez pares de pontos ("arestas") do gráfico podem envolver até 20 pontos distintos ou até cinco pontos. No primeiro caso, duas arestas não compartilham um ponto em comum, enquanto no último caso as arestas consistem em todos os pares possíveis entre cinco pontos.

n=3000σ(vEu,vj)(vσ(Eu),vσ(j))3000!1021024permutações. Nesse caso, sua distância média deve ser comparável às distâncias médias que aparecem nessas permutações. Podemos facilmente estimar a distribuição dessas distâncias médias aleatórias amostrando alguns milhares de todas essas permutações.

(Vale ressaltar que essa abordagem funcionará, com apenas pequenas modificações, com qualquer distância ou qualquer quantidade que esteja associada a todos os pares de pontos possíveis. Também funcionará para qualquer resumo das distâncias, e não apenas a média.)


Para ilustrar, aqui estão duas situações envolvendo pontos e arestas em um grupo de tratamento. Na linha superior, os primeiros pontos em cada aresta foram escolhidos aleatoriamente entre os pontos e, em seguida, os segundos pontos de cada aresta foram escolhidos de forma independente e aleatória entre os pontos diferentes de seu primeiro ponto. No total, pontos estão envolvidos nessas arestas.n=10028.100100-139.28.

Na linha inferior, oito dos pontos foram escolhidos aleatoriamente. As arestas consistem em todos os pares possíveis.10028.

figura 1

Os histogramas à direita mostram as distribuições de amostragem para permutações aleatórias das configurações. As distâncias médias reais dos dados são marcadas com linhas vermelhas tracejadas verticais. Ambos os meios são consistentes com as distribuições de amostragem: nenhuma fica muito à direita ou à esquerda.10000

As distribuições amostrais diferem: embora, em média, as distâncias médias sejam as mesmas, a variação na distância média é maior no segundo caso, devido às interdependências gráficas entre as arestas. Essa é uma das razões pelas quais nenhuma versão simples do Teorema do Limite Central pode ser usada: calcular o desvio padrão dessa distribuição é difícil.

n=30001500

Figura 2

56.

Geralmente, a proporção de distâncias médias de tanto a simulação e o grupo de tratamento que são iguais ou maiores do que a distância média no grupo de tratamento pode ser tomada como o valor de p deste teste não paramétrico de permutação.


Este é o Rcódigo usado para criar as ilustrações.

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")
}
whuber
fonte
Muito obrigado! Era isso que eu estava procurando. Mas você se importaria de esclarecer como o valor-p deve ser calculado? Eu não entendo a formulação "a proporção de distâncias médias da simulação e do grupo de tratamento igual ou maior que a distância média no grupo de tratamento". Você está falando sobre a proporção de duas distâncias médias e uma delas é "distâncias médias [...] do grupo de tratamento que são iguais ou maiores à distância média no grupo de tratamento". Estou confuso, parece uma tautologia. Você poderia escrever uma fórmula ou código R para torná-lo mais claro?
Michau
De qualquer forma, acontece que meu caso é semelhante ao seu segundo exemplo, as distâncias médias das permutações são de cerca de 22 com o desvio padrão em torno de 0,3 e a média do grupo de tratamento é 12. Portanto, parece uma indicação clara de que o parâmetro diferença é estatisticamente significativa. A única coisa com a qual estou lutando agora é a estimativa do valor-p. De fato, mesmo com uma amostra bastante grande de permutações (10000), todos os meios, sem exceção, estão em um intervalo bastante estreito, digamos [21, 23]. Isso é algo que eu posso usar para estimar o valor-p?
Michau
1
OK, eu li um pouco sobre os testes de permutação de Monte Carlo agora. De acordo com meu entendimento: se as médias de todas as 10000 permutações que eu tentei forem superiores à média do grupo de tratamento, posso concluir que p <0,0001. É tão simples assim?
Michau
1
Sim, é assim tão simples! Adicionei código no final para calcular e exibir um valor p bicaudal (que, sem dúvida, é o apropriado para sua situação). Para um valor p unicaudal, use um mean(c(sim, stat) <= stat)ou mean(c(sim, stat) >= stat)conforme apropriado.
whuber
Ótimo! A situação com o teste unicaudal está perfeitamente clara agora, mas ainda não entendo o teste bicaudal, particularmente a multiplicação por 2. Se 10000 permutações me deram meios no intervalo [21, 23], não significa que 12 e 32 estão fora do intervalo de confiança de 99,99%, o que corresponde a p <0,0001? Eu não deveria simplesmente contar distâncias médias que estão tão longe statdo meio da distribuição, em qualquer direção? Algo como p.value <- mean(abs(c(sim, stat)-mean(sim)) >= abs(stat-mean(sim))).
22616 michau