如果残差是正态分布的,但 y 不是?

机器算法验证 回归 残差 错误 正态假设
2022-02-01 21:45:08

我有一个奇怪的问题。假设您有一个小样本,其中您要使用简单线性模型分析的因变量高度左偏。因此你假设u不是正态分布的,因为这会导致正态分布y. 但是当您计算 QQ 正态图时,有证据表明残差是正态分布的。因此,任何人都可以假设误差项是正态分布的,尽管y不是。那么,当误差项似乎是正态分布时,这意味着什么,但是y才不是?

3个回答

回归问题中的残差呈正态分布是合理的,即使响应变量不是。考虑一个单变量回归问题,其中yN(βx,σ2). 使得回归模型是合适的,并进一步假设β=1. 在这种情况下,虽然真实回归模型的残差是正态的,但y取决于分布x,作为条件均值y是一个函数x. 如果数据集有很多值x接近于零并且逐渐减少的值越高x, 那么分布y将向右倾斜。如果值x是对称分布的,那么y将对称分布,依此类推。对于回归问题,我们只假设响应是正态的,取决于x.

当然,@DikranMarsupial 是完全正确的,但在我看来,说明他的观点可能会很好,特别是因为这种担忧似乎经常出现。具体来说,回归模型的残差应该是正态分布的,以使 p 值正确。但是,即使残差是正态分布的,也不能保证Y将是(并不重要......);这取决于分布X.

让我们举一个简单的例子(我正在编造)。假设我们正在测试一种治疗单纯收缩期高血压的药物(即最高血压值太高)。让我们进一步规定收缩压在我们的患者群体中呈正态分布,平均值为 160 和 SD 为 3,并且对于患者每天服用的每毫克药物,收缩压下降 1mmHg。换句话说,真正的价值β0是 160,并且β1为-1,真实数据生成函数为:

BPsys=1601×daily drug dosage+εwhere εN(0,9)
在我们的虚构研究中,300 名患者被随机分配每天服用 0mg(安慰剂)、20mg 或 40mg 这种新药。(请注意X不是正态分布的。)然后,在药物生效足够的时间后,我们的数据可能如下所示:

在此处输入图像描述

(我对剂量进行了抖动,这样这些点就不会重叠太多以至于难以区分。)现在,让我们看看Y(即,它是边际/原始分布),以及残差:

在此处输入图像描述

qq图告诉我们Y不是很正常,但残差是合理的正常。核密度图为我们提供了更直观的分布图。很清楚Ytri-modal,而残差看起来很像正态分布。

但是拟合的回归模型呢,非正态的效果是什么Y&X(但正常残差)?为了回答这个问题,我们需要说明在这种情况下回归模型的典型性能我们可能会担心什么。第一个问题是,平均而言,Beta 是不是?(当然,它们会反弹一些,但从长远来看,贝塔的抽样分布是否以真实值为中心?)这是偏差的问题。另一个问题是,我们能相信我们得到的 p 值吗?也就是说,当原假设为真时,是p<.05只有5%的时间?为了确定这些事情,我们可以模拟上述数据生成过程中的数据,以及药物无效的并行案例,大量次。然后我们可以绘制样本分布β1并检查它们是否以真实值为中心,并检查在 null 情况下关系“显着”的频率:

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                   

在此处输入图像描述

这些结果表明一切正常。

我不会走过场,但如果X 已经是正态分布的,否则设置相同,原始/边际分布Y将与残差一样呈正态分布(尽管 SD 较大)。我也没有说明偏态分布的影响X(这是这个问题背后的动力),但@DikranMarsupial 的观点在这种情况下同样有效,并且可以类似地说明。

在回归模型拟合中,我们应该检查每个水平的响应的正态性 X,但不是作为一个整体,因为它对这个目的毫无意义如果你真的需要检查正常性Y,然后检查每个X等级。