Cálculo manual del valor P a partir del valor t en la prueba t


49

Tengo un conjunto de datos de muestra con 31 valores. Ejecuté una prueba t de dos colas usando R para probar si la media real es igual a 10:

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

Salida:

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 

Ahora estoy tratando de hacer lo mismo manualmente:

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

El valor t calculado con este método es el mismo que el generado por la función R de la prueba t. Sin embargo, el valor p resulta ser 3.025803e-12.

¿Alguna idea de lo que estoy haciendo mal?

¡Gracias!

EDITAR

Aquí está el código R completo, incluido mi conjunto de datos:

# 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)

Respuestas:


43

Úselo pty hágalo con dos colas.

> 2*pt(11.244, 30, lower=FALSE)
[1] 2.785806e-12

1
Creo que falta un detalle: ¿Cuándo usar lower = F? - Consulte mi pregunta aquí: stats.stackexchange.com/questions/133091/…
vonjd

3
El valor debe ser positivo, por lo que si usa esto con una variable que podría ser negativa, envuélvala abs.
Aaron - Restablece a Mónica el

3
Para una prueba de dos colas, está buscando la probabilidad de que el valor sea menor que -11.244 o mayor que +11.244. lower = F le dice a R que calcule la probabilidad de que el valor sea mayor que el primer parámetro. De lo contrario, le da la probabilidad de que el valor sea menor que el primer parámetro. Como tal, también podría hacer 2 * pt (-11.244, 30). Personalmente, generalmente hago 2 * pt (-abs (q), df = n-1) ya que R por defecto es menor = T.
ashic

9

Publiqué esto como un comentario, pero cuando quise agregar un poco más en la edición, se hizo demasiado largo, así que lo moví aquí.

Editar : su estadística de prueba y df son correctos. La otra respuesta señala el problema con el cálculo del área de cola en la llamada a pt(), y la duplicación de dos colas, lo que resuelve su diferencia. Sin embargo, dejaré mi discusión / comentario anterior porque hace puntos relevantes de manera más general sobre los valores p en colas extremas:

Es posible que no estés haciendo nada malo y sigas obteniendo una diferencia, pero si publicas un ejemplo reproducible, podría ser posible investigar más a fondo si tienes algún error (por ejemplo, en el df).

Estas cosas se calculan a partir de aproximaciones que pueden no ser particularmente precisas en la cola extrema.

Si las dos cosas no usan aproximaciones idénticas, es posible que no estén de acuerdo, pero esa falta de acuerdo no debería importar (para que el área exacta de la cola sea un número significativo, las suposiciones requeridas tendrían que mantenerse en asombrosos grados de exactitud). ¿Realmente tienes normalidad exacta, independencia exacta, variación exactamente constante?

No debe esperar necesariamente una gran precisión donde los números no significarán nada de todos modos. ¿Hasta qué punto importa si el valor p aproximado calculado es o ? Ningún número mide el valor p real de su verdadera situación. Incluso si uno de los números representara el valor p real de su situación real, una vez que esté por debajo de aproximadamente , ¿por qué le importaría cuál era realmente ese valor? 3 × 10 - 12 0.00012×10123×10120.0001


7

La mejor manera de calcularlo manualmente es:

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

¡Necesita la función abs () porque de lo contrario corre el riesgo de obtener valores p mayores que (cuando la media de los datos es mayor que la media dada)!1


0

Realmente me gusta la respuesta que proporcionó @Aaron, junto con los abscomentarios. Encuentro que una confirmación útil es ejecutar

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

que rinde 0.04999607.

Aquí, estamos utilizando la propiedad bien conocida de que el 95% del área bajo la distribución normal ocurre a ~ 1.96 desviaciones estándar, por lo tanto, la salida de ~ 0.05 da nuestro valor p. Usé 1000000 ya que cuando N es enorme, la distribución t es casi la misma que la distribución normal. Ejecutar esto me dio consuelo en la solución de @ Aaron.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.