斜率方差

机器算法验证 r 回归 方差 回归系数
2022-04-05 11:17:11

我有一堆适合线性回归的数据,现在我需要找到斜率的方差。有没有一种分析方法来得到这个?

如果需要示例,请考虑我在 R 中的数据:

x <- c(1:6)
y <- c(18, 14, 15, 12, 7, 6)
lm(y ~ x)$coefficients

所以我有一个斜率估计-2.4,但我想知道那个估计的方差。

在查看了之前的问题之后,我看到了一些用于估计斜率参数的方程,但我对方程之间的差异以及什么方法对我的问题有效有点困惑。

例如,这个问题的答案是Var[slope]=V[Y](xix¯(xix¯)2)

这个问题Var[slope]=V[Y](xix¯)2

如果我查看 R 中的输出(作为“检查”机制),我会得到另外两种可能计算斜率方差的方法(一种使用标准误差,另一种使用协方差矩阵)。我觉得我错过了一些关键的东西,因为所有这些估计都给了我相似(但不一样)的答案。

2个回答

对于满足正常假设的标准线性回归,参数估计的方差可以从方差协方差矩阵中获取。例如,截距的方差是主对角线上的第一个元素上斜率的方差是主对角线上的第二个元素,,依此类推。 ΣΣ11X1Σ22

可能有很多方法可以给猫剥皮,但方差协方差矩阵的标准计算使用模型和设计矩阵的残差。然后是: 这是一个使用您的数据和 R 进行计算的工作示例:

VCov(model)=s2(XX)1

x = c(1:6);    y = c(18, 14, 15, 12, 7, 6);    m = lm(y ~ x)
summary(m)
# Coefficients:
#             Estimate Std. Error t value Pr(>|t|)    
# (Intercept)  20.4000     1.4119   14.45 0.000133 ***
# x            -2.4000     0.3625   -6.62 0.002700 ** 
# 
# Residual standard error: 1.517 on 4 degrees of freedom
s = summary(m)$sigma;  s  # [1] 1.516575
dm = model.matrix(m);  dm
#   (Intercept) x
# 1           1 1
# 2           1 2
# 3           1 3
# 4           1 4
# 5           1 5
# 6           1 6
s^2*solve(t(dm)%*%dm)
#             (Intercept)          x
# (Intercept)    1.993333 -0.4600000
# x             -0.460000  0.1314286
vcov(m)  # you can see that this is the same as the manual calculation above
#             (Intercept)          x
# (Intercept)    1.993333 -0.4600000
# x             -0.460000  0.1314286
sqrt(diag(vcov(m)))  # these are the same standard errors as the summary output
# (Intercept)           x 
#   1.4118546   0.3625308 

对于多元回归情况,这样做很容易: 通常由

Var((XX)1Xy)=(XX)1XVar(y)X(XX)1=(XX)1X(σ2I)X(XX)1=σ2(XX)1XX(XX)1=σ2(XX)1
s2(XX)1