Cálculo manual do valor P a partir do valor t no teste t

49

Eu tenho um conjunto de dados de amostra com 31 valores. Fiz um teste t bicaudal usando R para testar se a média verdadeira é igual a 10:

t.test(x=data, mu=10, conf.level=0.95)

Resultado:

t = 11.244, df = 30, p-value = 2.786e-12
alternative hypothesis: true mean is not equal to 10 
95 percent confidence interval:
 19.18980 23.26907 
sample estimates:
mean of x 
 21.22944 

Agora estou tentando fazer a mesma coisa manualmente:

t.value = (mean(data) - 10) / (sd(data) / sqrt(length(data))) 
p.value = dt(t.value, df=length(lengths-1))

O valor t calculado usando esse método é o mesmo que a saída da função R do teste t. O valor-p, no entanto, é 3.025803e-12.

Alguma idéia do que estou fazendo de errado?

Obrigado!

EDITAR

Aqui está o código R completo, incluindo meu conjunto de dados:

# Raw dataset -- 32 observations
data = c(21.75, 18.0875, 18.75, 23.5, 14.125, 16.75, 11.125, 11.125, 14.875, 15.5, 20.875,
            17.125, 19.075, 25.125, 27.75, 29.825, 17.825, 28.375, 22.625, 28.75, 27, 12.825, 
            26, 32.825, 25.375, 24.825, 25.825, 15.625, 26.825, 24.625, 26.625, 19.625)

# Student t-Test
t.test(x=data, mu=10, conf.level=0.95)

# Manually calculate p-value
t.value = (mean(data) - 10) / (sd(data) / sqrt(length(data)))
p.value = dt(t.value, df=length(data) - 1)
herbps10
fonte

Respostas:

43

Use pte faça-o bicaudal.

> 2*pt(11.244, 30, lower=FALSE)
[1] 2.785806e-12
Aaron - Restabelecer Monica
fonte
11
Eu acho que falta um detalhe: quando usar lower = F? - Por favor, veja minha pergunta aqui: stats.stackexchange.com/questions/133091/…
vonjd
3
O valor precisa ser positivo; portanto, se você estiver usando isso com uma variável que pode ser negativa, faça o wrap abs.
Aaron - Restabelece Monica
3
Para um teste bicaudal, você está procurando a probabilidade de que o valor seja menor que -11,244 ou maior que +11,244. lower = F diz R para calcular a probabilidade do valor ser maior que o primeiro parâmetro. Caso contrário, ele fornece a probabilidade do valor ser menor que o primeiro parâmetro. Como tal, você também pode fazer 2 * pt (-11.244, 30). Pessoalmente, eu costumo fazer 2 * pt (-abs (q), df = n-1), pois o padrão de R é menor = T.
ashic
9

Eu postei isso como um comentário, mas quando eu queria adicionar um pouco mais de edição, ficou muito tempo, então eu mudei para cá.

Edit : Sua estatística de teste e df estão corretos. A outra resposta observa o problema com o cálculo da área da cauda na chamada para pt()e a duplicação para duas caudas, o que resolve sua diferença. No entanto, deixarei minha discussão / comentário anterior, porque enfatiza de maneira mais geral os pontos relevantes sobre valores-p em caudas extremas:

É possível que você não esteja fazendo nada errado e ainda assim faça a diferença, mas se você postar um exemplo reproduzível, poderá ser possível investigar melhor se há algum erro (digamos, no df).

Essas coisas são calculadas a partir de aproximações que podem não ser particularmente precisas no extremo extremo.

Se as duas coisas não usarem aproximações idênticas, elas podem não concordar estreitamente, mas essa falta de concordância não deve importar (para a área exata da cauda que é um número tão significativo, as suposições necessárias teriam que se manter em graus surpreendentes de precisão). Você realmente tem normalidade exata, independência exata, variação exatamente constante?

2×10123×10120.0001

Glen_b
fonte
7

A melhor maneira de calcular manualmente é:

t.value = (mean(data) - 10) / (sd(data) / sqrt(length(data))) 
p.value = 2*pt(-abs(t.value), df=length(data)-1)

1

vonjd
fonte
0

Eu realmente gosto da resposta que @Aaron forneceu, juntamente com os abscomentários. Acho que uma confirmação útil é executar

pt(1.96, 1000000, lower.tail = F) * 2

qual produz 0.04999607.

Aqui, estamos usando a propriedade conhecida de que 95% da área sob a distribuição normal ocorre com ~ 1,96 desvios padrão, portanto a saída de ~ 0,05 fornece nosso valor-p. Eu usei 1000000, pois quando N é enorme, a distribuição t é quase a mesma que a distribuição normal. Executar isso me proporcionou conforto na solução do @ Aaron.

ColoradoGranite
fonte