标签: zoo

滚动窗口在不规则的时间序列

我有一个不规则的时间序列事件(帖子)使用xts,我想计算在滚动的每周窗口(或每两周,或3天等)发生的事件的数量.数据如下所示:

                    postid
2010-08-04 22:28:07    867
2010-08-04 23:31:12    891
2010-08-04 23:58:05    901
2010-08-05 08:35:50    991
2010-08-05 13:28:02   1085
2010-08-05 14:14:47   1114
2010-08-05 14:21:46   1117
2010-08-05 15:46:24   1151
2010-08-05 16:25:29   1174
2010-08-05 23:19:29   1268
2010-08-06 12:15:42   1384
2010-08-06 15:22:06   1403
2010-08-07 10:25:49   1550
2010-08-07 18:58:16   1596
2010-08-07 21:15:44   1608
Run Code Online (Sandbox Code Playgroud)

应该产生类似的东西

                    nposts
2010-08-05 00:00:00     10
2010-08-06 00:00:00      9
2010-08-07 00:00:00      5
Run Code Online (Sandbox Code Playgroud)

为期2天的窗口.我已研究过rollapply,apply.rollingPerformanceAnalytics等,他们都承担一定的时间序列数据.我尝试将所有时间都改变到帖子发生的那一天,并使用类似于ddply每天分组的东西,这让我很接近.但是,用户可能不会每天发布,因此时间序列仍然是不规则的.我可以用0填补空白,但这可能会使我的数据大量膨胀,而且已经非常大了.

我该怎么办?

r time-series zoo xts

11
推荐指数
2
解决办法
2684
查看次数

R中前三个值的移动平均值

在动物园包中有一个名为rollmean的函数,它可以让你移动平均值.所述rollmean(x,3)将采取先前,当前和下一值(即4,6和2)在下面的表中.这显示在第二列中.

x   rollmean    ma3
4       
6   4.0 
2   4.3 
5   3.0         4.0
2   6.3         4.3
12  6.0         3.0
4   6.0         6.3
2               6.0
Run Code Online (Sandbox Code Playgroud)

我想完成相同的工作,但是通过平均排除第四行中的前三个值.这显示在第三列中.谁能告诉我有助于实现这一目标的功能名称?

r moving-average zoo

11
推荐指数
3
解决办法
2万
查看次数

R:在一个日期加1个月

我希望得到a startDate和之间的日期顺序endDate加1个月startDate.即,如果startDate是2013-01-31并且endDate是2013-07-31,我希望看到这样的日期:

"2013-01-31""2013-02-28""2013-03-31""2013-04-30""2013-05-31""2013-06-30""2013-07-31"

我试过了 seq.Date(as.Date("2013-01-31"),by="month",length.out=7).但是这段代码的输出是这样的

> seq.Date(as.Date("2013-01-31"),by="month",length.out=7)
[1] "2013-01-31" "2013-03-03" "2013-03-31" "2013-05-01" "2013-05-31" "2013-07-01" "2013-07-31"
Run Code Online (Sandbox Code Playgroud)

那么,获得正确输出的最简单的解决方案是什么?

r dataframe zoo xts r-rook-package

11
推荐指数
2
解决办法
8417
查看次数

仅按时间序列填写NA到有限的数量

有没有办法我们可以NA用一个有限数量的前锋填充一个zoo或一个xts对象NA.换句话说,NA最多连续3次填充s NA,然后将NAs从第4个值保持到有效数字.

像这样的东西.

library(zoo)
x <- zoo(1:20, Sys.Date() + 1:20)
x[c(2:4, 6:10, 13:18)] <- NA
x

2014-09-20 2014-09-21 2014-09-22 2014-09-23 2014-09-24 2014-09-25 2014-09-26 
         1         NA         NA         NA          5         NA         NA 
2014-09-27 2014-09-28 2014-09-29 2014-09-30 2014-10-01 2014-10-02 2014-10-03 
        NA         NA         NA         11         12         NA         NA 
2014-10-04 2014-10-05 2014-10-06 2014-10-07 2014-10-08 2014-10-09 
        NA         NA         NA         NA         19         20
Run Code Online (Sandbox Code Playgroud)

期望的输出,将是变量n = 3的东西

2014-09-20 2014-09-21 2014-09-22 2014-09-23 2014-09-24 2014-09-25 2014-09-26 
         1 …
Run Code Online (Sandbox Code Playgroud)

r time-series zoo xts

11
推荐指数
1
解决办法
1157
查看次数

是否可以使用步长大于 1 的 pandas.DataFrame.rolling ?

在 R 中,您可以使用指定的窗口计算滚动平均值,该窗口每次可以移动指定的量。

但是,也许我只是没有在任何地方找到它,但您似乎无法在 Pandas 或其他 Python 库中找到它?

有谁知道解决这个问题的方法?我会给你一个例子来说明我的意思:

例子

这里我们有双周数据,我正在计算两个月移动平均线,该移动平均线移动 1 个月,即 2 行。

所以在 RI 中会做类似的事情:two_month__movavg=rollapply(mydata,4,mean,by = 2,na.pad = FALSE) Python 中没有等价物吗?

编辑1:

DATE  A DEMAND   ...     AA DEMAND  A Price
    0  2006/01/01 00:30:00  8013.27833   ...     5657.67500    20.03
    1  2006/01/01 01:00:00  7726.89167   ...     5460.39500    18.66
    2  2006/01/01 01:30:00  7372.85833   ...     5766.02500    20.38
    3  2006/01/01 02:00:00  7071.83333   ...     5503.25167    18.59
    4  2006/01/01 02:30:00  6865.44000   ...     5214.01500    17.53
Run Code Online (Sandbox Code Playgroud)

