Как я могу ввести показатели роста и стандартное отклонение скользящего окна годовых данных о продажах в R? - PullRequest
0 голосов
/ 07 апреля 2019

У меня есть этот набор данных, который включает в себя все продажи для компании за данный год (балансовая единица = gvkey, year = fyearq, sales = saley).Я хочу исследовать волатильность этих продаж, которая определяется как временной ряд стандартных отклонений десятилетних скользящих окон темпов роста продаж (x).Мне также нужно рассчитать темпы роста, чтобы сделать это.

Математически временной ряд для волатильности будет выглядеть так:

time series forvolatility

где «среднее значение 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

1 Ответ

0 голосов
/ 07 апреля 2019

Вот функция, которая делает то, что вы хотите

# 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. Преимущество для тех, кто читает это, мало по сравнению с вопросами программирования, которые можно применять во многих ситуациях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...