我正在尝试对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(formula = 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)
您不需要循环。而是使用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
这不仅更优雅,而且效率更高。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句