省略截距项时,斜率的标准误差如何计算?

机器算法验证 r 回归 线性模型 标准错误 截距
2022-03-28 15:40:59

假设我们有如下数据:

set.seed(1)
b0 <- 0 # intercept
b1 <- 1 # slope
x <- c(1:100) # predictor variable
y <- b0 + b1*x + rnorm(n = 100, mean = 0, sd = 200) # predicted variable

我们拟合一个简单的线性模型:

mod.1 <- lm(y~x) 
summary(mod.1) 
#             Estimate   Std. Error  t value  Pr(>|t|)
# (Intercept) 26.3331    36.3795     0.724    0.471
# x           0.9098     0.6254      1.455    0.149 
b0.est <- summary(mod.1)$coefficients[1,1]
b1.est <- summary(mod.1)$coefficients[2,1]

还有一个模型,我们(1)从数据集中减去第一个模型中的截距项拟合,(2)防止截距项拟合(或者换句话说,强制模型通过零):

mod.2  <- lm(y - b0.est  ~ 0 + x) 
summary(mod.2) 
#             Estimate   Std. Error t value   Pr(>|t|)   
# x           0.9098     0.3088     2.946     0.00401 **
b1.est.2 <- summary(mod.2)$coefficients[1,1]

正如所料,斜率参数保持不变(0.9098)。

然而,虽然斜率参数在第一个模型中不显着,但在第二个模型中是显着的(第二个模型中估计的标准误差远低于第一个模型,0.3088 对 0.6254)。

两个模型中的数据形状相同,两个模型估计的斜率参数相同。第二个模型如何对斜率参数估计更加“确定”?

或者换句话说,这些标准误差是如何计算的?

使用我在这里找到的标准误差方程,我以这种方式计算了模型 1 和 2 的标准误差:

# Model 1
DF <- length(x)-2 
y.est <- b0.est + b1.est*x 
numerator <- sqrt(sum((y - y.est)^2)/DF) 
denominator <- sqrt(sum((x - mean(x))^2))
numerator/denominator 
# SE = 0.6254

这与 R 输出相匹配。

# Model 2
DF <- length(x)-1 
y.est <- b1.est.2*x 
numerator <- sqrt(sum((y - (y.est+b0.est))^2)/DF) 
denominator <- sqrt(sum((x - mean(x))^2))
numerator/denominator 
# SE = 0.6223

这与 SE = 0.3088 的 R 输出不匹配。

我错过了什么?

1个回答

公式和往常一样,所以让我们专注于了解发生了什么。

这是一小部分点。它的斜率是不确定的。(事实上​​,这些点的坐标是独立于标准正态分布绘制的,然后向一侧移动了一点,如随后的图中所示。)

图1

这是 OLS 拟合。截距接近这是一种意外:OLS 线必须通过点云的质心,而截距的位置取决于我将点云从原点移动了多远。由于不确定的斜率和点向右移动的距离相对较大,截距几乎可以在任何地方。为了说明,虚线的斜率与拟合线的差异最大为所有这些都非常适合数据。3±1/2

OLS

在将云降低截距高度后,OLS 线(实心灰色)如预期一样穿过原点。

OLS 适合降低的数据

OLS 线仍然像以前一样不确定其斜率的标准误差很高。但是,如果您要限制它通过原点,那么剩下的唯一摆动空间就是通过点云上下改变另一端。虚线显示的坡度范围与以前相同:但现在极端的坡度不会靠近云层。 约束拟合大大增加了斜率的确定性。