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