我有一个(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))
答案 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]
}
}