2018年11月19日月曜日

CLI - Composite Leading Indicator - OECD


REFER THIS ENTRY , INSTEAD.

# download csv from oecd(https://data.oecd.org/leadind/composite-leading-indicator-cli.htm) to "~/Downloads"
# use file name "CLI3.csv".
# this file contains multiple regions data. you have to specify its name.
# extract USA only entries
# execute commands below at "~/Download".
#
sed -n '/USA/p' CLI3.csv |awk -F, '{print $6"-01,"$7}'  |sed 's/\"//g' |awk 'BEGIN{print "DATE,DATA"}{print $0}' > usa.csv
# extract OECD entries and exclude OECDE
sed -n '/OECD[^E]/p' CLI3.csv |awk -F, '{print $6"-01,"$7}'  |sed 's/\"//g' |awk 'BEGIN{print "DATE,DATA"}{print $0}' > oecd.csv
#
#sample #1 for usa
#
cli_xts <- merge(as.xts(read.zoo(read.csv("~/Downloads/oecd.csv"))),as.xts(read.zoo(read.csv("~/Downloads/usa.csv"))),suffixes = c("oecd","usa"))

plot.default((cli_xts$usa["2014-07::2018-09"]   / as.vector(cli_xts$usa["2014-01::2018-03"])-1)*100,cli_xts$usa["2014-07::2018-09"])
tmp <- par('usr')
# plot.default((cli_xts$usa["2012-07::2018-09"] / as.vector(cli_xts$usa["2012-01::2018-02"])-1)*100,cli_xts$usa["2012-07::2018-09"] ,xlim=c( tmp[1],tmp[2]), ylim=c(tmp[3], tmp[4]))
plot.default((cli_xts$usa["2014-07::2018-09"] / as.vector(cli_xts$usa["2014-01::2018-03"])-1)*100,cli_xts$usa["2014-07::2018-09"] ,xlim=c( tmp[1],tmp[2]), ylim=c(tmp[3], tmp[4]))
par(new=T)
plot.default((cli_xts$usa["2018-01::2018-09"] / as.vector(cli_xts$usa["2017-07::2018-03"])-1)*100,cli_xts$usa["2018-01::2018-09"] ,xlim=c( tmp[1],tmp[2]), ylim=c(tmp[3], tmp[4]),col=2,lwd=2)
par(new=T)
plot.default((cli_xts$usa["2017-01::2017-12"] / as.vector(cli_xts$usa["2016-07::2017-06"])-1)*100,cli_xts$usa["2017-01::2017-12"], xlim=c( tmp[1],tmp[2]), ylim=c(tmp[3], tmp[4]),col=3)
par(new=T)
plot.default((cli_xts$usa["2016-01::2016-12"] / as.vector(cli_xts$usa["2015-07::2016-06"])-1)*100,cli_xts$usa["2016-01::2016-12"], xlim=c( tmp[1],tmp[2]), ylim=c(tmp[3], tmp[4]),col=4)

#sample #2 for oecd all
plot.default((cli_xts$oecd["2014-07::2018-09"]   / as.vector(cli_xts$oecd["2014-01::2018-03"])-1)*100,cli_xts$oecd["2014-07::2018-09"])
tmp <- par('usr')
# plot.default((cli_xts$oecd["2012-07::2018-09"] / as.vector(cli_xts$oecd["2012-01::2018-02"])-1)*100,cli_xts$oecd["2012-07::2018-09"] ,xlim=c( tmp[1],tmp[2]), ylim=c(tmp[3], tmp[4]))
plot.default((cli_xts$oecd["2014-07::2018-09"] / as.vector(cli_xts$oecd["2014-01::2018-03"])-1)*100,cli_xts$oecd["2014-07::2018-09"] ,xlim=c( tmp[1],tmp[2]), ylim=c(tmp[3], tmp[4]))
par(new=T)
plot.default((cli_xts$oecd["2018-01::2018-09"] / as.vector(cli_xts$oecd["2017-07::2018-03"])-1)*100,cli_xts$oecd["2018-01::2018-09"] ,xlim=c( tmp[1],tmp[2]), ylim=c(tmp[3], tmp[4]),col=2,lwd=2)
par(new=T)
plot.default((cli_xts$oecd["2017-01::2017-12"] / as.vector(cli_xts$oecd["2016-07::2017-06"])-1)*100,cli_xts$oecd["2017-01::2017-12"], xlim=c( tmp[1],tmp[2]), ylim=c(tmp[3], tmp[4]),col=3)
par(new=T)
plot.default((cli_xts$oecd["2016-01::2016-12"] / as.vector(cli_xts$oecd["2015-07::2016-06"])-1)*100,cli_xts$oecd["2016-01::2016-12"], xlim=c( tmp[1],tmp[2]), ylim=c(tmp[3], tmp[4]),col=4)
#
# sample #3 for oecd with the extended period.
#
#
#
plot.default((cli_xts$oecd["2014-07::2018-09"]   / as.vector(cli_xts$oecd["2014-01::2018-03"])-1)*100,cli_xts$oecd["2014-07::2018-09"])
tmp <- par('usr')
# plot.default((cli_xts$oecd["2012-07::2018-09"] / as.vector(cli_xts$oecd["2012-01::2018-02"])-1)*100,cli_xts$oecd["2012-07::2018-09"] ,xlim=c( tmp[1],tmp[2]), ylim=c(tmp[3], tmp[4]))
plot.default((cli_xts$oecd["2014-07::2018-09"] / as.vector(cli_xts$oecd["2014-01::2018-03"])-1)*100,cli_xts$oecd["2014-07::2018-09"] ,xlim=c( tmp[1],tmp[2]), ylim=c(tmp[3], tmp[4]),type='b')
par(new=T)
plot.default((cli_xts$oecd["2018-01::2018-09"] / as.vector(cli_xts$oecd["2017-07::2018-03"])-1)*100,cli_xts$oecd["2018-01::2018-09"] ,xlim=c( tmp[1],tmp[2]), ylim=c(tmp[3], tmp[4]),col=2,lwd=2)
par(new=T)
plot.default((cli_xts$oecd["2017-01::2017-12"] / as.vector(cli_xts$oecd["2016-07::2017-06"])-1)*100,cli_xts$oecd["2017-01::2017-12"], xlim=c( tmp[1],tmp[2]), ylim=c(tmp[3], tmp[4]),col=3)
par(new=T)
plot.default((cli_xts$oecd["2016-01::2016-12"] / as.vector(cli_xts$oecd["2015-07::2016-06"])-1)*100,cli_xts$oecd["2016-01::2016-12"], xlim=c( tmp[1],tmp[2]), ylim=c(tmp[3], tmp[4]),col=4)
par(new=T)
plot.default((cli_xts$oecd["2015-01::2015-12"] / as.vector(cli_xts$oecd["2014-07::2015-06"])-1)*100,cli_xts$oecd["2015-01::2015-12"], xlim=c( tmp[1],tmp[2]), ylim=c(tmp[3], tmp[4]),col=
5)
abli
ne(h=100)

