R中动物园对象的分位数和聚合

Eli*_*sas 3 aggregate r quantile

我有一个zoo对象看起来像

library(zoo)
library(lubridate)
TimeStamp=seq(dmy("01/01/2002"), dmy("17/12/2014"), by="day")
Dummy= rnorm(length(TimeStamp))
Temp=zoo(Dummy,TimeStamp)
Run Code Online (Sandbox Code Playgroud)

我正在尝试计算一年中每一天的 5%、33%、67% 和 95% 百分位数/分位数以创建“规范”。因此,对于 01/01,我希望根据我在数据集中对 1 月 1 日的所有观察结果获得 4 个分位数值。每天都做同样的事情。

现在我正在使用它:

aggregate(Temp ~ day(index(Temp)) + month(index(Temp)), FUN = 'quantile')
Run Code Online (Sandbox Code Playgroud)

问题是使用这个函数我不确定返回quantile函数的值是什么。

有什么建议吗?

42-*_*42- 5

您需要学习如何阅读帮助页面(并且您有时需要了解要查看哪个帮助页面,正如@GGrothendeick 刚刚指出的那样)。我可能(确实)认为第一页会起作用,但我错了:

 ?aggregate.zoo     # 
 ?aggregate.formula # fortunately, they are the same w.r.t the dots-arg
Run Code Online (Sandbox Code Playgroud)

帮助页面有一个用法部分:

## S3 method for class 'zoo'
aggregate(x, by, FUN = sum, ..., regular = NULL, frequency = NULL)
## S3 method for class 'formula'
aggregate(formula, data, FUN, ...,
          subset, na.action = na.omit)
Run Code Online (Sandbox Code Playgroud)

所以这...,会将任何参数传递给quantile函数。(页面上并不清楚输入字符名称是否可以接受,但是如果您没有收到错误,那么您已经对其进行了测试。分位数函数:

  ?quantile
Run Code Online (Sandbox Code Playgroud)

...有一个用法部分:

## Default S3 method:
quantile(x, probs = seq(0, 1, 0.25), na.rm = FALSE,
         names = TRUE, type = 7, ...)
Run Code Online (Sandbox Code Playgroud)

因此,您需要提供一个与您所需级别相匹配的“概率”参数,因为目前您正在获得默认级别:最小值、第 25 个百分位数、中位数、第 75 个百分位数和最大值。所以尝试:

aggregate(Temp ~ day(index(Temp)) + month(index(Temp)), 
          FUN = 'quantile', probs=c(5, 33, 67, 95)/100 )
Run Code Online (Sandbox Code Playgroud)

回想起来,您提供的公式会成功似乎有点编程奇迹:我认为我们将按照“动物园”帮助页面中的示例aggregate来使用它:

 str( aggregate(Temp,  time(Dummy), 
            FUN = 'quantile', probs=c(5, 33, 67, 95)/100 ) )

‘zoo’ series from 1 to 4734
  Data: num [1:4734, 1:4] 0.235 -1.435 -0.922 -0.542 -1.151 ...
 - attr(*, "dimnames")=List of 2
  ..$ : NULL
  ..$ : chr [1:4] "5%" "33%" "67%" "95%"
  Index:  num [1:4734] 1 2 3 4 5 6 7 8 9 10 ...
Run Code Online (Sandbox Code Playgroud)