2013年1月25日金曜日

Rで225とSP500の週次での季節性を見る

日経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

plot of chunk unnamed-chunk-3

次に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 = "-")))

plot of chunk unnamed-chunk-4

最後に個別の年の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)")

plot of chunk unnamed-chunk-5

0 件のコメント:

コメントを投稿