计算矩阵列的每种可能排列的线性回归

时间:2012-09-08 13:11:32

标签: r

我有一个(k x n)矩阵。我最初设法使用每列其他列线性回归(使用lm函数)第1列,并仅提取系数。

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单变量系数的方阵。类似于相关矩阵,但它是我感兴趣的β系数。

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

最初需要成为

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

2 个答案:

答案 0 :(得分: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,]
})

答案 1 :(得分: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]
  }
}