You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

R语言线性模型替代t检验分析基因表达数据及ggplot可视化代码解析问询

为什么线性模型可视化时geom_abline的截距要减去斜率?

这问题问得特别好,其实核心就是模型里的分组编码和图中x轴显示的数值不一样导致的小适配问题,我用大白话给你掰明白:

先理清楚两个关键的"X"

  1. 你的线性模型里的X:你把group 1编码为X=0,group 2编码为X=1,所以模型是:

    Y = β₀ + β₁*X
    

    代入数值的话:

    • group1(X=0)的预测值是β₀=2.75
    • group2(X=1)的预测值是β₀+β₁=2.75+1.58=4.33
      这部分你已经理解,红色点也对应得很对。
  2. 你的ggplot图里的x轴:图里的group显示的是12,不是模型里的01!这就是所有困惑的源头。

为什么要给geom_abline的截距减斜率?

geom_abline用的是标准直线公式:Y = 截距a + 斜率b*x,这里的x是图中x轴的数值(也就是1和2),不是模型里的X(0和1)。我们需要把模型的方程转换成适配图中x轴的版本:

  • 当图中x=1(对应模型X=0),Y必须等于2.75
  • 当图中x=2(对应模型X=1),Y必须等于4.33

首先,斜率是不变的:x每增加1,Y增加1.58,所以斜率b=β₁=1.58。

现在算截距a:把x=1,Y=2.75代入直线公式:

2.75 = a + 1.58*1
a = 2.75 - 1.58 = β₀ - β₁

这就是代码里intercept = coefficients(mod1)[1] - coefficients(mod1)[2]的由来!

换个更直观的说法

你可以把模型里的X当成「从group1出发的偏移量」:X=0就是在group1,X=1就是往group2偏移1步。但图里的x轴是直接显示「组号」1和2,相当于把偏移量的起点从0改成了1。

要让直线在x=1的位置刚好对应group1的均值,就得把原来的直线往左「挪」1个单位。直线往左挪1个单位的话,每个x对应的Y都会减少一个斜率值(因为斜率是每走1个x增加的Y,往左走1,Y就少一个斜率),反映在截距上就是减去斜率。

验证一下

用这个截距和斜率画的线:

  • 当x=1时:Y=(β₀-β₁)+β₁*1 = β₀=2.75,正好是group1的均值
  • 当x=2时:Y=(β₀-β₁)+β₁*2 = β₀+β₁=4.33,正好是group2的均值
    完全和你画的红色点对齐,完美匹配模型的预测结果!

内容的提问来源于stack exchange,提问作者JohnJ

火山引擎 最新活动