几年来变化百分比

时间:2016-04-18 21:42:41

标签: r time-series

我想弄清楚从2011年到2015年所有5个变量的总变化百分比。以下函数将给出我按年变化的百分比,但我的目标是整体百分比。如何在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))

3 个答案:

答案 0 :(得分:0)

以下是样本数据的一种可能性:

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

答案 1 :(得分:0)

保持简单,试试

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

答案 2 :(得分:0)

使用quantmod包中的ROC函数进行简单的返回计算

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

正如您所看到的,这些年来百分比变化的差异很大。我认为你真正需要的是复合年增长率或复合年增长率,即在定义为回报的几何平均值的时期内的平均回报

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非常便于进行时间序列分析