我有以下代码通过CAPM成功计算beta,通过使用lapply获取股票列表。但是,我希望在每个库存通过模型后,将回归系数(beta)附加到单独的列表中(或从capm列表中提取它们)。我的问题是append在我的lapply函数中不起作用。我希望datalist列表具有系数。
library(qmao)
library(broom)
startDate = as.Date("2013-10-01") #Specify what date to get the prices from
endDate = as.Date("2016-09-30")
symbols <- c('AAPL','AMZN')
data.env <- new.env()
getSymbols(symbols, env = data.env ,from= startDate ,to= endDate)
pf <- PF(symbols,env = data.env,silent=TRUE) # consolidated xts-object
pfMth <- pf[endpoints(pf,on='months'),] # get monthly endpoints
pfMthRets <- ROC(pfMth,type='discrete')
pfMthRets <- na.omit(pfMthRets)
tail(pfMthRets)
plot(pfMthRets$AAPL)
getSymbols("^gspc",from = startDate, to = endDate)
GSPC_Adjusted = GSPC$GSPC.Adjusted
GSPC.mrtn <- monthlyReturn(GSPC$GSPC.Adjusted)
GSPC.mrtn <- GSPC.mrtn [-1,]
names(GSPC.mrtn)[1] <- "SP"
datalist = list()
lapply(symbols, function(symbols) {
input <- as.formula(paste("pfMthRets$",symbols, "~ GSPC.mrtn$SP" ))
capm <- lm( input)
datalist <- append(datalist, coefficients(capm))
})
答案 0 :(得分:1)
请改为尝试:
res <- lapply(symbols, function(symbols) {
input <- as.formula(paste("pfMthRets$",symbols, "~ GSPC.mrtn$SP" ))
capm <- lm( input)
coefficients(capm)
})
res2 <- do.call(rbind, res)
# > res2
# (Intercept) GSPC.mrtn$SP
# [1,] 0.006102159 1.523730
# [2,] 0.017761587 1.509065
您的问题出现是因为在lapply
内datalist
,当您在符号中循环时,datalist
不会附加结果(在您的函数的每次调用中,rbind
都是一个空列表)。你想&#34;结合&#34; (lapply
)do.call
次操作的结果。一种常见的方法是使用{{1}}。