如何计算数据集的所有列上的回归和提取参数

时间:2015-12-03 11:37:39

标签: r lm

我想计算特定数据集的所有列(或选定列)的线性回归。第一列表示回归的X轴,另一列表示每个主题的响应。第二步是为每个特定主题提取回归的系数参数(线性或逻辑)。 实际上,我使用lm(或glm)手动为每列操作并将系数提取到特定变量和数据集。

使用lm的示例:

dataset <- as.data.frame(matrix(c(1,1,
3,7,2,1,4,5,3,2,4,6,4,2,5,8,5,5,9,9,6,4,
12,10,7,6,15,11,8,6,15,15,9,8,16,10,10,9,18,9,11,12,
20,12,12,15,21,16,13,18,22,15,14,22,21,10,15,29,24,12)
,nrow=15, ncol=4,byrow=TRUE))
colnames(dataset) <- c("X","Sj1","Sj2","Sj3")

输出:

dataset
    X Sj1 Sj2 Sj3
1   1   1   3   7
2   2   1   4   5
3   3   2   4   6
4   4   2   5   8
5   5   5   9   9
6   6   4  12  10
7   7   6  15  11
8   8   6  15  15
9   9   8  16  10
10 10   9  18   9
11 11  12  20  12
12 12  15  21  16
13 13  18  22  15
14 14  22  21  10
15 15  29  24  12

回归:

attach (dataset)
mod1 <- lm(Sj1~X)
mod2 <- lm(Sj2~X)
mod3 <- lm(Sj3~X)

Intercept <- 0
Intercept[1] <- mod1$coefficients[[1]]
Intercept[2] <- mod2$coefficients[[1]]
Intercept[3] <- mod3$coefficients[[1]]

Slope <- 0
Slope[1] <- mod1$coefficients[[2]]
Slope[2] <- mod2$coefficients[[2]]
Slope[3] <- mod3$coefficients[[2]]

data.frame(Intercept,Slope,row.names=colnames(dataset)[-1])

,最终输出为

    Intercept     Slope
Sj1 -4.580952 1.7392857
Sj2  1.104762 1.6035714
Sj3  6.104762 0.5285714

有一个代码可以根据列数自动执行它吗?我尝试了applyfunction没有结果。

这样做的最佳方式是什么?

1 个答案:

答案 0 :(得分:3)

lm接受LHS上的矩阵。请参阅文档。

f <- as.formula(paste0("cbind(", paste(names(dataset)[-1], collapse = ","), ") ~ X"))
mods <- lm(f, data = dataset)
coef(mods)
#                  Sj1      Sj2       Sj3
#(Intercept) -4.580952 1.104762 6.1047619
#X            1.739286 1.603571 0.5285714

PS:你应该养成使用attach的习惯。