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)
r
statistical-significance
t-test
p-value
herbps10
fuente
fuente
abs
.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×10−12 3×10−12 0.0001
fuente
La mejor manera de calcularlo manualmente es:
¡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
fuente
Realmente me gusta la respuesta que proporcionó @Aaron, junto con los
abs
comentarios. Encuentro que una confirmación útil es ejecutarpt(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.
fuente