在特定范围内的多列上绘制线性回归

Plot linear regression on multiple columns within specific range

我有一个包含多列的列表。最左边的列是我的 x 轴数据,而其余的是各种 y 数据集。

我想为这些列中的每一列生成线性回归,但只是针对 x 中的特定范围,然后强制线性回归通过 0,0。最后提取所述线性回归的线斜率。下面是我的一些数据的示例。

    x       y1       y2       y3       y4
1  2.495   -1e-04   -1e-03   -1e-04    0e+00
2  2.995   -2e-04   -7e-04   -2e-04    0e+00
3  3.495    2e-04   -2e-04    1e-04    2e-04
4  3.995    0e+00   -3e-04    0e+00    1e-04
5  4.495    0e+00   -3e-04    0e+00    0e+00
6  4.995    0e+00   -3e-04    0e+00    1e-04
7  5.495    1e-04   -2e-04    0e+00    1e-04
8  5.995   -1e-04   -1e-04    0e+00    3e-04
9  6.495    1e-04    1e-04    2e-04    3e-04
10 6.995    1e-04    0e+00    0e+00    3e-04

例如,这里我将获得 x 范围的线性回归,例如第 3 行到第 10 行,强制回归与 0,0 相交。最后获得 y1、y2 等线性回归的斜率。

我知道 abind 和 lm 函数,但只能在不强制 0,0 相交的情况下绘制单一回归。谢谢

没有截距的回归模型强制回归线通过原点。这在 R 中通过向模型添加 -1 来实现。要获得您想要的 x 范围,只需将观察值子集化到该范围内并使用 lapply 循环遍历不同的自变量:

dat2 <- dat[3:9,]
fits <- lapply(dat2[,-1], function(x) lm(x ~ dat2[,1] - 1))

ggplot2 绘制数据和回归线。使用 reshape2 包中的 melt 使数据变长。这有助于 ggplot2 分解类别中的数据:

library(ggplot2); library(reshape2)
mdat <- melt(dat2,id="x")
ggplot(data = mdat) + 
  geom_point(aes(y = value, x = x, color=variable)) +
  geom_smooth(data=mdat,aes(x=x,y=value,color = variable),formula = y ~ x - 1,
              method = "lm", se = F)