日経225とSP500の週次での季節性を見る
最近、季節性の話を友達としてたので、week numbers別のreturnを色々とgraph化してみた。 対象は、日経225とSP500とする。データは、quantmodパッケージでUSのyahooから取得する。 以下のような関数を書いておいて週次ごとのreturnにしておく
library(quantmod)
## 週次return作成関数
get.nweek.return <- function(sym, syear = 2001, eyear = 2012) {
## 前年の終わりをstart日付にする
fday <- as.Date(paste(syear, "-01-01", sep = "")) - 3
org.data <- getSymbols(sym, from = fday, auto.assign = F)
data <- adjustOHLC(org.data, use.Adjusted = T)[, 4]
years <- format(range(index(data)), "%Y")
d0 <- to.weekly(data)[, 1]
d0 <- ROC(d0)[-1]
dt <- do.call(rbind, lapply(syear:eyear, function(year) {
tmp <- d0[as.character(year)]
ret <- coredata(tmp)
data.frame(year = year, nweek = 1:nrow(tmp), ret = ret)
}))
names(dt) <- c("year", "nweek", "ret")
dt
}
でもって、SP500,日経225を取得、週次に加工、一つのデータフレームにまとめる。(gggplotでの表示用に) データの期間は、2001~2012年
## sp500とnikkeiを取得してrbindする
syear = 2001
eyear = 2012
spx <- get.nweek.return("^GSPC", syear, eyear)
spx$idx <- "sp500"
nk <- get.nweek.return("^N225", syear, eyear)
nk$idx <- "n225"
df <- rbind(spx, nk)
グラフ化する。 まず平均をみて、次にboxplotでばらつきをみて、最後に年数を絞って(2010-2012)個別の週次returnをそのまま見る まず、平均。
library(ggplot2)
library(plyr)
df0 <- ddply(df, .(nweek, idx), summarise, ret = mean(ret))
ggplot(df0, aes(factor(nweek), ret)) + geom_bar(stat = "identity") + facet_grid(idx ~
.) + ggtitle(paste("average return by n-week", paste(syear, eyear, sep = "-")))
## Warning: Stacking not well defined when ymin != 0
## Warning: Stacking not well defined when ymin != 0
次にboxplotでばらつき
p <- ggplot(df, aes(factor(nweek), ret))
p + geom_boxplot() + facet_grid(idx ~ .) + ggtitle(paste("boxplot of return by n-week",
paste(syear, eyear, sep = "-")))
最後に個別の年のreturnを2010,2011,2012年で
df1 <- subset(df, year > 2009)
p1 <- ggplot(df1, aes(factor(nweek), ret, color = factor(year))) ## lineの時はgroup化, group=factor(year)))
p1 + geom_point() + facet_grid(idx ~ .) + ggtitle("return by n-week year(2010-2012)")