ggplot2:绘制具有不同截距但相同斜率的回归线

6

我希望能够绘制拥有不同截距但相同斜率的回归线。

使用下面的ggplot2代码,我可以绘制不同截距和不同斜率的回归线。但是我无法找出如何绘制具有不同截距但相同斜率的回归线。

library(ggplot2)
    ggplot(data=df3, mapping=aes(x=Income, y=Consumption, color=Gender)) + geom_point() + 
    geom_smooth(data=df3, method = "lm", se=FALSE, mapping=aes(x=Income, y=Consumption))

Consumption <- c(51, 52, 53, 54, 56, 57, 55, 56, 58, 59, 62, 63)
Gender <- gl(n = 2, k = 6, length = 2*6, labels = c("Male", "Female"), ordered = FALSE)
Income <- rep(x=c(80, 90, 100), each=2)
df3 <- data.frame(Consumption, Gender, Income)
df3

# Regression with same slope but different intercepts for each Gender
fm1 <- lm(formula=Consumption~Gender+Income, data=df3)
summary(fm1)

Call:
lm(formula = Consumption ~ Gender + Income, data = df3)

Residuals:
    Min      1Q  Median      3Q     Max 
-0.8333 -0.8333  0.1667  0.1667  1.1667 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept)  26.83333    2.54557   10.54 2.30e-06 ***
GenderFemale  5.00000    0.45812   10.91 1.72e-06 ***
Income        0.30000    0.02805   10.69 2.04e-06 ***
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.7935 on 9 degrees of freedom
Multiple R-squared:  0.9629,    Adjusted R-squared:  0.9546 
F-statistic: 116.7 on 2 and 9 DF,  p-value: 3.657e-07

为什么不在ggplot之外计算,然后使用lm的结果添加geom_line呢?技术上来说,在你的模型中并不存在两个不同的截距值,而是对虚拟变量GenderFemale有一个额外的偏移量。 - mts
可能是一个统计问题。你的ggplot代码使用color=Gender创建了每个性别的线性回归模型。因此,该模型将确定它们是否具有相同的斜率和/或相同的截距。如果实际上具有相同的斜率和不同的截距,则一定会绘制出来。为什么要强制两个性别具有相同的斜率呢? - AntoniosK
1个回答

8
为什么不使用lm函数的结果在ggplot外计算回归?
# Regression with same slope but different intercepts for each Gender
fm1 <- lm(formula=Consumption~Gender+Income, data=df3)
df3 = cbind(df3, pred = predict(fm1))

ggplot(data=df3, mapping=aes(x=Income, y=Consumption, color=Gender)) + geom_point() + 
  geom_line(mapping=aes(y=pred))

产生相同的斜率和不同的截距:

enter image description here

从技术上讲,正如您在模型中所看到的,没有两个不同的截距,而是对虚拟变量GenderFemale的额外偏移。

编辑:包括predict以简化,感谢@aosmith的建议。


2
你可以使用 predict 函数和你的 lm1 对象来简化这个过程,可以使用一个新的数据集 如此处所示,或者将预测值直接添加到原始数据集中进行绘图 就像这个答案中所示 - aosmith
在您上面的示例中,运行fm1s <- summary(fm1)有何作用? - b222
1
@bpace感谢您指出,我在aosmith建议的更改后没有使用它。 - mts

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接