1

我有一个(kxn)矩阵。我最初设法将第 1 列与其他列进行线性回归(使用 lm 函数),并仅提取系数。

fore.choose <- matrix(0, 1, NCOL(assets))
for(i in seq(1, NCOL(assets), 1))
{

  abc <- lm(assets[,1]~assets[,i])$coefficients
  fore.choose[1,i] <- abc[2:length(abc)]

}

系数被放置在fore.choose矩阵中。

我现在需要做的是将第 2 列与其他列进行线性回归,然后将第 3 列等以此类推,并仅提取系数。

输出将是 OLS 单变量系数的方阵。有点类似于相关矩阵,但它是我感兴趣的 beta 系数。

fore.choose <- matrix(0, 1, NCOL(assets))

最初需要成为

fore.choose <- matrix(0, NCOL(assets), NCOL(assets))
4

2 回答 2

6

我只需使用 直接从相关矩阵计算系数beta = cor(x,y)*sd(x)/sd(y),如下所示:

# set up some sample data
set.seed(1)
d <- matrix(rnorm(50), ncol=5)

# get the coefficients
s <- apply(d, 2, sd)
cor(d)*outer(s, s, "/")

您还可以使用lsfit一次获取所有其他项的系数,然后只需执行一个循环:

sapply(1:ncol(d), function(i) {
  coef(lsfit(d[,i], d))[2,]
})
于 2012-09-08T13:33:44.657 回答
1

我确信一定有比嵌套循环更优雅的方式。

fore.choose <- matrix(NA, NCOL(assets), NCOL(assets))
abc <- NULL

for(i in seq_len(ncol(assets))){ # loop over "dependant" columns
  for(j in seq_len(ncol(assets))){ # loop over "independant" columns
     abc <- lm(assets[,i]~assets[,j])$coefficients 
     fore.choose[i,j] <- abc[-1]
  }
}
于 2012-09-08T13:35:11.133 回答