Cálculo manual do valor p para o teste t: como evitar valores maiores que

8

Esses dois métodos para calcular o valor-p devem ser equivalentes:

t.test(rats.drug,mu=1.2)$p.value
2*pt((mean(rats.drug)-1.2)*sqrt(n)/sd(rats.drug),df=n-1)

O problema com o segundo método é que existe o risco de obter valores maiores que (na verdade, até ):12

2*pt((1.5-1.2)*sqrt(100)/.5,df=100-1)
[1] 2

Obviamente, isso pode ser remediado por

2*pt((1.5-1.2)*sqrt(100)/.5,df=100-1,lower=F)
[1] 3.245916e-08

Minha pergunta
Obviamente, o algoritmo da função de teste t é inteligente o suficiente para distinguir esses dois casos (se a média da amostra é maior ou menor que a média fornecida). Existe um método fácil para replicar manualmente o cálculo do valor p, como é feito pela função de teste t?

Minha solução no momento é uma instrução if que verifica se o valor resultante é maior que e, nesse caso, faz o mesmo cálculo novamente com a opção = F mais baixa, mas talvez haja uma maneira melhor.1

vonjd
fonte
8
Olhe para o código: getAnywhere(t.test.default). Você encontrará pval <- 2 * pt(-abs(tstat), df)lá.
Roland

Respostas:

7

Você pode usar absno numerador (por isso é sempre> 0) e manter o lower.tail=FALSE.

Glen_b -Reinstate Monica
fonte
0

Glen_b está absolutamente certo sobre abs, no entanto, descobri que em determinados conjuntos de dados os valores exigiriam -abso efeito desejado. Não sou capaz de explicar o porquê, mas deixarei essa linha de código aqui, caso alguém que esteja tendo um problema semelhante encontre esse segmento.

  t.value <- betacoeff/standard error of the beta coefficients
  p.value <- 2 * pt(-abs(t.value), df = nrow(data)-2)

Resposta expandida a pedido de mdewey.

S Tomo
fonte
1
Você pode expandir como você acha que isso contribui para o comentário e a resposta que já estão lá?
Mdewey