我想计算我的参数值的季节平均值(当为x > 0.002时)。为此,我使用xts::period.apply()来按季节分隔值。我在endpoints()中使用“季度”时段,但“季度”时段将一年分为以下四个季节:
"January+February+March",
"April+May+June",
"July+August+Septembre",
"October+November+December" 例如:
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])))但为了我的学习,我想把我的季节划分为以下几个阶段:
"December+January+February",
"March+April+May",
"June+July+August",
"Septembre+October+November" 您能告诉我如何更改“季度”期间的订单月份吗?
我可以将hydroTSM包下的简单函数(mean、max、min)与以下函数一起使用:
dm2seasonal(edhec_4yr, FUN=mean, season="DJF")其中:
DJF : December, January, February
MAM : March, April, May
JJA : June, July, August
SON : September, October, November但我不能将复杂函数(具有条件的均值)应用为以下函数:
dm2seasonal(edhec_4yr, season="DJF",
function(x) apply(x,2, function(y) mean(y[y>0.002])))你能告诉我如何改进这个函数以便计算平均值(当x > 0.02时)例如大疆吗?
发布于 2018-02-10 21:54:19
xts::endpoints()函数总是返回从原点(午夜,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)如果你有每日数据,你需要找到月经结束的每个月的最后一天。为此,您可以使用.indexmon()查找每个季节结束的所有月份,然后使用原始每日数据对象中所有这些观测值的位置构造一个xts对象。然后,您可以使用apply.monthly()和last()来提取每个季节结束月份最后一天的位置。生成的对象包含需要传递给period.apply()的端点。
data(prices)
prices <- as.xts(prices) # 'prices' is zoo; convert to xts
season_months <- (.indexmon(prices)+1) %in% c(2, 5, 8, 11)
ep_months <- xts(which(season_months), index(prices)[season_months])
ep_seasons <- as.numeric(apply.monthly(ep_months, last))
period.apply(prices, ep_seasons, aggfn)我应该注意到,我正在考虑如何以更灵活的方式指定端点,并且我将确保包括一种指定季节的方法。
https://stackoverflow.com/questions/48645411
复制相似问题