1

(kxn) 行列があります。最初に、列 1 を 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 を 1 つおきの列で線形回帰し、次に列 3 と続き、係数のみを抽出することです。

出力は、OLS 単変量係数の正方行列になります。相関行列に似ていますが、私が興味を持っているのはベータ係数です。

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して、1 つの項の他のすべての項の係数を一度に取得し、ループを 1 つだけ実行することもできます。

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 に答える