2016-05-09 57 views
0

我試圖對25個不同的投資組合進行類似的迴歸,然後找到所有25個迴歸的R^2。很顯然,我可以通過運行循環迴歸並獲得矩陣形式的彙總統計

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

25次獲得所有r.square這是非常耗時的(無法想象,如果是100或更高)單獨做他們。我想到做一個循環,這裏是我卡住的地方。這是我做過什麼

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) 

返回錯誤

錯誤彙總(P [I - 1])$ ​​r.squared: $操作是原子向量 此外無效:警告消息: 在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