2016-05-09 8 views
0

私は25の異なるポートフォリオについて同様の回帰を行い、25回すべての回帰のR^2を求めようとしています。もちろん、私は本当に時間がかかる(それは100以上だ場合を想像することはできません)で、すべてのr.squareを取得するために回帰回帰と行列形式の要約統計の取得

P1<-lm(formula = df[1:24,1] - RiskFree ~ Mkt.RF + SMB + HML, data = df) 
summary(P1)$r.squared 

25回を実行して、それらを個別に行うことができます。私はループをすることを考え、ここで私は立ち往生しています。 $演算子は、原子のベクトルに加えて は無効です:警告$ r.squared - これは私が要約するとエラーに

エラーを返す

sequence<-seq(1,25) 
P<-cbind(sequence) 
for(i in 2:26){ 
P[i-1]<-lm(formula = df[1:24,i] - RiskFree ~ Mkt.RF + SMB + HML, data = df) 
return(summary(P[i-1])$r.squared) 

([1 i]がPを)やったことありますメッセージ: P [i - 1] < - lm(数式= df [1:24、i] - RiskFree〜Mkt.RF + SMB +: 交換するアイテムの数が代替長の倍数ではない

私は自分のR^2を入手して、それを行列形式にしますか?

(編集)これは、私はあなたがループを必要としない

df <- "Year SMALL.LoBM ME1.BM2 ME1.BM3 ME1.BM4 Mkt.RF SMB HML RiskFree 
     1991 -4.61 22.74  16.42 27.89 37.88 2.59 13.60 23.22 
     1992 8.20 20.59  22.90 25.94 40.05 6.66 15.14 16.04 
     1993 1.20 12.41  19.27 21.39 37.59 5.46 17.19 23.40 
     1994 -22.67 -0.56  -3.86 1.34  1.93 -3.38-2.28 0.25  
Data <- read.table(text=df, header = TRUE) 
+0

作業しているデータの再現可能な例を提供できますか? – Sotos

答えて

1

に取り組んでいたサンプルデータです。代わりにlmは、複数の応答変数を受け入れることを使用します。

fits <- summary(lm(cbind(mpg, hp) ~ wt, data = mtcars)) 
#or summary(lm(as.matrix(mtcars[, c(1, 4)]) ~ wt, data = mtcars)) 
sapply(fits, `[[`, "r.squared") 
#Response mpg Response hp 
# 0.7528328 0.4339488 

これだけではなく、よりエレガントなだけでなく、より効率的です。

+0

どうもありがとうございました。効率的でエレガント! – Donkeykongy