Para ver qué valores p son correctos (si los hay), repitamos el cálculo para los datos simulados en los que la hipótesis nula es verdadera. En la configuración actual, el cálculo es un ajuste de mínimos cuadrados a los datos (x, y) y la hipótesis nula es que la pendiente es cero. En la pregunta hay cuatro valores de x 1,2,3,4 y el error estimado es de alrededor de 0.7, así que incorporemos eso en la simulación.
Aquí está la configuración, escrita para ser comprensible para todos, incluso para aquellos que no están familiarizados R
.
beta <- c(intercept=0, slope=0)
sigma <- 0.7
x <- 1:4
y.expected <- beta["intercept"] + beta["slope"] * x
La simulación genera errores independientes, los agrega y.expected
, invoca lm
para hacer el ajuste y summary
para calcular los valores p. Aunque esto es ineficiente, está probando el código real que se utilizó. Todavía podemos hacer miles de iteraciones en un segundo:
n.sim <- 1e3
set.seed(17)
data.simulated <- matrix(rnorm(n.sim*length(y.expected), y.expected, sigma), ncol=n.sim)
slope.p.value <- function(e) coef(summary(lm(y.expected + e ~ x)))["x", "Pr(>|t|)"]
p.values <- apply(data.simulated, 2, slope.p.value)
Los valores p calculados correctamente actuarán como números aleatorios uniformes entre y101 cuando la hipótesis nula sea verdadera. Un histograma de estos valores p nos permitirá verificar esto visualmente, si se ve más o menos horizontal, y una prueba de uniformidad chi-cuadrado permitirá una evaluación más formal. Aquí está el histograma:
h <- hist(p.values, breaks=seq(0, 1, length.out=20))
y, para aquellos que puedan imaginar que esto no es lo suficientemente uniforme, aquí está la prueba de ji cuadrado:
chisq.test(h$counts)
X cuadrado = 13.042, df = 18, valor p = 0.7891
El gran valor p en esta prueba muestra que estos resultados son consistentes con la uniformidad esperada. En otras palabras, lm
es correcto.
¿De dónde, entonces, vienen las diferencias en los valores p? Verifiquemos las fórmulas probables que podrían invocarse para calcular un valor p. En cualquier caso, la estadística de prueba será
|t|=∣∣∣∣β^−0se(β^)∣∣∣∣,
igual a la discrepancia entre el coeficiente estimado y el hipotético (y el valor correcto) , expresado como un múltiplo del error estándar de la estimación del coeficiente. En la pregunta estos valores son ß=0β^β=0
|t|=∣∣∣3.050.87378∣∣∣=3.491
para la estimación de intercepción y
|t|=∣∣∣−1.380.31906∣∣∣=4.321
para la estimación de la pendiente. Normalmente, estos se compararían con la distribución Student, cuyo parámetro de grados de libertad es (la cantidad de datos) menos (el número de coeficientes estimados). Vamos a calcularlo para la intercepción:4 2t42
pt(-abs(3.05/0.87378), 4-2) * 2
[1] 0.0732
(Este cálculo multiplica la probabilidad de Student de cola izquierda por porque esta es una prueba de contra la alternativa de dos lados ) Está de acuerdo con la salida.2 H 0 : β = 0 H A : β ≠ 0t2H0:β=0HA:β≠0lm
Un cálculo alternativo usaría la distribución Normal estándar para aproximar la distribución Student . Veamos que produce:t
pnorm(-abs(3.05/0.87378)) * 2
[1] 0.000482
Efectivamente: biglm
supone que la distribución nula del estadístico es Normal normal. ¿Cuánto de un error es esto? Volver a ejecutar la simulación anterior usando en lugar de da este histograma de valores p:tbiglm
lm
Casi el 18% de estos valores p son inferiores a , un umbral estándar de "significancia". Ese es un error enorme.0.05
Algunas lecciones que podemos aprender de esta pequeña investigación son:
No utilice aproximaciones derivadas de análisis asintóticos (como la distribución Normal estándar) con conjuntos de datos pequeños.
Conoce tu software.
pt(-3.491, 2)*2
conpnorm(-3.491)*2
, por ejemplo.