月度数据的3个月滚动窗口给JFM,FMA等到OND

时间:2017-02-02 12:45:15

标签: r

我目前有每月发生频率的数据,我想创建一个3个月的滚动窗口而不查找频率的平均值;因此,请说 1月12日 2月14日 3月10日

2月7日 3月5日 4月8日

等等到OND。我有1980年至2016年的数据。这个想法是多年来获得这些,所以我可以用一些气候指数做PCA。我将不胜感激任何帮助。

1 个答案:

答案 0 :(得分:0)

使用expand.grid我们创建所有可能的月份索引组合并过滤它们,以便它们符合JFM,FMA等。     然后,对于每个输入(JFM,FMA),我们为每个子集计算PCA并返回感兴趣的数据点。

已使用managers PerformanceAnalytics数据集中的时间序列数据进行此演示。

数据:

library("PerformanceAnalytics")

data(managers)

月份指数:

mthIndices=expand.grid(1:12,1:12,1:12)

#keep indices where month1 < month2 < month3
mthIndices = mthIndices[ (mthIndices$Var1 < mthIndices$Var2) & (mthIndices$Var2 < mthIndices$Var3), ]

#keep indices where   month2 - month1 = 1 month and month3 - month2 = 1 month
mthIndices = mthIndices[mthIndices$Var2- mthIndices$Var1==1 & mthIndices$Var3 - mthIndices$Var2==1,]
rownames(mthIndices) = NULL


mthIndices
#   Var1 Var2 Var3
#1     1    2    3
#2     2    3    4
#3     3    4    5
#4     4    5    6
#5     5    6    7
#6     6    7    8
#7     7    8    9
#8     8    9   10
#9     9   10   11
#10   10   11   12

<强> PCA:

#for each row of mthIndices i.e. JFM, FMA,..., OND

pcaDF = do.call(rbind,lapply(1:nrow(mthIndices),function(x) {

#monthly indices of data
dataIndices = month(as.Date(index(managers)))

#subset dataset for current scheme 
DF = managers[dataIndices %in% mthIndices[x,],]

#perform calculations
subDF = DF[complete.cases(DF),]

pcaObj = princomp(subDF)


#JFM,FMA names
monthNames = paste0(month.name[unlist(mthIndices[x,])],collapse=",")

#return dataset of interest i.e. loadings,sdev etc.
returnValue = data.frame(monthNames,t(pcaObj$center),stringsAsFactors=FALSE)

return(returnValue)

}))

<强>输出:

pcaDF

#                   monthNames         HAM1         HAM2          HAM3         HAM4         HAM5
#1      January,February,March  0.007713333  0.003893333  0.0082866667  0.006993333  0.009606667
#2        February,March,April  0.007480000 -0.001293333  0.0067266667  0.013273333  0.001713333
#3             March,April,May  0.008786667  0.003060000  0.0061933333  0.022533333  0.002406667
#4              April,May,June  0.008780000  0.001313333 -0.0003266667  0.017213333  0.003466667
#5               May,June,July  0.001673333  0.002913333 -0.0028600000  0.004600000 -0.005126667
#6            June,July,August  0.003200000  0.001266667 -0.0018600000 -0.002660000 -0.001426667
#7       July,August,September -0.003768750  0.002431250 -0.0005500000 -0.019675000  0.000862500
#8    August,September,October  0.006188235  0.001494118  0.0045352941 -0.005235294  0.001564706
#9  September,October,November  0.014194444  0.005900000  0.0109388889  0.021077778  0.004483333
#10  October,November,December  0.024327778  0.006222222  0.0122055556  0.047911111  0.006538889
#           HAM6 EDHEC.LS.EQ      SP500.TR     US.10Y.TR    US.3m.TR
#1  0.0148133333 0.007140000  0.0006703333 -0.0001306667 0.001709333
#2  0.0082466667 0.004173333  0.0020553333 -0.0013560000 0.001791333
#3  0.0060266667 0.003980000  0.0059673333  0.0002586667 0.001941333
#4  0.0008066667 0.002280000  0.0017626667  0.0057260000 0.001931333
#5  0.0002200000 0.000480000 -0.0016106667  0.0038946667 0.001976000
#6  0.0022933333 0.002140000 -0.0027520000  0.0073233333 0.002021333
#7  0.0031187500 0.001481250 -0.0100375000  0.0120693750 0.002271250
#8  0.0089352941 0.006135294  0.0049647059  0.0123805882 0.002295294
#9  0.0152000000 0.010594444  0.0156222222  0.0022616667 0.002325556
#10 0.0235166667 0.014944444  0.0270794444 -0.0017172222 0.002203333