Como criamos um intervalo de confiança para o parâmetro de um teste de permutação?

9

Os testes de permutação são testes de significância baseados em reamostragens de permutação retiradas aleatoriamente dos dados originais. As reamostragens de permutação são desenhadas sem substituição, em contraste com as amostras de bootstrap, que são desenhadas com substituição. Aqui está um exemplo que fiz em R de um teste simples de permutação. (Seus comentários são bem-vindos)

Os testes de permutação têm grandes vantagens. Eles não requerem formas de população específicas, como normalidade. Eles se aplicam a uma variedade de estatísticas, não apenas a estatísticas que têm uma distribuição simples sob a hipótese nula. Eles podem fornecer valores de p muito precisos, independentemente da forma e tamanho da população (se forem utilizadas permutações suficientes).

Também li que muitas vezes é útil fornecer um intervalo de confiança junto com um teste, criado usando a reamostragem de autoinicialização em vez de reamostragem de permutação.

Você poderia explicar (ou apenas fornecer o código R) como um intervalo de confiança é construído (isto é, para a diferença entre as médias das duas amostras no exemplo acima)?

EDITAR

Depois de pesquisar no Google, achei essa leitura interessante .

George Dontas
fonte

Respostas:

7

Não há problema em usar a reamostragem de permutação. Realmente depende de vários fatores. Se suas permutações são um número relativamente baixo, sua estimativa do seu intervalo de confiança não é tão grande com permutações. Suas permutações estão em uma área cinzenta e provavelmente estão bem.

A única diferença do seu código anterior é que você geraria suas amostras aleatoriamente em vez de com permutações. E você geraria mais deles, digamos 1000, por exemplo. Obtenha as pontuações de diferença para suas 1000 repetições de seu experimento. Faça os pontos de corte para os 950 médios (95%). Esse é o seu intervalo de confiança. Ele cai diretamente do bootstrap.

Você já fez a maior parte disso no seu exemplo. tratamento diferido tem 462 itens. Portanto, você precisa dos pontos de corte inferiores a 2,5% e superiores a 2,5% (cerca de 11 itens em cada extremidade).

Usando seu código de antes ...

y <- sort(dif.treat)
ci.lo <- y[11]
ci.hi <- y[462-11]

Por outro lado, eu diria que o 462 é um pouco baixo, mas você encontrará um bootstrap para 10.000 com pontuações um pouco diferentes (provavelmente mais próximas da média).

Pensei em adicionar também um código simples que requer a biblioteca de inicialização (com base no seu código anterior).

diff <- function(x,i) mean(x[i[6:11]]) - mean(x[i[1:5]])
b <- boot(total, diff, R = 1000)
boot.ci(b)
John
fonte
Obrigado. É bom gerar as amostras usando samplee replace=TRUE? Existe algum motivo para usar um pacote como boot?
George Dontas
Normalmente, isso é feito com a substituição, então você deseja definir isso como VERDADEIRO. Quanto ao porquê ... o pacote é otimizado para rodar mais rápido ... nunca o cronometrou. Isso pode ser um problema se você definir R grande. E, como você pode ver, o código é bom e conciso. Ele também possui muitos recursos que você não conseguiria usar facilmente.
John
boot.ci retorna o intervalo de confiança. Existe alguma função (boot) que fornece o p.value? (como a razão entre o número de diferenças pelo menos tão alto quanto o observado e o número total de amostras geradas)
George Dontas 31/08/10
ok, eu encontrei uma maneira de obtê-lo:sum(b$t>=b$t0)/b$R
George Dontas
@ gd047: leve em consideração que este é um valor p unilateral que você está calculando.
Joris Meys
4

Como um teste de permutação é um teste exato , fornecendo um valor p exato. A inicialização de um teste de permutação não faz sentido.

Além disso, determinar um intervalo de confiança em torno de uma estatística de teste também não faz sentido, pois é calculado com base na sua amostra e não em uma estimativa. Você determina intervalos de confiança em torno de estimativas, como médias e gostos, mas não em torno de estatísticas de teste.

Os testes de permutação não devem ser usados ​​em conjuntos de dados tão grandes que você não pode mais calcular todas as permutações possíveis. Se for esse o caso, use um procedimento de autoinicialização para determinar o limite para a estatística de teste usada. Mas, novamente, isso tem pouco a ver com um intervalo de confiança de 95%.

