在特定范围内的多列上绘制线性回归
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)
我有一个包含多列的列表。最左边的列是我的 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)