如何在 R 中输入增长率和年度销售数据的滚动 window 标准差?
How can I input growth rates and the rolling window standard deviation of yearly sales data in R?
我有这个数据集,其中包括给定年份一家公司的所有销售额(公司代码 = gvkey,年份 = fyearq,销售额 = saley)。我想检查这些销售额的波动性,它被定义为销售额增长率 (x) 的十年滚动 windows 标准差的时间序列。为此,我还需要计算增长率。
从数学上讲,波动率的时间序列如下所示:
其中 "average x" 是 x 在 t-4 和 t+5 之间的平均值。
我如何在 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 编程的具体问题。与编程问题相比,其他人阅读这篇文章的好处很小可以应用于很多情况。
我有这个数据集,其中包括给定年份一家公司的所有销售额(公司代码 = gvkey,年份 = fyearq,销售额 = saley)。我想检查这些销售额的波动性,它被定义为销售额增长率 (x) 的十年滚动 windows 标准差的时间序列。为此,我还需要计算增长率。
从数学上讲,波动率的时间序列如下所示:
其中 "average x" 是 x 在 t-4 和 t+5 之间的平均值。
我如何在 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 编程的具体问题。与编程问题相比,其他人阅读这篇文章的好处很小可以应用于很多情况。