我发现了意想不到的结果,我不确定我是否在某个地方犯了错误。
在使用完整样本的 OLS 回归中,我发现感兴趣的自变量的斜率为 0.03 且显着。然而,当我将样本分成两个子集时(我将样本分成大约 50/50),我发现使用这些子集的两个 OLS 回归都有显着的结果。但是,斜率为 0.08 和 0.07。这感觉有点违反直觉,因为我不明白为什么在划分样本时斜率会更大。相反,我希望使用完整样本的斜率应该位于使用子集的斜率之间。
有谁知道我的发现是否仍然有效?
我发现了意想不到的结果,我不确定我是否在某个地方犯了错误。
在使用完整样本的 OLS 回归中,我发现感兴趣的自变量的斜率为 0.03 且显着。然而,当我将样本分成两个子集时(我将样本分成大约 50/50),我发现使用这些子集的两个 OLS 回归都有显着的结果。但是,斜率为 0.08 和 0.07。这感觉有点违反直觉,因为我不明白为什么在划分样本时斜率会更大。相反,我希望使用完整样本的斜率应该位于使用子集的斜率之间。
有谁知道我的发现是否仍然有效?
当您将数据分成系统不同的组时,这是一种非常常见的情况。这是一个例子:
set.seed(4218)
N = 100
group <- rep(1:2, each = N%/%2)
x <- rnorm(N)
y <- sqrt(.2) * x + sqrt(.8) * rnorm(N)
x[group==2] <- x[group==2]+5
splitByGroup <- split(cbind.data.frame(x=x,y=y), group)
modelAll <- lm(y~x)
modelG1 <- lm(y~x, data=splitByGroup[[1]])
modelG2 <- lm(y~x, data=splitByGroup[[2]])
plot(y~x, col = group + 1)
abline(coef=modelAll$coef, col = 4, lwd = 2)
abline(coef=modelG1$coef, col = 2, lwd = 2)
abline(coef=modelG2$coef, col = 3, lwd = 2)
legend("topleft", col = 2:4, lwd=2,
legend = paste("Slope for", c("group 1", "group 2", "both groups"), "=",
round(c(modelG1$coef[2],modelG2$coef[2],modelAll$coef[2]),3)))
在这里,整体斜率减弱,因为我们没有考虑group。但是,如果我们group在我们的模型中包含,我们可以恢复组内斜率的加权平均值(如您所见):
modelAll2 <- lm(y~x + group)
summary(modelAll2)$coef
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.3079814 0.45867941 2.851624 5.315169e-03
x 0.3730811 0.08017352 4.653420 1.034285e-05
group -1.5352505 0.42212272 -3.636977 4.440556e-04
这是可能的,因为不同数据子集的不同分布可能具有不同的性质。如果没有图表,这将很难描述,但想象一下正方形左上角的一小团点。让我们假设这些点紧跟雪茄形点云,这表明存在正相关。现在,想象另一个重复的点云,但在正方形的右下角。让我们保持点云的距离足够远,这样它们就不会真正重叠。
如果您分别对每个云进行回归,您将获得一个正斜率。但是,如果您将数据集合并为一个(并忽略分组结构),那么聚合回归的斜率将是负数。
这个例子比你所描述的要极端一些,但同样的一般理论可以解释你所观察到的。