2016-07-07 47 views
1

我有一個時間序列的矩陣Y。行數是觀察的數量。我也有一個預測器矩陣X。我想回歸關於這些列的特定預測變量的列Y。 1和0的邏輯矩陣表示i變量是否應在第j個預測變量上進行迴歸。對於R中的每個變量使用不同預測變量的多元迴歸

例如:

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應在x1x2y2退步只x2x1只和y3

我試圖在lm函數中指定模型,但我一直無法做到。在$coefficients的結果中,當變量沒有在第j個預測變量上回歸時,我想要「0」。

有沒有可能這樣做沒有嚴重的髒循環?

+0

'reconfulate'函數可能會使這一點更容易一些。 – lmo

+0

啊,太糟糕了! ... – Petreius

+0

因爲我是初學者,所以我還是不太樂於lapply()。你能提供一個上面的玩具數據集的例子嗎? – Petreius

回答

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