我有一个大约100家公司的月度股票回报数据集。他们有不同的时间段,原因是他们上下股票交易所。
我按公司,年,月订购了我的数据集,我希望标准偏差能够解释这个问题,以便它在24个月后开始为公司开始,并在该公司的最后一次观察到期时结束。
这意味着命令必须能够区分公司,以便窗口不会转移到下一个公司。
我一直在尝试使用这个代码,但是当下一行包含一个新公司时它就会继续运行,即它只对整个数据集进行滚动标准偏差。
rolling_sd <- (rollapply(Dataset$RETURN, width=24,
FUN = sd, fill=NA, align = "right"))
此外,它与正确的日期不一致。如果我没有对齐命令,则第一行标准偏差应该是24行,使用&#34;右键和#34;它向下移动12,但仍未正确对齐。 如何将公司名称考虑在内?
答案 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"))