我想弄清楚从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))
答案 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非常便于进行时间序列分析