首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R如何在hydroTSM和xts包下使用季节性的复杂函数?

R如何在hydroTSM和xts包下使用季节性的复杂函数?
EN

Stack Overflow用户
提问于 2018-02-06 22:32:39
回答 1查看 227关注 0票数 1

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

代码语言:javascript
复制
"January+February+March", 
"April+May+June", 
"July+August+Septembre",
"October+November+December" 

例如:

代码语言:javascript
复制
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])))

但为了我的学习,我想把我的季节划分为以下几个阶段:

代码语言:javascript
复制
"December+January+February", 
"March+April+May", 
"June+July+August", 
"Septembre+October+November"  

您能告诉我如何更改“季度”期间的订单月份吗?

我可以将hydroTSM包下的简单函数(meanmaxmin)与以下函数一起使用:

代码语言:javascript
复制
dm2seasonal(edhec_4yr, FUN=mean, season="DJF")

其中:

代码语言:javascript
复制
 DJF : December, January, February
 MAM : March, April, May
 JJA : June, July, August
 SON : September, October, November

但我不能将复杂函数(具有条件的均值)应用为以下函数:

代码语言:javascript
复制
dm2seasonal(edhec_4yr, season="DJF",
  function(x) apply(x,2, function(y) mean(y[y>0.002])))

你能告诉我如何改进这个函数以便计算平均值(当x > 0.02时)例如大疆吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-10 21:54:19

xts::endpoints()函数总是返回从原点(午夜,1970-01-01)开始的“标准”时间段内的最后一个观测值。所以它不能轻易地做你想要的事情。

您可以通过查找每个3个月窗口中上个月最后一天的观测值来计算您自己的周期终点。以下是对月度数据执行此操作的一种方法:

代码语言:javascript
复制
# .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()的端点。

代码语言:javascript
复制
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)

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48645411

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档