2016-11-15 17 views
1

私はlapplyを使って株式のリストをCAPMを使ってベータ計​​算に成功させる次のコードを持っています。しかし、各株式がモデルを実行した後、回帰係数(ベータ)を別のリストに追加する(またはcapmリストから抽出する)必要があります。私の問題は、appappが私のラップ関数内で動作しないということです。データリストリストに係数があることを期待しています。リストに結果を追加する

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)) 
}) 

答えて

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あなたdatalistdatalistは空のリストである、あなたの関数の呼び出しごとに(記号をごサイクルとして結果を追加していないため、あなたの問題が発生)。 lapply操作の結果を「結合」(rbind)したいとします。それを行う一般的な方法はdo.callです。

+0

ありがとうございます。私はループの外でdo.call関数を使って周りを回っていましたが、動作させることができませんでした。キーは係数(capm)ラインでした。素晴らしい学習経験。 –

関連する問題