财政年度回报和每日回报的标准差

时间:2015-12-07 23:05:56

标签: r financial

我想计算大量公司的财政年度回报和每日回报的标准差。我对R来说相对较新,之前曾使用SAS来计算回报等。但是,我想在短期/中期切换到R.

我有两个文件:1)包含公司标识符,日期,每日报表(df.1)和2)我的样本(df.2),我希望汇总回报

firm      date        ret
   1   01/01/1992     0.024
   1   02/01/1992     0.010
   .        .           .
   .        .           .
   1   31/12/2014     0.002 
   2   01/01/1992     0.004
   2   02/01/1992     0.012

该文件非常大,约为1M行。

第二个文件看起来像这样:

firm  fiscal_year_start fiscal_year_end 
    1 01/01/1992        31/12/1992   
    1 01/01/1993        31/12/1993
    1 01/01/1994        31/12/1994

我想计算会计年度回报和年化标准差。两个.csv文件都作为数据帧加载到R中。我不确定如何最好地处理日期变量以及如何构造for循环以遍历每日返回文件。

非常感谢任何帮助。

EDIT1

我能够使用此函数对大数据框进行子集化:

myfunc <- function(x,y,z){df.1(df.1$date1 >= x & df.1$date1 < y & df.1$firm == firm1,]}          
firm1  <- df.2$firm[1]
start_date <- df.2$StartDate[1]
end_date  <- df.2$EndDate[1]
Test <- myfunc(start_date,end_date, firm1)

对于这个子集,我可以得到财政年度回报和std:

# return
fiscal_year_ret  <- with(Test, sum(Test$ret))

# annualized variance
var <- with(Test, var(Test$ret))
annualized_var  <- var*length(Test)
annualized_st.dev <- sqrt(annualized_var)

我的一大问题是将其嵌入循环中,这样我就可以在df.2中遍历不同的公司标识符和日期。

EDIT2

所以我有类似的东西

df.output <- data.frame(returns=as.numeric(),
             std.deviation=as.numeric(), 
             stringsAsFactors=FALSE) 

我想用结果填充上面的数据框。

for (i in sample) {
myfunc <- function(x,y,z){df.1[df.1$date1 >= x & df.1$date1 < y & df.1$firm == firm1,]}        
firm1  <- df.2$firm[i]
start_date <- df.2$StartDate[i]
end_date  <- df.2$EndDate[i]
subset <- myfunc(start_date,end_date, firm1) 

# return
fiscal_year_ret    <- with(subset, sum(subset$ret))
df.output$returns  <-fiscal_year_ret 
# variance
var <- with(subset, var(subset$ret))
annualized_var  <- var*length(subset)
annualized_st.dev <- sqrt(annualized_var)

}

这样的事情。

1 个答案:

答案 0 :(得分:0)

这是一种方式:

library(lubridate)

data %>%
  mutate(year =
           date %>%
           mdy %>%
           floor_date(unit = "year") )
  group_by(year) %>%
  summarize(
    mean_return = mean(ret),
    sd_return = sd(ret))