R中每个变量具有不同预测变量的多元回归
Multivariate Regression with different predictors for each variable in R
我有一个时间序列矩阵 Y
。行数是观察数。我还有一个预测矩阵 X
。我想在特定于这些列的预测变量上回归 Y
的列。
1 和 0 的逻辑矩阵显示第 i
个变量是否应该在第 j
个预测变量上回归。
例如:
y1 <- c(1, 2, 3, 5, 7, 3, 2, 1)
y2 <- c(5, 1, 3, 1, 3, 4, 5, 3)
y3 <- c(1, 3, 4, 5, 1, 2, 1, 2)
x1 <- c(2, 5, 4, 2, 1, 3, 6, 7)
x2 <- c(1, 5, 1, 3, 4, 2, 1, 3)
Y <- cbind(y1, y2, y3)
X <- cbind(x1, x2)
logical <- matrix(c(1,1,0,1,0,1), 3, 2)
lm <- lm(Y ~ ??? - 1)
此处,y1
应在 x1
和 x2
上回归,y2
仅在 x1
上回归,y3
在 [=18 上回归=] 仅。
我曾尝试在 lm
函数中指定模型,但未能成功。在 $coefficients
结果中,当变量未在第 j
个预测变量上回归时,我想要“0”。
是否可以在没有大量脏循环的情况下这样做?
遗憾的是,您不能使用单一公式来完成。您必须使用 for
循环或 lapply()
来完成这项工作。试试这个:
y1 <- c(1, 2, 3, 5, 7, 3, 2, 1)
y2 <- c(5, 1, 3, 1, 3, 4, 5, 3)
y3 <- c(1, 3, 4, 5, 1, 2, 1, 2)
x1 <- c(2, 5, 4, 2, 1, 3, 6, 7)
x2 <- c(1, 5, 1, 3, 4, 2, 1, 3)
flst <- c(y1 ~ x1 + x2, y2 ~ x1, y3 ~ x2) ## formula list
lmlist <- lapply(flst, lm) ## linear model list
您首先将所有公式收集在一个列表中,然后使用 lapply
循环遍历它们。最后,您将在 lmlist
中拥有三个线性模型。使用lmlist[[1]]
提取第一个。
lmlist[[1]]
#Call:
#FUN(formula = X[[i]])
#Coefficients:
#(Intercept) x1 x2
# 4.2972 -0.6521 0.4592
我有一个时间序列矩阵 Y
。行数是观察数。我还有一个预测矩阵 X
。我想在特定于这些列的预测变量上回归 Y
的列。
1 和 0 的逻辑矩阵显示第 i
个变量是否应该在第 j
个预测变量上回归。
例如:
y1 <- c(1, 2, 3, 5, 7, 3, 2, 1)
y2 <- c(5, 1, 3, 1, 3, 4, 5, 3)
y3 <- c(1, 3, 4, 5, 1, 2, 1, 2)
x1 <- c(2, 5, 4, 2, 1, 3, 6, 7)
x2 <- c(1, 5, 1, 3, 4, 2, 1, 3)
Y <- cbind(y1, y2, y3)
X <- cbind(x1, x2)
logical <- matrix(c(1,1,0,1,0,1), 3, 2)
lm <- lm(Y ~ ??? - 1)
此处,y1
应在 x1
和 x2
上回归,y2
仅在 x1
上回归,y3
在 [=18 上回归=] 仅。
我曾尝试在 lm
函数中指定模型,但未能成功。在 $coefficients
结果中,当变量未在第 j
个预测变量上回归时,我想要“0”。
是否可以在没有大量脏循环的情况下这样做?
遗憾的是,您不能使用单一公式来完成。您必须使用 for
循环或 lapply()
来完成这项工作。试试这个:
y1 <- c(1, 2, 3, 5, 7, 3, 2, 1)
y2 <- c(5, 1, 3, 1, 3, 4, 5, 3)
y3 <- c(1, 3, 4, 5, 1, 2, 1, 2)
x1 <- c(2, 5, 4, 2, 1, 3, 6, 7)
x2 <- c(1, 5, 1, 3, 4, 2, 1, 3)
flst <- c(y1 ~ x1 + x2, y2 ~ x1, y3 ~ x2) ## formula list
lmlist <- lapply(flst, lm) ## linear model list
您首先将所有公式收集在一个列表中,然后使用 lapply
循环遍历它们。最后,您将在 lmlist
中拥有三个线性模型。使用lmlist[[1]]
提取第一个。
lmlist[[1]]
#Call:
#FUN(formula = X[[i]])
#Coefficients:
#(Intercept) x1 x2
# 4.2972 -0.6521 0.4592