abline(v=0)

The below is OECD.




2018年11月1日木曜日

Date Format Conversion mondate() index() format()





October 2018 was quite wild. Let us see the historical data on the other occasion. There were only 9 cases in 11 years, when the lowest price of the month is more than 11% lower than the open.

> to.monthly(GSPC)[,3]/to.monthly(GSPC)[,1][to.monthly(GSPC)[,3]/to.monthly(GSPC)[,1] < 0.89]
         GSPC.Low
 1 2008 0.8651744
 9 2008 0.8591352
10 2008 0.7213723
11 2008 0.7649871
 5 2010 0.8756500
 8 2011 0.8521960
 8 2015 0.8871556
 1 2016 0.8891620
10 2018 0.8897068

Use "as.mondate" to calculate one month after the examples.

> as.mondate(index(to.monthly(GSPC)[,3]/to.monthly(GSPC)[,1][to.monthly(GSPC)[,3]/to.monthly(GSPC)[,1] < 0.89])[-8])+1
mondate: timeunits="months"
[1] 2008-02-01 2008-10-02 2008-11-01 2008-12-02 2010-06-01 2011-09-01 2015-09-01 2018-11-01

use "format()" to normalize. "%Y-%m" should be the option.

> format(as.mondate(index(to.monthly(GSPC)[,3]/to.monthly(GSPC)[,1][to.monthly(GSPC)[,3]/to.monthly(GSPC)[,1] < 0.89])[-9])+1,"%y-%m")
[1] "08-02" "08-10" "08-11" "08-12" "10-06" "11-09" "15-09" "16-02"


> format(as.mondate(index(to.monthly(GSPC)[,3]/to.monthly(GSPC)[,1][to.monthly(GSPC)[,3]/to.monthly(GSPC)[,1] < 0.89])[-9])+1,"%Y-%m")
[1] "2008-02" "2008-10" "2008-11" "2008-12" "2010-06" "2011-09" "2015-09" "2016-02"

But index() returns yearmon calss and the direct coversion from yearmon to mondate triggers the warning message. If you don't like it, insert "as.Date()" between them.

警告メッセージ:
Attempting to convert class 'yearmon' to 'mondate' via 'as.Date' then 'as.numeric'. Check results!

> format(as.mondate(as.Date(index(to.monthly(GSPC)[,3]/to.monthly(GSPC)[,1][to.monthly(GSPC)[,3]/to.monthly(GSPC)[,1] < 0.89]) ))+1,"%Y-%m")[-9]
[1] "2008-02" "2008-10" "2008-11" "2008-12" "2010-06" "2011-09" "2015-09" "2016-02"

The result was disappointing. Hope, this month is exceptional.

> monthlyReturn(GSPC)[format(as.mondate(index(to.monthly(GSPC)[,3]/to.monthly(GSPC)[,1][to.monthly(GSPC)[,3]/to.monthly(GSPC)[,1] < 0.89])[-9])+1,"%Y-%m")]
           monthly.returns
2008-02-29    -0.034761193
2008-10-31    -0.169424524
2008-11-28    -0.074849043
2008-12-31     0.007821577
2010-06-30    -0.053882442
2011-09-30    -0.071761988
2015-09-30    -0.026442832
2016-02-29    -0.004128360

you can do the similar calculation for monthlyReturn().