为什么根据R中的变量顺序,使geom_smooth的斜率不同?

时间:2019-02-26 17:51:09

标签: r ggplot2 linear-regression lm

当我在ggplot中绘制数据并添加回归线时,根据定义为x和y的变量,我得到不同的斜率。我期望这些情节能简单地反映出来,但事实并非如此。 我想念什么吗?

# create example data
v1 <- c(0.5, 0.8, 0.8, 0.8, 0.7, 0.9, 0.8, 0.7, 0.8, 0.7, 0.5, 0.6, 0.6, 0.6, 0.7,
    0.3, 0.5, 0.8, 0.9, 0.5, 0.8, 0.9, 0.8, 0.7, 0.6, 0.6, 0.8, 0.6, 0.4, 0.6)
v2 <- c(0.6, 0.9, 0.8, 0.8, 0.7, 0.8, 0.9, 0.3, 0.9, 0.7, 0.4, 0.7, 0.6, 0.7, 0.7,
    0.0, 0.5, 0.7, 0.7, 0.4, 0.8, 0.8, 0.8, 0.8, 0.7, 0.4, 0.8, 0.5, 0.6, 0.6)
test1 <- data.frame(cbind(v1,v2))


# plot once with v1 as x and v2 as y and visa versa
ggplot(test1, aes(x=v1, y=v2)) +
  geom_point() +
  geom_smooth(data= test1, method=lm,aes(x=v1, y=v2))  + 
  xlim(c(0,1))+ylim(c(0,1)) +
  geom_abline(col = "black")

v1 vs v2

ggplot(test1, aes(x=v2, y=v1)) +
  geom_point() +
  geom_smooth(data= test1, method=lm,aes(x=v2, y=v1))  +
  xlim(c(0,1))+ylim(c(0,1)) + 
  geom_abline(col = "black")

v2 vs v1

1 个答案:

答案 0 :(得分:2)

简短答案

调用ClaimsPrincipal时,它将计算形式为geom_smooth()的简单线性回归(或OLS回归)的斜率。

OLS就是在给定y = a + bx变量值的情况下,试图对y变量进行最佳预测。在给定x变量的值的情况下,这与尝试对x变量进行最佳预测是一个不同的目标。

因此,如果将y的顺序更改为aes(x = v1, y = v2),则说明您正在使用aes(x = v2, y = v1)完成两个不同的目标。

插图

假设您具有以下数据集:

enter image description here

当您运行geom_smooth()的OLS回归时,会想到以下模型

y ~ x

这通过进行以下与错误相关的预测来优化y = 0.167 + 1.5*x 的预测:

enter image description here

在最右边一列中的值之和(即平方和)应尽可能小的意义上,OLS回归的预测是最佳的。

运行y的OLS回归时,会得出不同的模型:

x ~ y

这通过进行以下带有相关误差的预测来优化x的预测。

enter image description here

同样,从最右边一列的值之和尽可能小(等于x = -0.07 + 0.64*y )的角度来看,这是最佳选择。

现在,假设您尝试使用代数反转第一个模型0.071,为模型y = 0.167 + 1.5*x

这将为您提供以下预测和相关错误:

enter image description here

最右边一列中的值之和为x = -0.11 + 0.67*x,大于从对y进行x回归得到的模型(即0.074模型)的相应总和。换句话说,“反转”模型比简单的x ~ y回归模型做得要差。