Estos dos métodos para calcular el valor p deberían 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)
El problema con el segundo método es que existe el riesgo de obtener valores mayores que (de hecho, hasta ):
2*pt((1.5-1.2)*sqrt(100)/.5,df=100-1)
[1] 2
Por supuesto, esto puede remediarse
2*pt((1.5-1.2)*sqrt(100)/.5,df=100-1,lower=F)
[1] 3.245916e-08
Mi pregunta
Obviamente, el algoritmo de la función t-test es lo suficientemente inteligente como para distinguir estos dos casos (si la media de la muestra es mayor o menor que la media dada). ¿Existe un método fácil para replicar manualmente el cálculo del valor p como lo hace la función t-test?
Mi solución en este momento es una declaración if que verifica si el valor resultante es mayor que y, en este caso, vuelve a hacer el mismo cálculo con la opción menor = F, pero tal vez haya una mejor manera.
getAnywhere(t.test.default)
. Lo encontraráspval <- 2 * pt(-abs(tstat), df)
allí.