R支援向量運算,可以大量減少程式內的迴圈使用,在計算統計分析中需要把資料結構拉成水平的去觀察,
筆記Lession 2: 向量運算。
上一篇我們利用Quantmod library取得的vix波動率指數,今天我們來計算台股股王大立光過去10年每天報酬率的常態分配:
首先我們需要簡單的財金與統計知識:
報酬率的常態分配 = 今日收盤股價除以前日收盤股價 取log函數
*常態分配: (Normal Distribution)
1.首先我們先取出股王大立光股票代號3008的資料
從yahoo finance取出來的資料是xts object,需要轉換為data.frame再取出obs使用。
library(quantmod)
getSymbols("3008.TW")
price <- as.data.frame(`3008.TW`[,6])[,1]
View(price) 檢視變數內容
2.先用迴圈的方式取出每日報酬率的常態分配
#取得開始時間
st = Sys.time();
re1 <- numeric(length(price) -1)
for(i in 2 : length(price))
{
re1[i-1] <- log(price[i]/price[i-1])
}
#取得結束時間
ed = Sys.time();
#計算執行時間
print(ed-st)
執行結果:
3.利用向量運算的方式計算常態分配
第一排 2,3,4... n
第二排 1,2,3,4.. ,n-1 兩排數據對除
#取得開始時間
st = Sys.time();
#利用向量運算取得每日報酬率
re <- log(price[2:length(price)] / price[1:(length(price) -1)])
#re2 <- diff(log(price))
#取得結束時間
ed = Sys.time();
#計算執行時間
print(ed-st)
執行結果:
比較一下兩個方法的結果: 結果都是2413筆,值的部分也相符!
但執行時間可以看出向量運算效能較好!
方法 | 時間(秒) |
迴圈運算 | 0.25秒 |
向量運算 | 0.16秒(較快) |
4.來畫一下簡單的常態分配圖表:
利用plot來畫
plot(density.default(x = re))
qqnorm(re)
快速的看出常態分配的分佈,圖表就交給專業的來解釋(分析師),越來越期待在SQL Server 2016 跑R了。
小結:
投資有一定風險!股票投資有賺有賠! 申購前應詳閱散戶血淚說明書.