É errado tremer antes de executar o teste de Wilcoxon?


9

Eu escrevi um script que testa os dados usando o wilcox.test, mas quando obtive os resultados, todos os valores de p eram iguais a 1. Li em alguns sites que você poderia usar o jitter antes de testar os dados (para evitar empates, como eles disseram), Eu fiz isso e agora tenho um resultado aceitável. É errado fazer isso?

test<- function(column,datacol){
    library(ggplot2)
t=read.table("data.txt", stringsAsFactors=FALSE)
uni=unique(c(t$V9))
    for (xp in uni) { 
          for(yp in uni) {
            testx <- subset(t, V9==xp)
            testy <- subset(t, V9==yp)
            zz <- wilcox.test(testx[[datacol]],jitter(testy[[datacol]]))
            p.value <- zz$p.value
          }
        }
}


Esta é a saída de dput(head(t))

structure(list(V1 = c(0.268912,
0.314681, 0.347078, 0.286945, 
0.39562, 0.282182), V2 = c(0.158921, 0.210526, 0.262024, 0.322006, 
0.133417, 0.283025), V3 = c(0.214082, 0.166895, 0.132547, 0.147361, 
0.09174, 0.169093), V4 = c(0.358085, 0.307898, 0.258352, 0.243688, 
0.379224, 0.2657), V5= c(-0.142223, 0.010895, 0.14655, 
0.08152, 0.02116, 0.030083), V6 = c(0.096408, -0.091896,

-0.331229, -0.446603, -0.088493, -0.262037), V7` = c(1.680946, 
1.649559, 1.534401, 1.130529, 3.441356, 1.211815), V8 = c("NC_000834",  "NC_000844",
"NC_000845", "NC_000846", "NC_000857",
"NC_000860" ), V9 = c("Chordata",
"Arthropoda", "Chordata", "Chordata", 
"Arthropoda", "Chordata"), V10 =
c("???:???", "Diplostraca", 
"???:???", "Rheiformes", "Diptera",
"Salmoniformes"), V11 = c("???:???",
"Branchiopoda", "Mammalia", "Aves",
"Insecta", "Actinopterygii" )), .Names
= c("V1", "V2", "V3", "V4", "V5", "V6",  "V7",
"V8", "V9", "V10",
"V11"), row.names = c(NA,  6L),
class = "data.frame")

Os dados são muito grandes e foi esse o segmento que iniciei e eles me disseram que pode estar errado fazer isso

Nota Esta pergunta vem do tex.SE: gerando saída PDFcontain R dentro da tabela de látex


2
Você não nos diz quais são seus dados, mas desconfio de qualquer procedimento que adicione ruído aleatório aos dados e execute um teste estatístico. Além disso, você tem certeza de que seu código faz o que você acha que faz? Minha leitura é que, apesar de seu loop, ele irá retornar um único p.value - a de X = Y = {} lastvaluof (UNI)
Andrie

@Andrie: obrigado por sua ajuda, mas esse não é o código completo, é parte da função que calcula o teste wilcox e o código que produz diferentes valores de valor-p para cada um (xp, yp), que é um link para um parte dos meus dados, você pode visualizá-lo e verificar se posso fazer isso, desde já, obrigado. mediafire.com/?mnj26kp4bv5lcr5

11
Eu desconfiaria de links para dados que exigem redirecionamento para outros links, especialmente quando o R fornece a dput()função muito útil que elimina qualquer necessidade de fazer isso. Forneça um exemplo reproduzível para receber assistência.
Perseguição


@weblover Quando sugeri (no tex.SE) para fazer sua pergunta sobre estatísticas aqui, eu não sabia que você já havia perguntado sobre o SO. Exclua uma de suas duas postagens (provavelmente no SO, pois essa é uma pergunta sobre estatísticas).
chl

Respostas:


6

Há um tópico na lista de ajuda R sobre isso; Veja, por exemplo: http://tolstoy.newcastle.edu.au/R/e8/help/09/12/9200.html

A primeira sugestão é repetir o teste várias vezes com diferentes oscilações e, em seguida, combinar os valores de p para obter um valor de p geral, fazendo uma média ou um máximo. Eles também sugerem que um teste direto de permutação possa ser usado (dos dois, é o que eu prefiro). Veja a pergunta Qual implementação de teste de permutação em R usar em vez de testes t (emparelhados e não emparelhados)? para alguns exemplos de testes de permutação.

Em outro lugar desse segmento, Greg Snow escreve: Adicionar ruído aleatório aos dados para evitar um aviso é como remover as baterias de um detector de fumaça para silenciá-lo, em vez de investigar o que está causando o alarme. (Veja http://tolstoy.newcastle.edu.au/R/e8/help/09/12/9195.html )


obrigado pela sua resposta, mas não entendi o que devo fazer agora? mude o teste ou ajuste os dados com base em algo, e o que é isso algo ???
Weblover

Resumirei a página à qual vinculei.
Aaron deixou Stack Overflow em

3

(aviso: não verifiquei o código, minha resposta é baseada apenas na sua descrição)

Tenho a sensação de que o que você quer fazer é uma péssima ideia . Wilcoxon é um teste de reamostragem (ou randomização) para classificações. Ou seja, ele classifica os valores e compara essas classificações com todas as permutações possíveis das classificações (veja, por exemplo, aqui ).

Então, como você percebeu, os laços são muito ruins, pois você não obtém uma classificação deles. No entanto, adicionar ruído aleatório (jitter) aos seus dados transformará todas as classificações, para que elas tenham classificações aleatórias! Ou seja, distorce seus dados severamente.

Portanto: é errado fazer isso .


thnx para você responder, mas o que devo fazer neste caso?
Weblover

2

Você perguntou a várias pessoas o que você deve fazer agora. Na minha opinião, o que você deve fazer agora é aceitar que o valor p apropriado aqui seja 1.000. Seus grupos não diferem.


Olá, é racional aceitar isso? porque todos os grupos e subgrupos, quando comparados, fornece o mesmo valor p, isso não é lógico, porque em cada caso estou testando 1 variável, por exemplo: test ("Ph", V1), então o valor p não deve ser o mesmo para tudo . alguma ideia ??
Weblover

Claro, poderia ser racional. Um valor p de 1 significa que os dois grupos estão o mais próximo possível do mesmo. Se você tem quase todos os laços, isso pode ser verdade.
Aaron deixou Stack Overflow em

@Aaron @Web Esses dados (V1 a V7) não estão vinculados. Um erro deve ter sido cometido em algum lugar na obtenção de valores-p de 1. Eu recebo muitos valores-p de 0,036 ao compará-los com o teste de classificação assinada de Wilcoxon.
whuber

O OP postou apenas as primeiras linhas dos dados; aparentemente, deve haver laços mais adiante, embora isso pareça improvável, pois os dados vão para seis casas decimais. Então, sim, parece que pode haver um erro na análise, embora não seja exatamente o que você aponta.
Aaron saiu de Stack Overflow
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.