2016-04-18 2 views
0

Я пытаюсь выяснить общее процентное изменение всех 5 переменных с 2011 по 2015 год. Следующая функция даст мне процентное изменение по годам, но я нацелен на общий процент. Как можно переписать это в R?% изменение за несколько лет

pcchange=function(x,lag=1) c(diff(x,lag),rep(NA,lag))/x 



> ssample 
    year 100 100F 100I 100X 
1 2011 6632 6 472 11 
2 2012 6783 6 513 11 
3 2013 7346 7 672 6 
4 2014 8017 9 682 10 
5 2015 8996 3 815 11 
> dput(ssample) 
structure(list(year = c(2011, 2012, 2013, 2014, 2015), `100` = c(6632L, 
6783L, 7346L, 8017L, 8996L), `100F` = c(6L, 6L, 7L, 9L, 3L), 
    `100I` = c(472L, 513L, 672L, 682L, 815L), `100X` = c(11L, 
    11L, 6L, 10L, 11L)), class = "data.frame", .Names = c("year", 
"100", "100F", "100I", "100X"), row.names = c(NA, -5L)) 

ответ

0

Вот одна возможность для данных выборки:

totalChange <- sapply(ssample[ssample$year %in% range(ssample$year), -1], 
        function(x) pcchange(x))[1,] 
0

Держа это просто, попробуйте

subset(ssample, year == 2015, -1)/subset(ssample, year == 2011, -1) * 100 
0

Используя функцию ROC из quantmod пакета для простого расчета возврата

require(quantmod) 


apply(ssample[,-1],2,function(x) ROC(x,type="discrete")) 
#   100  100F  100I  100X 
#[1,]   NA   NA   NA   NA 
#[2,] 0.02276840 0.0000000 0.08686441 0.0000000 
#[3,] 0.08300162 0.1666667 0.30994152 -0.4545455 
#[4,] 0.09134223 0.2857143 0.01488095 0.6666667 
#[5,] 0.12211550 -0.6666667 0.19501466 0.1000000 

Как вы c см. процентное изменение в течение многих лет сильно варьируется. Я полагаю, что вам действительно нужно, это совокупные ежегодные темпы роста или CAGR то есть средняя доходность за период определяется как среднее геометрическое возвращений

annual.growth.rate <- function(a,period_length,m = 1){ 


    FinalValue <- tail(a,1) 
    InitialValue <- head(a,1) 
    cagr <- ((FinalValue/InitialValue)^(1/(period_length/m))) -1 

    return(cagr) 
} 

num_of_years <- tail(ssample$year,1)-head(ssample$year,1) 

apply(ssample[,-1],2,function(x) annual.growth.rate(a=x,period_length = num_of_years ,m = 1)) 
#  100  100F  100I  100X 
#0.07919825 -0.15910358 0.14631481 0.00000000 

пакеты, XTS, quantmod и PerformanceAnalytics приходят в очень удобный для анализа

временных рядов
Смежные вопросы