【问题标题】:Different behaviour lm in stat_smoothstat_smooth 中的不同行为 lm
【发布时间】:2015-10-25 18:11:53
【问题描述】:

this 问题中,有人询问是否可以根据线性回归线更改ggplot2 图中的颜色。

建议的解决方案有效,图上方和下方的点颜色不同。

library(ggplot2)

set.seed(2015)
df <-  data.frame(x = rnorm(100),
                  y = rnorm(100))


# Fit linear regression
l = lm(y ~ x, data = df)

# Make new group variable based on residuals
df$group = NA
df$group[which(l$residuals >= 0)] = "above"
df$group[which(l$residuals < 0)] = "below"

# Make the plot
ggplot(df, aes(x,y)) +
  geom_point(aes(colour = group)) +
  geom_smooth(method = "lm", formula = y ~ x)

但我想为y-1 做回归。如this 问题中所述。

# Fit linear regression
l = lm(y - 1 ~ x, data = df)

# Make new group variable based on residuals
df$group = NA
df$group[which(l$residuals >= 0)] = "above"
df$group[which(l$residuals < 0)] = "below"

# Make the plot
ggplot(df, aes(x,y)) +
  geom_point(aes(colour = group)) +
  geom_smooth(method = "lm", formula = y - 1 ~ x)

这不是我所期望的。在我看来,stat_smooth 达到了预期。 lm 但是对于 y ~ xy - 1 ~ x 给出相同的结果

我在这里错过了什么?

【问题讨论】:

  • 您预计会发生什么?请注意,第二个模型的截距向下移动了 1 个单位 - 这就是响应变量中存在“位置偏移”时发生的情况。
  • 因为你的回归有一个截距,所以实际拟合在所有情况下都是相同的(对应的残差也是)。对于您想要的,根据与 -1 而不是 0 相比的残差来计算组。
  • 谢谢,当然在这种情况下我必须用-1计算残差。

标签: r ggplot2 lm


【解决方案1】:

如果您想根据线的位置对点进行着色,您可以尝试将实际值与预测值进行比较,而不是使用残差

df$group = NA
df$group[df$y>predict(l)] = "above"
df$group[df$y<predict(l)] = "below"

【讨论】:

  • 我认为你是 -1 而不是 1,因为在问题中它是 y - 1
  • @jeroen81 我不明白你的评论。我在这里不做任何算术。我只是将原始比例上的 y 与拟合模型的预测值进行比较。那是变量l 而不是数字1
  • 对不起,我的小屏幕上看起来像 1。
猜你喜欢
  • 2016-01-07
  • 1970-01-01
  • 2020-09-12
  • 2021-06-09
  • 2019-06-01
  • 2012-10-26
  • 1970-01-01
  • 2012-02-09
  • 2014-03-11
相关资源
最近更新 更多