【问题标题】:Multivariate Regression with different predictors for each variable in R多元回归,R中每个变量都有不同的预测因子
【发布时间】:2016-11-09 22:05:57
【问题描述】:

我有一个时间序列矩阵Y。行数是观察的数量。我还有一个预测矩阵X。我想在特定于这些列的预测变量上回归 Y 列。 1 和 0 的逻辑矩阵显示 i-th 变量是否应在 j-th 预测器上回归。

例如:

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 上回归,y2x1 上回归,y3x2 上回归。

我试图在lm 函数中指定模型,但我无法这样做。在$coefficients 结果中,当变量未在j-th 预测器上回归时,我想要“0”。

是否可以在没有大量脏循环的情况下这样做?

【问题讨论】:

  • reformulate 函数可能会使这更容易一些。
  • 因为我是一个初学者,我仍然对 lapply() 不太放心。你能提供一个上面的玩具数据集的例子吗?
  • 好的!然后我将使用 for 循环来做到这一点。

标签: r time-series regression linear-regression lm


【解决方案1】:

很遗憾,您不能用一个公式来做到这一点。您必须使用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  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-20
    • 2018-10-19
    • 2013-12-16
    • 2018-03-29
    • 1970-01-01
    • 2018-07-13
    相关资源
    最近更新 更多