为什么geom_smooth中的斜率不同取决于R中的变量顺序?

问题描述 投票:1回答:1

当我在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

r ggplot2 linear-regression lm
1个回答
2
投票

The short answer

当你调用geom_smooth()时,它会计算y = a + bx形式的简单线性回归(或OLS回归)的斜率。

考虑到y变量的值,OLS就是试图提出x变量的最佳预测。考虑到x变量的值,这与尝试提出y变量的最佳预测是不同的目标。

因此,如果您将aes(x = v1, y = v2)的顺序更改为aes(x = v2, y = v1),那么您将使用geom_smooth()来实现两个不同的,不同的目标。

Illustration

想象一下,您有以下数据集:

enter image description here

当您运行y ~ x的OLS回归时,您会得到以下模型

y = 0.167 + 1.5*x

这通过进行以下预测来优化y的预测,这些预测具有相关的错误:

enter image description here

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

当你运行x ~ y的OLS回归时,你想出了一个不同的模型:

x = -0.07 + 0.64*y

这通过进行以下预测以及相关错误来优化x的预测。

enter image description here

同样,这是最优的,即最右边的列的值的总和尽可能小(等于0.071)。

现在,假设您试图使用代数反转第一个模型y = 0.167 + 1.5*x,为您提供模型x = -0.11 + 0.67*x

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

enter image description here

最右边一列中的值之和是0.074,它大于你在y上回归x得到的模型的相应和,即x ~ y模型。换句话说,“倒置”模型比简单的x ~ y回归模型做得更差。

© www.soinside.com 2019 - 2024. All rights reserved.