为 R 中 table 的每一行生成一个新的回归方程

Generating a new regression equation for every row of a table in R

我是 R 的新手,在下面的 link 中找到了 post,这与我想要完成的事情类似。

Calculating a linear trend line for every row of a table in R

我想做的是同一件事,但为两个不同的 tables 的每一行创建一个新的回归方程。

下面是一些示例数据。

Closesday1 <- c(2,6,10)
Closedays2 <- c(3,7,15)
Closedays3 <- c(5,8,20)

dataY<-data.frame(Closesday1,Closedays2,Closedays3)
Dep<-t(dataY)


Valuesday1 <- c(4,6,8)
Valuesday2 <- c(5,8,11)
Valuesday3 <- c(7,9,14)
dataX<-data.frame(Valuesday1,Valuesday2,Valuesday3)
Ind<-t(dataX)

对于 Dep,我们得到:

       [,1] [,2] [,3]
Closesday1    2    6   10
Closedays2    3    7   15
Closedays3    5    8   20

对于 Ind,我们得到:

       [,1] [,2] [,3]
Valuesday1    4    6    8
Valuesday2    5    8   11
Valuesday3    7    9   14

我想做的是为变量 1,2 和 3 创建一个回归方程(线性开始),取关闭日 1 值并针对变量 1,2 和 3(所以 2,6, 10 对 4,6,8)。将为 closesday2 与 valuesday2 计算一个新的回归方程,为 closesday3 与 valuesday3 等计算另一个回归方程...然后我想将输出包含在新的 table 中,并为每个列添加截距和斜率。

希望这是有道理的。

提前感谢您的帮助!

您可以将这些步骤合二为一以提高效率:

df <- data.frame(t(sapply(seq(nrow(Dep)), function(x) coeffs <- lm(Dep[x, ] ~ Ind[x, ])$coefficients)))

要将系数和拟合值放入单个数据框中,试试这个:

df <- do.call(rbind, lapply(seq(nrow(Dep)), function(x) {fit <- lm(Dep[x, ] ~ Ind[x, ]); c(fit$coefficients, fit$fitted.values, `3` = rep(NA, (ncol(Dep) - length(fit$fitted.values))))}))

df
     (Intercept) Ind[x, ]        1        2        3
[1,]   -6.000000 2.000000 2.000000 6.000000       NA
[2,]   -3.666667 1.333333 3.000000 7.000000       NA
[3,]  -10.923077 2.192308 4.423077 8.807692 19.76923

请注意,每行中的 NA 会创建缺失的拟合值。我只是在结果行中用 NA 填充最后一个。