Answers:
即使响应变量不是正态分布,回归问题中的残差也可以正态分布是合理的。考虑一个单变量回归问题,其中。因此回归模型是合适的,并进一步假设β = 1的真实值。在这种情况下,当真正回归模型的残差是正常的,分布ÿ取决于分布X,随着条件均值ÿ是的函数X。如果数据集的x值很多接近零,且的值越高,则逐渐减少,则y的分布将向左倾斜。如果x的值对称分布,则y将对称分布,依此类推。对于回归问题,我们仅假设响应是正常的,条件是x的值。
@DikranMarsupial当然是正确的,但是我想到也许可以很好地说明他的观点,尤其是因为这种担忧似乎经常出现。具体而言,回归模型的残差应正态分布,以使p值正确。但是,即使残差是正态分布的,也不能保证将是(这并不重要...);它取决于X的分布。
让我们举一个简单的例子(我正在做)。假设我们正在测试一种用于治疗单纯性收缩期高血压的药物(即最高血压值太高)。让我们进一步规定,收缩压bp通常分布在我们的患者人群中,平均值为160,标准差为3,对于患者每天服用的每毫克药物,收缩压bp下降1mmHg。换句话说,真值是160,和β 1为-1,而真正的数据生成功能是: 乙P 小号Ŷ 小号 = 160 - 1 × 每日药物剂量+ ε 在我们的研究中虚构,300名患者随机分配到每天服用这个新药为0mg(安慰剂),20毫克,40毫克或。(请注意, X不是正态分布的。)然后,在足够的时间使药物生效后,我们的数据可能如下所示:
(我抖动了剂量,以使点不会重叠得太多,以致于难以区分。)现在,让我们检查一下的分布(即,边际/原始分布)和残差:
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
这些结果表明一切正常。