python numpy r zoo pandas

11
推荐指数
4
解决办法
6528
查看次数

Rollapply为时间序列

我试图计算滚动的20期历史波动率.我拿每日回报:

ret<-ROC(data1)
Run Code Online (Sandbox Code Playgroud)

然后我使用rollapply为每列获得20天的HV:

vol<-rollapply(ret,20,sd,by.column=T,fill=NA)
Run Code Online (Sandbox Code Playgroud)

问题是vol中的观察开始在十天之后出现,这是我指定的错误20.

为了演示,这里有数据样本:

0.000000000, 0.005277045, 0.023622047, 0.002564103,-0.002557545, -0.020512821,
0.007853403,-0.012987013,  0.007894737,  0.015665796,  0.000000000, -0.002570694,
0.002577320, -0.015424165, 0.002610966,  0.010416667,  0.002577320,  0.015424165, 
0.000000000, -0.002531646, -0.002538071, 0.030534351,  0.014814815, -0.007299270,
-0.009803922, -0.012376238,  0.002506266, -0.015000000,-0.002538071,  0.002544529
Run Code Online (Sandbox Code Playgroud)

假设上面的数据存储在x中,然后:

rollapply(x,20,sd,fill=NA)
Run Code Online (Sandbox Code Playgroud)

将在第10行而不是20处产生第一次观察.此外,sd也是错误的.

我应该在这里遗漏一些东西......

r zoo

10
推荐指数
2
解决办法
2万
查看次数

R在zoo对象和数据框之间转换,结果对于不同数量的列不一致?

我在数据框和动物园对象之间切换很困难,特别是保留有意义的列名,以及单变量和多变量情况之间的不一致:

library(zoo)

#sample data, two species counts over time
t = as.Date(c("2012-01-01", "2012-01-02", "2012-01-03", "2012-01-04"))
n1 = c(4, 5, 9, 7)  #counts of Lepisma saccharina
n2 = c(2, 6, 0, 11) #counts of Thermobia domestica
df = data.frame(t, n1, n2)
colnames(df) <- c("Date", "Lepisma saccharina", "Thermobia domestica")

#converting to zoo loses column names in univariate case...
> z1 <- read.zoo(df[,1:2]) #time series for L. saccharina
> colnames(z1)
NULL
> colnames(z1) <- c("Lepisma saccharina") #can't even set column name manually
Error …
Run Code Online (Sandbox Code Playgroud)

r dataframe zoo

10
推荐指数
2
解决办法
1万
查看次数

使用rollapply计算滚动相关性

我有10000多行的动物园对象.

> head(tt)
                      A             B
2007-01-04  0.005945924  0.0021167475
2007-01-05 -0.004201991 -0.0080020024
2007-01-08  0.001740897  0.0045804104
2007-01-09  0.000000000 -0.0008163931
2007-01-10 -0.004503531  0.0032615812
2007-01-11 -0.005841138  0.0043863282
Run Code Online (Sandbox Code Playgroud)

我尝试了以下行的变体,但无济于事.

rollapply(tt, 21, function(x) cor(x[,1],x[,2]))
Run Code Online (Sandbox Code Playgroud)

每个条目都给出1的相关性,看起来它正在从相关矩阵的对角线上取下1.

2013-11-25  1  1
2013-11-26  1  1
2013-11-27  1  1
2013-11-29  1  1
2013-12-02  1  1
2013-12-03  1  1
Run Code Online (Sandbox Code Playgroud)

我真正想要的是-0.4649,如下所示

> cor(tt)
           A          B
A  1.0000000 -0.4649881
B -0.4649881  1.0000000
Run Code Online (Sandbox Code Playgroud)

r zoo

10
推荐指数
2
解决办法
1万
查看次数

na.locf将数据从数字转换为字符

    summary(DF)

>fx_code          date               fx_spot              fx_fwd         implied_fx_vol  
 AUD    : 171   Min.   :2000-01-31   Min.   :    0.394   Min.   :-320.000   Min.   : 1.000  
 BRL    : 171   1st Qu.:2003-07-31   1st Qu.:    1.623   1st Qu.:  -2.615   1st Qu.: 7.180  
 CAD    : 171   Median :2007-02-28   Median :    6.117   Median :   6.070   Median : 9.842  
 CHF    : 171   Mean   :2007-02-28   Mean   :  449.477   Mean   :  63.569   Mean   :10.656  
 CLP    : 171   3rd Qu.:2010-09-30   3rd Qu.:   43.475   3rd Qu.:  64.055   3rd Qu.:12.809  
 COP    : 171   Max.   :2014-03-31   Max.   :12360.000 …
Run Code Online (Sandbox Code Playgroud)

r plyr zoo

10
推荐指数
1
解决办法
2442
查看次数

rollapply与"成长"的窗口

伙计们,通常在你这样做的时候:

tmp = zoo(rnorm(100), 1:100)
rollapply(tmp, 10, function(x) quantile(x, 0.05), align="right")
Run Code Online (Sandbox Code Playgroud)

非常正确的rollapply是从10个元素可用的那一刻开始计算该值.

不幸的是,我需要的东西尽可能多地使用尽可能多的数据用于第10次观察,实际上是一个不断增长的数据窗口,直到有足够的数据来使用滑动窗口,例如1,1:2,1:3,1:4等直到我们至少有10个元素,然后像往常一样滑动窗口.

有没有比一个丑陋的for循环更好的方法呢?

r zoo

9
推荐指数
2
解决办法
1883
查看次数

标签 统计

r ×10

zoo ×10

xts ×3

dataframe ×2

time-series ×2

moving-average ×1

numpy ×1

pandas ×1

plyr ×1

python ×1

r-rook-package ×1