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

时间:2016-12-07 15:04:13

标签: r plot regression multiple-columns linear

我有一个包含多个列的列表。最左边的列是我的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相交。感谢

1 个答案:

答案 0 :(得分:0)

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

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

使用ggplot2绘制数据和回归线。使用melt包中的reshape2来生成数据。这有助于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)

enter image description here