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

Posted

技术标签:

【中文标题】ggplot2:绘制具有不同截距但具有相同斜率的回归线【英文标题】:ggplot2: Plotting regression lines with different intercepts but with same slope 【发布时间】:2015-11-01 10:13:18 【问题描述】:

我想绘制具有不同截距但斜率相同的回归线。

使用以下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

【问题讨论】:

为什么不将geom_linelm 的结果相加,即在ggplot 之外进行计算?从技术上讲,正如您在模型中看到的那样,没有两个不同的截距,而是对虚拟 GenderFemale 的额外偏移 可能是统计问题。您的 ggplot 代码使用 color=Gender 所做的是为每个性别创建一个线性回归模型。因此,模型将确定它们是否具有相同的斜率和/或相同的截距。如果它碰巧实际上具有相同的斜率和不同的截距,请确保将其绘制出来。为什么要为两种性别强制使用相同的斜率? 【参考方案1】:

你为什么不用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))

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

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

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

【讨论】:

您可以通过将predict 与您的lm1 对象一起使用来简化这一点,或者使用新数据集as shown here,或者将预测直接添加到原始数据集中以绘制like in this answer 在上述示例中运行fm1s &lt;- summary(fm1) 的实用程序是什么? @bpace 感谢您的指出,在我实施了 aosmith 建议的更改后,这个没有用。

以上是关于ggplot2:绘制具有不同截距但具有相同斜率的回归线的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Python 中有效地生成具有随机斜率和截距的直线?

具有指定斜率的线性回归

ggplot2 如何显示具有相同 y 但不同 x 的两条不同的回归线

制作 ggplot2 图表,其中日期列具有不同的颜色

如何在 Python 中统计比较两种不同线性回归模型的截距和斜率?

在 ggplot2 中创建具有不同数据集的图例