R在hydroTSM和xts包装下,如何在季节期间使用复函数?

R在hydroTSM和xts包装下,如何在季节期间使用复函数?,r,statistics,time-series,apply,xts,R,Statistics,Time Series,Apply,Xts,我想计算参数值的季节平均值(当x>0.002时)。为此,我使用xts::period.apply()按季节分隔这些值。我在endpoints()中使用“季度”期间,但“季度”期间将一年分为四个季节,如下所示: "January+February+March", "April+May+June", "July+August+Septembre", "October+November+December" "December+January+February", "March+April+M

我想计算参数值的季节平均值(当
x>0.002
时)。为此,我使用
xts::period.apply()
按季节分隔这些值。我在
endpoints()
中使用“季度”期间,但“季度”期间将一年分为四个季节,如下所示:

"January+February+March", 
"April+May+June", 
"July+August+Septembre",
"October+November+December" 
"December+January+February", 
"March+April+May", 
"June+July+August", 
"Septembre+October+November"  
例如:

library(xts) 
library(PerformanceAnalytics)

data(edhec) 
head(edhec)

edhec_4yr <- edhec["1997/2001"] 
ep <- endpoints(edhec_4yr, "quarter")
# mean 
period.apply(edhec_4yr, INDEX = ep,
  function(x) apply(x,2, function(y) mean(y[y>0.002])))
您能帮我更改“季度”期间的订单月份吗

我可以使用hydroTSM软件包下的简单功能(
mean
max
min
)和以下功能:

dm2seasonal(edhec_4yr, FUN=mean, season="DJF")
dm2seasonal(edhec_4yr, season="DJF",
  function(x) apply(x,2, function(y) mean(y[y>0.002])))
其中:

 DJF : December, January, February
 MAM : March, April, May
 JJA : June, July, August
 SON : September, October, November
但我不能将复杂函数(带条件的平均值)应用为以下函数:

dm2seasonal(edhec_4yr, FUN=mean, season="DJF")
dm2seasonal(edhec_4yr, season="DJF",
  function(x) apply(x,2, function(y) mean(y[y>0.002])))
您能帮助我如何改进此函数以计算DJF的平均值(例如,当
x>0.02
)吗?

函数总是从原点(1970-01-01年午夜)开始返回“标准”期间的最后一次观测值。所以它不容易做你想做的事

您可以通过在每个3个月窗口中查找上个月最后一天的观察值来计算自己的周期结束点。这里有一种使用月度数据的方法:

# .indexmon() returns a zero-based month
ep <- which((.indexmon(edhec_4yr) + 1) %in% c(2, 5, 8, 11))
aggfn <- function(x, bound = 0.002, ...) {
  apply(x,2, function(y) mean(y[y > bound], ...))
}
period.apply(edhec_4yr, ep, aggfn)

我应该注意到,我正在考虑如何以更灵活的方式指定终点,我将确保包括一种指定季节的方法。

非常感谢毛奇·约书亚·乌尔里奇。非常感谢你给我带来的时间!感谢您提供这些详细的解决方案!真令人印象深刻!