@DikranMarsupial, безумовно, вірно, звичайно, але мені спало на думку, що було б непогано проілюструвати його думку, тим більше, що ця проблема, як видається, виникає часто. Зокрема, залишки регресійної моделі повинні бути звичайно розподілені, щоб значення p були правильними. Однак, навіть якщо залишки зазвичай розподіляються, це не гарантує, що буде (не те, що це має значення ...); це залежить від розподілу XYХ .
Візьмемо простий приклад (який я складаю). Скажімо, ми перевіряємо препарат на ізольовану систолічну гіпертензію (тобто, число верхнього артеріального тиску зависоке). Далі встановимо, що систолічний bp зазвичай розподіляється в межах нашої групи пацієнтів із середнім значенням 160 & SD 3, і що на кожен мг препарату, який пацієнти приймають щодня, систолічний bp знижується на 1 мм рт. Іншими словами, справжнє значення дорівнює 160, а β 1 - -1, а функція генерування істинних даних така:
B P s y s = 160 - 1 × добова дозування ліків + εβ0β1
У нашому вигаданому дослідженні 300 пацієнтів випадково призначено приймати 0 мг (плацебо), 20 мг або 40 мг цього дня. (Зверніть увагу, що X зазвичай не розповсюджується.) Потім, через достатній проміжок часу, коли препарат вступить у дію, наші дані можуть виглядати приблизно так:
Б Пс ус= 160 - 1 × добова дозування препарату + εде ε ∼ N( 0 , 9 )
Х
(Я стрибав дозування, щоб точки не перекривались так сильно, що їх важко було розрізнити.) Тепер давайте перевіримо розподіли (тобто, це граничне / оригінальне розподіл) та залишки: Y
YY , в той час як залишки виглядають так само, як нормальний розподіл має виглядати.
YХр < .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
Ці результати показують, що все працює добре.
Х YХ