Eu tenho dois conjuntos de dados e gostaria de saber se eles são significativamente diferentes ou não (isso vem de " Dois grupos são significativamente diferentes? Teste para usar ").
Decidi usar um teste de permutação, fazendo o seguinte em R:
permutation.test <- function(coding, lncrna) {
coding <- coding[,1] # dataset1
lncrna <- lncrna[,1] # dataset2
### Under null hyphotesis, both datasets would be the same. So:
d <- c(coding, lncrna)
# Observed difference
diff.observed = mean(coding) - mean(lncrna)
number_of_permutations = 5000
diff.random = NULL
for (i in 1:number_of_permutations) {
# Sample from the combined dataset
a.random = sample (d, length(coding), TRUE)
b.random = sample (d, length(lncrna), TRUE)
# Null (permuated) difference
diff.random[i] = mean(b.random) - mean(a.random)
}
# P-value is the fraction of how many times the permuted difference is equal or more extreme than the observed difference
pvalue = sum(abs(diff.random) >= abs(diff.observed)) / number_of_permutations
pvalue
}
No entanto, os valores de p não devem ser 0, de acordo com este artigo: http://www.statsci.org/smyth/pubs/permp.pdf
O que você recomenda que eu faça? É assim que se calcula o valor-p:
pvalue = sum(abs(diff.random) >= abs(diff.observed)) / number_of_permutations
um bom caminho? Ou é melhor fazer o seguinte?
pvalue = sum(abs(diff.random) >= abs(diff.observed)) + 1 / number_of_permutations + 1
p-value
permutation-test
user2886545
fonte
fonte
a.random
b.random
b.random
a.random
coding
lncrna
Respostas:
Discussão
Um teste de permutação gera todas as permutações relevantes de um conjunto de dados, calcula uma estatística de teste designada para cada uma dessas permutações e avalia a estatística de teste real no contexto da distribuição de permutação resultante das estatísticas. Uma maneira comum de avaliar isso é informar a proporção de estatísticas que são (em algum sentido) "tão ou mais extremas" do que as estatísticas reais. Isso geralmente é chamado de "valor-p".
Como o conjunto de dados real é uma dessas permutações, sua estatística estará necessariamente entre as encontradas na distribuição de permutações. Portanto, o valor p nunca pode ser zero.
A menos que o conjunto de dados seja muito pequeno (menos de cerca de 20 a 30 números totais, normalmente) ou a estatística de teste tenha uma forma matemática particularmente agradável, não é possível gerar todas as permutações. (Um exemplo em que todas as permutações são geradas aparece no Teste de permutação em R. ). Portanto, as implementações em computador de testes de permutação geralmente são amostradas na distribuição de permutação. Eles o fazem gerando algumas permutações aleatórias independentes e esperam que os resultados sejam uma amostra representativa de todas as permutações.
Portanto, quaisquer números (como um "valor p") derivados de uma amostra são apenas estimadores das propriedades da distribuição de permutação. É bem possível - e geralmente acontece quando os efeitos são grandes - que o valor p estimado seja zero. Não há nada errado com isso, mas imediatamente levanta a questão até agora negligenciada de quanto o valor p estimado poderia diferir do valor correto? Como a distribuição amostral de uma proporção (como um valor p estimado) é binomial, essa incerteza pode ser tratada com um intervalo de confiança binomial .
Arquitetura
Uma implementação bem construída seguirá a discussão de perto em todos os aspectos. Começaria com uma rotina para calcular a estatística do teste, como esta para comparar as médias de dois grupos:
Escreva outra rotina para gerar uma permutação aleatória do conjunto de dados e aplique a estatística de teste. A interface para essa permite que o chamador forneça a estatística de teste como argumento. Comparará o primeiro
m
elementos de uma matriz (presumivelmente um grupo de referência) com os elementos restantes (o grupo "tratamento").O teste de permutação é realizado primeiro encontrando a estatística para os dados reais (assumida aqui como sendo armazenada em duas matrizes
control
etreatment
) e, em seguida, encontrando estatísticas para muitas permutações aleatórias independentes dos mesmos:Agora calcule a estimativa binomial do valor-p e um intervalo de confiança para ele. Um método usa o built-in
binconf
procedimento interno noHMisc
pacote:Não é uma má idéia comparar o resultado com outro teste, mesmo que se saiba que isso não é aplicável: pelo menos você pode ter uma noção de ordem de magnitude de onde o resultado deve estar. Neste exemplo (de comparação de médias), um teste t de Student geralmente fornece um bom resultado de qualquer maneira:
Essa arquitetura é ilustrada em uma situação mais complexa, com
R
código de trabalho , em Testar se as variáveis seguem a mesma distribuição .Exemplo
Depois de usar o código anterior para executar um teste de permutação, plotei a amostra da distribuição de permutação junto com uma linha vermelha vertical para marcar a estatística real:
O cálculo do limite binomial de confiança resultou em
3.16e-05
Comentários
fonte
(B é o número de permutações aleatórias em que é obtida uma estatística maior ou igual à observada e M é o número total de permutações aleatórias amostradas).
fonte