我目前有每月发生频率的数据,我想创建一个3个月的滚动窗口而不查找频率的平均值;因此,请说 1月12日 2月14日 3月10日
2月7日 3月5日 4月8日
等等到OND。我有1980年至2016年的数据。这个想法是多年来获得这些,所以我可以用一些气候指数做PCA。我将不胜感激任何帮助。答案 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