您所看到的被称为“向均值回归”并且完全可以预期。任何时候数据中存在可变性(并且您的数据看起来像是一堆),那么预测值平均将介于总体平均值和观察值之间。您创建的结果与预测值的图并不常见,由于您所看到的原因,它往往会让人感到困惑而不是启发。更常见的是根据残差绘制预测值,因为如果模型合理,该图将显示更多随机性。
编辑以解决下面的评论
csgillespie 的示例因在原始问题包含 4 个预测变量时仅包含 1 个预测变量而受到批评。下面是一些快速 R 代码,可以运行以显示具有 4 个预测变量的相同模式:
# simulated data, no relationship
df1 <- data.frame(y=rnorm(100), x1=rnorm(100), x2=rnorm(100),
x3=rnorm(100), x4=rnorm(100))
fit1 <- lm( y ~ ., data=df1 )
#plot(df1$y, fitted(fit1), asp=1)
scatter.smooth(df1$y, fitted(fit1), asp=1)
abline(0,1)
abline(h=mean(fitted(fit1)), col='lightgrey')
plot(df1$y, resid(fit1))
abline(h=0)
plot(fitted(fit1), resid(fit1))
abline(h=0)
# simulated data, relationship
library(MASS)
df2 <- as.data.frame( mvrnorm(100, mu=1:5, Sigma= matrix(.7,5,5)+diag(rep(.3,5))))
names(df2) <- c('y','x1','x2','x3','x4')
fit2 <- lm( y ~ ., data=df2 )
#plot(df2$y, fitted(fit2), asp=1)
scatter.smooth(df2$y, fitted(fit2), asp=1)
abline(0,1)
abline(h=mean(fitted(fit2)), col='lightgrey')
plot(df2$y, resid(fit2))
abline(h=0)
plot(fitted(fit2), resid(fit2))
abline(h=0)
# real data
fit3 <- lm( Murder~Population+Income+Illiteracy+Frost, data=as.data.frame(state.x77))
scatter.smooth( state.x77[,'Murder'], fitted(fit3), asp=1)
abline(0,1)
abline(h=mean(fitted(fit3)), col='lightgrey')
plot(state.x77[,'Murder'], resid(fit3))
abline(h=0)
plot(fitted(fit3), resid(fit3))
abline(h=0)
请注意,这些图看起来与原始问题中的图非常相似。
另请注意,在原始结果与拟合值的图中,点(以及它们的趋势)倾向于落在线和平均线之间。这是回归平均值的想法,最初由 Galton See Here描述。这些点并不像原始海报假设的那样随机散布在线上,如果没有回归均值会发生什么,而是它们沿着代表y=xy=xy=x线和整体平均线,正如高尔顿所预测的那样。术语回归均值(和变体)有时用于其他概念(一些与原始概念的关系比其他概念更接近),如上一篇文章所示,这可能是一些混淆的来源。