Um exemplo: eu uso aqui a estatística T clássica, mas uso uma abordagem simples ao bootstrap para o cálculo da distribuição empírica da minha estatística. Com base nisso, calculo um valor p empírico:

x <- c(11.4,25.3,29.9,16.5,21.1)
y <- c(23.7,26.6,28.5,14.2,17.9,24.3)

t.sample <- t.test(x,y)$statistic
t.dist <- apply(
      replicate(1000,sample(c(x,y),11,replace=F)),2,
      function(i){t.test(i[1:5],i[6:11])$statistic})

# two sided testing
center <- mean(t.dist)
t.sample <-abs(t.sample-center)
t.dist <- abs(t.dist - center)
p.value <- sum( t.sample < t.dist ) / length(t.dist)
p.value

Leve em consideração que esse teste de dois lados funciona apenas para distribuições simétricas. Distribuições não simétricas são tipicamente testadas apenas de um lado.

EDIT:

OK, eu não entendi a pergunta. Se você deseja calcular um intervalo de confiança na estimativa da diferença, pode usar o código mencionado aqui para inicialização dentro de cada amostra. Lembre-se, essa é uma estimativa tendenciosa: geralmente, isso fornece um IC muito pequeno. Veja também o exemplo dado lá como uma razão pela qual você deve usar uma abordagem diferente para o intervalo de confiança e o valor p.

Joris Meys
fonte
11
Você pode explicar por que os testes de permutação não devem ser usados ​​em conjuntos de dados que você não pode calcular todas as permutações possíveis?
Andy W
@ Andy W: Primeiro defina "teste de permutação". para mim, testes de permutação são testes exatos, usando todas as permutações possíveis. Isso é impossível em conjuntos de dados maiores. Os "testes de permutação aproximados" são de fato o método simples de Monte Carlo, e devem ser abordados dessa maneira. Além disso, o teorema do limite central garante, na maioria dos casos, que as suposições relacionadas à distribuição das estatísticas de teste sejam atendidas ao usar grandes conjuntos de dados. Em testes complexos, o uso de testes de permutação em grandes conjuntos de dados torna os tempos de cálculo insuportavelmente longos sem adicionar nenhum valor significativo. my2cents
Joris Meys
Eu não disse nada como iniciar um teste de permutação. Eu entrei nessa questão depois de ler o último parágrafo da [SEÇÃO 14.5 | Resumo], no pdf vinculado.
George Dontas
@ gd047 Então, eu interpretei mal sua pergunta. Mas você realmente deve manter os intervalos de confiança e os valores de p estritamente separados. O intervalo de confiança é estimado com base no bootstrapping em cada amostra (embora seja tendencioso por definição), o teste de permutação é realizado por permutações no conjunto de dados completo. Essas são duas coisas completamente diferentes.
Joris Meys
@ Kevin: Código foi danado à direita. Leia o código novamente: x[6:11]refere-se ao argumento xda função anônima na aplicação. Talvez confuso, mas sua edição deu resultados muito errados. Comente o que você acha que deveria ser antes de editar o código. Salva-me uma reversão. Para evitar mais confusão, eu mudei isso xparai
Joris Meys
0

Do código de Joris Meys nas respostas, mas com modificação para permitir sua aplicação em mais de uma situação:

Tentei editar o outro, mas não tive tempo de terminar e, por algum motivo, não posso comentar (talvez porque essa seja uma pergunta antiga).

x <- c(11.4,25.3,29.9,16.5,21.1)
y <- c(23.7,26.6,28.5,14.2,17.9,24.3)

t.sample <- t.test(x,y)$statistic

t.dist <- apply(
          replicate(1000,sample(c(x,y),length(c(x,y)),replace=F)), 2,
          function(i){t.test(i[1:length(x)],i[length(x)+1:length(c(x,y))])$statistic})

# two sided testing
center <- mean(t.dist)
t.sample <-abs(t.sample-center)
t.dist <- abs(t.dist - center)
p.value <- sum( t.sample < t.dist ) / length(t.dist)
p.value
Kevin
fonte