我有这个数据集,其中包括给定年份公司的所有销售额(公司代码= gvkey,年份= fyearq,sales = saley)。我想检查这些销售的波动性,这被定义为销售增长率(x)的十年滚动窗口的标准差的时间序列。我还需要计算增长率才能做到这一点。
数学上,波动率的时间序列如下:
其中“平均x”是t-4和t + 5之间的x的平均值。
如何在R中输入?我怎样才能计算出我需要的增长率?
我正在使用的数据示例如下所示:
gvkey fyearq saley
1 1004 1978 26.669
2 1004 1979 32.563
3 1004 1980 30.454
4 1004 1981 41,766
5 1004 1982 40.465
6 1004 1983 40.475
7 1004 1984 52.723
8 1004 1985 53.386
9 1004 1986 66.376
10 1004 1987 74.543
11 1004 1988 90.007
12 1004 1989 108.635
13 1004 1990 116.092
这是一个正在做你想要的功能
# create data
n <- 100
saley <- rnorm(n, 100, 5)
gvkey <- factor(c(rep("A", n/2), rep("B", n/2)))
fyearq <- c(1980:(1980+n/2-1), 1992:(1992+n/2-1))
df <- data.frame(saley, gvkey, fyearq)
# function for growth ratea
growth_rate <- function(x){
out <- c(NA, x[2:length(x)]/ x[1:(length(x)-1)])
return(out)
}
# function for volatility
volatility <- function(x){
out <- rep(NA, length(x))
for(i in (1+4):(length(x)-5)){
out[i] <- sqrt((x[i] - mean(x[(i-4):(i+5)]))**2 /10)
}
return(out)
}
# apply function for growth rates
df$growth_rate <- do.call("c", by(df$saley, df$gvkey, growth_rate))
# applying function for volatility
df$volatility <- do.call("c", by(df$growth_rate, df$gvkey, volatility))
df
我试着回答这个问题,虽然对我来说这不是一个好问题,因为它要求一个完整的方法,而不是询问一些关于R编程的具体内容。其他人阅读本文的好处与编程问题相比很少。的情况。