多个公司的滚动标准差,具有不同的时间段

时间:2018-04-16 12:55:39

标签: r moving-average standard-deviation

我有一个大约100家公司的月度股票回报数据集。他们有不同的时间段,原因是他们上下股票交易所。 我按公司,年,月订购了我的数据集,我希望标准偏差能够解释这个问题,以便它在24个月后开始为公司开始,并在该公司的最后一次观察到期时结束。
这意味着命令必须能够区分公司,以便窗口不会转移到下一个公司。

年,月,公司,返回

1990,1,Company 1,-0,005

1990,2,Company 1,0,003

等等......

1990,1,Company 2,...

1990,2,Company 2,...

等等......

2017年6月,公司50,......

我一直在尝试使用这个代码,但是当下一行包含一个新公司时它就会继续运行,即它只对整个数据集进行滚动标准偏差。

rolling_sd <- (rollapply(Dataset$RETURN, width=24, 
                                FUN = sd, fill=NA, align = "right"))

此外,它与正确的日期不一致。如果我没有对齐命令,则第一行标准偏差应该是24行,使用&#34;右键和#34;它向下移动12,但仍未正确对齐。 如何将公司名称考虑在内?

1 个答案:

答案 0 :(得分:0)

如果省略align="right"参数,sd值将按照问题中的讨论进行居中,但由于显示的代码确实使用了右对齐,因此sd值将从第24行开始。我怀疑你是在混淆运行没有align=参数。

使用末尾注释中显示的数据并更改24到3以便使用此较小的数据集进行演示,我们使用ave将滚动sd分别应用于每个公司。 r末尾的rollapplyr是指定align="right"的较短方式。右对齐时,第i行中显示的sd是以行i结尾的width行的sd,即行i-width + 1到i包含。

library(zoo)

roll <- function(x) rollapplyr(x, width = 3, FUN = sd, fill = NA)
transform(Dataset, sd = ave(RETURN, Company, FUN = roll))

,并提供:

   Year Month Company       RETURN         sd
1     1     1       A -0.042484496         NA
2     1     2       A  0.057661027         NA
3     1     3       A -0.018204616 0.05224021
4     1     4       A  0.076603481 0.05017135
5     2     1       A  0.088093457 0.05833792
6     2     2       A -0.090888700 0.10018338
7     2     3       A  0.005621098 0.08958278
8     2     4       A  0.078483809 0.08496093
9     1     1       B -0.042484496         NA
10    1     2       B  0.057661027         NA
11    1     3       B -0.018204616 0.05224021
12    1     4       B  0.076603481 0.05017135
13    2     1       B  0.088093457 0.05833792
14    2     2       B -0.090888700 0.10018338
15    2     3       B  0.005621098 0.08958278
16    2     4       B  0.078483809 0.08496093

注意

可重复形式的一些数据

set.seed(123)
tmp <- data.frame(Year = c(1, 1, 1, 1, 2, 2, 2, 2), Month = 1:4, Company = "A", 
  RETURN = runif(8, -.1, .1))
Dataset <- rbind(tmp, transform(tmp, Company = "B"))