Относительный временной ряд - PullRequest
3 голосов
/ 22 августа 2010

Я ищу стандартизированный метод для размещения данных в относительном времени. Приложения включают в себя учетные данные, такие как 1-й финансовый год, 2-й финансовый год и т. Д. ... и экономические данные, такие как временная структура процентных ставок с использованием 1 года, 2 года, 3 года и т. Д. ...

Я хотел бы иметь возможность сравнить набор данных временных рядов, который является текущим, и несколько наборов исторических рядов, которые представляют аналогичные ситуации или исторические нормы. Я смотрел на xts, но, похоже, мне нужно использовать абсолютную временную привязку.

В конечном итоге я хотел бы использовать функции построения диаграмм или графики Quantmod с эквивалентными возможностями для визуализации данных. Поскольку chartSeries требует объект временного ряда, кто-нибудь знает, как это сделать? Даже точка в правильном направлении будет полезна. Спасибо.

require(quantmod)
symbols=c("DGS1","DGS2","DGS3","DGS5","DGS7","DGS10","DGS20")
getSymbols(symbols,src="FRED")
one.h=mean(na.omit(DGS1));two.h=mean(na.omit(DGS2));three.h=mean(na.omit(DGS3));five.h=mean(na.omit(DGS5));seven.h=mean(na.omit(DGS7));ten.h=mean(na.omit(DGS10));twenty.h=mean(na.omit(DGS20))
historic=c(one.h,two.h,three.h,five.h,seven.h,ten.h,twenty.h)
current=c(last(DGS1),last(DGS2),last(DGS3),last(DGS5),last(DGS7),last(DGS10),last(DGS20))
years=c(1,2,3,5,7,10,20)
plot(years,current,type="o",pch=20,ann=FALSE)
lines(years,historic,type="o",pch=20,col="red",lty=3)
title(main="Term Structure of Interest Rates",col.main="red", font.main=4)
title(xlab="Years to Maturity",ylab="Interest Rate",col.lab=rgb(0,0.5,0))
legend(3, c("Current","Historic"),cex=0.8,col=c("black","red"),pch=20)

Проблема: Я хотел бы иметь возможность выбрать период времени, например, сентябрь 2007 года, и получить каждую дневную кривую доходности для построения графика против текущей кривой доходности. Я уверен, что мог бы использовать несколько страниц первой и последней функций, но это было бы больше работы, чем создание ее в Excel.

1 Ответ

3 голосов
/ 24 августа 2010

xts требует явного индекса времени, но он основан на zoo, который не имеет такого требования. Таким образом, zoo позволит вам сделать что-то подобное, пока индекс упорядочен:

> x <- zoo(rnorm(5),sprintf("FY%02d",1:5))
> y <- zoo(rnorm(5),sprintf("FY%02d",1:5))
> merge(x,y)
               x           y
FY01  0.32707886 -1.81414982
FY02 -0.95177700  0.37772862
FY03 -0.03052571 -1.13047719
FY04  1.19139973  0.96962871
FY05 -0.76484142 -0.08187144

Недостатком является то, что вы не сможете использовать эти объекты с quantmod::chartSeries, потому что для этого требуется объект xts. Я сомневаюсь, что это отвечает на ваш вопрос, но я надеюсь, что это даст вам некоторые идеи.

РЕДАКТИРОВАТЬ, чтобы включить пример OP:

library(quantmod)
symbols=c("DGS1","DGS2","DGS3","DGS5","DGS7","DGS10","DGS20")
getSymbols(symbols,src="FRED")
all <- na.omit(merge(DGS1,DGS2,DGS3,DGS5,DGS7,DGS10,DGS20))

years <- c(1,2,3,5,7,10,20)
# use xts indexing, since getSymbols returns xts
histDate <- "2007-09-01/2007-09-10"
# create zoo objects for non-time-based indexing
hist <- zoo(t(all[histDate]), order.by=years)
curr <- zoo(t(last(all)), order.by=years)

currHist <- merge(curr,hist)
plotCol <- rainbow(NCOL(currHist))
plot(currHist, screens=1, col=plotCol, pch=20, type="o", ann=FALSE)
title(main="Term Structure of Interest Rates",col.main="red", font.main=4)
title(xlab="Years to Maturity",ylab="Interest Rate",col.lab=rgb(0,0.5,0))
legend(15,1.5,colnames(currHist),cex=0.8,col=plotCol,pch=20)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...