Cálculo manual del valor p para la prueba t: cómo evitar valores mayores que

8

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 ):12

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.1

vonjd
fuente
8
Mira el código: getAnywhere(t.test.default). Lo encontrarás pval <- 2 * pt(-abs(tstat), df)allí.
Roland

Respuestas:

7

Puede utilizar absen el numerador (por lo que siempre es> 0) y mantener el lower.tail=FALSE.

Glen_b -Reinstate a Monica
fuente
0

Glen_b tiene toda la razón sobre el abs, sin embargo, he encontrado que en ciertos conjuntos de datos los valores requerirían -abstener el efecto deseado. No puedo explicar por qué, pero dejaré esta línea de código aquí, en caso de que alguien que tenga un problema similar encuentre este hilo.

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

Respuesta ampliada a petición de mdewey.

S Tomo
fuente
1
¿Puede ampliar cómo cree que esto se suma al comentario y la respuesta que ya están allí?
mdewey