@DikranMarsupial tiene toda la razón, por supuesto, pero se me ocurrió que podría ser bueno ilustrar su punto, especialmente porque esta preocupación parece surgir con frecuencia. Específicamente, los residuos de un modelo de regresión deben distribuirse normalmente para que los valores p sean correctos. Sin embargo, incluso si los residuos se distribuyen normalmente, eso no garantiza que será (no es que importe ...); que depende de la distribución de X . YX
Tomemos un ejemplo simple (que estoy inventando). Digamos que estamos probando un medicamento para la hipertensión sistólica aislada (es decir, el número máximo de presión arterial es demasiado alto). Supongamos que la pb sistólica se distribuye normalmente en nuestra población de pacientes, con una media de 160 y DE de 3, y que por cada mg del medicamento que los pacientes toman cada día, la pb sistólica disminuye en 1 mmHg. En otras palabras, el verdadero valor de es 160, y β 1 es -1, y la verdadera función de generación de datos es:
B P s y s = 160 - 1 × dosis diaria de fármaco + εβ0 0β1
En nuestro estudio ficticio, 300 pacientes son asignados aleatoriamente para tomar 0 mg (un placebo), 20 mg o 40 mg de este nuevo medicamento por día. (Tenga en cuenta que X no se distribuye normalmente). Luego, después de un período de tiempo adecuado para que el medicamento surta efecto, nuestros datos podrían verse así:
B Ps ys= 160 - 1 × dosis diaria del fármaco + εdonde ε ∼ N( 0 , 9 )
X
(Sacudí las dosis para que los puntos no se superpusieran tanto que fueran difíciles de distinguir). Ahora, veamos las distribuciones de (es decir, su distribución marginal / original) y los residuos: Y
YY
YXp < .05β1
set.seed(123456789) # this make the simulation repeatable
b0 = 160; b1 = -1; b1_null = 0 # these are the true beta values
x = rep(c(0, 20, 40), each=100) # the (non-normal) drug dosages patients get
estimated.b1s = vector(length=10000) # these will store the simulation's results
estimated.b1ns = vector(length=10000)
null.p.values = vector(length=10000)
for(i in 1:10000){
residuals = rnorm(300, mean=0, sd=3)
y.works = b0 + b1*x + residuals
y.null = b0 + b1_null*x + residuals # everything is identical except b1
model.works = lm(y.works~x)
model.null = lm(y.null~x)
estimated.b1s[i] = coef(model.works)[2]
estimated.b1ns[i] = coef(model.null)[2]
null.p.values[i] = summary(model.null)$coefficients[2,4]
}
mean(estimated.b1s) # the sampling distributions are centered on the true values
[1] -1.000084
mean(estimated.b1ns)
[1] -8.43504e-05
mean(null.p.values<.05) # when the null is true, p<.05 5% of the time
[1] 0.0532
Estos resultados muestran que todo funciona bien.
X YX