Eu não sou especialista, então me perdoe se parte da terminologia for um pouco desajeitada. É um prazer fornecer mais informações quando necessário.
Eu tenho dois vetores de 50 valores numéricos emparelhados em R. Eu quero executar um teste de randomização ou permutação bicaudal para determinar se suas diferenças são devidas ao acaso ou não.
Um teste de permutação (também chamado de teste de randomização, teste de re-randomização ou teste exato) é um tipo de teste de significância estatística em que a distribuição da estatística do teste sob a hipótese nula é obtida calculando todos os valores possíveis da estatística do teste sob rearranjos dos rótulos nos pontos de dados observados.
Eu quero fazer esse tipo de teste porque acredito que as distribuições dos valores nos vetores violam as suposições de outros testes, como o teste t (por exemplo, muitos dos valores numéricos no vetor são 0).
A permtest
função na biblioteca BHH2 quase faz o que eu quero, mas opera em todas as permutações, que levarão muito tempo. Em vez disso, quero estimar o valor p, amostrando um grande número de permutações possíveis. Eu dei uma olhada no pacote de moedas , mas nada parece fazer um teste de permutação com amostras de vetores numéricos emparelhados.
Alguns pesquisadores me levaram a este e-mail , o que sugere que a razão pela qual não consigo encontrar um pacote para fazer isso é o fato de ser uma linha única no R. Infelizmente, eu não tenho experiência suficiente com o R para poder produzir esse. -forro.
Existe um pacote ou método que executará um teste de permutação emparelhado bicaudal usando apenas uma amostra do espaço de permutação?
Caso contrário, alguém seria capaz de compartilhar um pouco de código R para fazer isso?
fonte
coin
(entre vários outros) faz testes de randomização. por exemplo, veja a resposta a esta pergunta (leia a coisa toda) . Se bem entendi, os exemplos cobrem casos aproximados e exatos e cobrem amostras independentes e dependentes.oneway_test(y ~ x | pairs, distribution=approximate(B=9999))
comlibrary(coin)
.Respostas:
Embora eu tenha apontado nos comentários o uso do
coin
pacote, acho que vale a pena ilustrar que um teste de permutação / randomização é realmente bastante simples, então eu o fiz.Aqui, escrevo um código R para fazer um teste de randomização para um teste de localização de uma amostra. O teste inverte aleatoriamente os sinais nas diferenças e calcula a média; isso é equivalente a atribuir aleatoriamente cada par de valores aos grupos x e y. O código abaixo pode ser significativamente menor (eu poderia fazê-lo em duas linhas com bastante facilidade, ou mesmo em uma se você não se importasse com código mais lento).
Este código leva alguns segundos na minha máquina:
Essa é a coisa toda.
Observe que
rbinom(length(d),1,.5)*2-1)
dá um sinal aleatório-1
ou1
... ou seja, aleatório; portanto, quando multiplicamos por qualquer conjunto de sinais assinadosd
, é equivalente a atribuir aleatoriamente+
ou-
sinais às diferenças absolutas. [Não importa com que distribuição de sinaisd
você comece, agorad
eles terão sinais aleatórios.]Aqui, comparo-o com um teste t em alguns dados inventados:
Quando o teste t é válido, geralmente fornece um valor p muito semelhante ao teste de permutação completamente enumerado, e um valor p simulado como acima (quando o número de simulações é suficientemente grande) convergirá para esse segundo valor p.
No número de repetições usadas acima, um valor p de permutação verdadeiro (ou seja, da enumeração completa) de 0,05 será estimado em 0,001 (ou seja, fornecerá um valor p de randomização entre 0,049 e 0,051) em cerca de 85% do tempo e para 0,002 em 99,5% do tempo.
fonte
d
, porque é assim que um teste de permutação da diferença média para dados emparelhados funciona. Veja novos comentários adicionais após esse trecho de código.Aqui está o código para executar um teste de permutação. Eu tenho dados lá, por exemplo. x é a diferença entre os dois vetores.
fonte