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 应在 x1x2 上回归,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