2010-08-22 3 views
3

Я ищу стандартизированный метод для организации данных в относительное время. Приложения включают данные бухгалтерского учета, такие как FY1, FY2 и т. Д. ... и экономические данные, такие как структура сроков процентных ставок с использованием 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.

+0

Я не уверен, что вы пытаетесь сделать. Не могли бы вы привести пример? –

+0

«относительное время» означает, что вы начинаете с, например, 1 января 1980 года t = 0? И каждый период после этого равен t + n? –

+0

Да. В идеальном случае масштаб будет переменным, так что «n» в «t + n» можно было бы назначить дням, годам, кварталам и т. Д. Пример учета был бы текущим фискальным кварталом = 0, следующий финансовый квартал = 1, чтобы сравнить различные показатели для компаний с разными финансовыми годами и создать стандартизованную основу для прогнозов. Еще одно приложение будет сравнивать кривые связей, где я мог бы сравнивать различные совокупности сроков погашения в разных точках истории или используя средние значения для каждой зрелости для подмножества исторических данных. – ProbablePattern

ответ

3

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 объекта. Я сомневаюсь, что это отвечает на ваш вопрос, но я надеюсь, что это даст вам некоторые идеи.

EDIT включить пример 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) 
+0

Спасибо. Я начинаю понимать, почему так мало людей в финансах не выходит за рамки Excel. – ProbablePattern

+0

Не обманывайте себя; это не только люди в области финансов. ;-) Кто-то, вероятно, мог бы предложить лучшее решение, если бы вы могли привести пример проблемы, которую вы пытаетесь решить. И поскольку 'chartSeries' не был разработан для типа проблемы, который у вас есть, попробуйте' plot.zoo (..., screens = 1) '. –

+0

Спасибо за пример. Надеюсь, мои правки помогут. –

Смежные вопросы