Как добавлять колонну переменной, из-за которой мы делаем groupby?

У меня есть рама данных о запасе ежедневно, с которого обращение получения Коэффициента Шарпа

> head(df)
        Date  .SXQR  .SXTR  .SXNR  .SXMR  .SXAR  .SX3R  .SX6R  .SXFR  .SXOR  .SXDR
1 2000-01-03 364.94 223.93 489.04 586.38 306.56 246.81 385.36 403.82 283.78 455.39
2 2000-01-04 345.04 218.90 474.05 566.15 301.13 239.24 374.64 390.41 275.93 434.92
3 2000-01-05 338.22 215.88 464.20 542.29 298.22 239.55 373.26 383.48 272.54 430.05
4 2000-01-06 343.13 218.18 470.82 529.33 300.69 249.75 377.26 383.48 272.47 434.15
5 2000-01-07 349.46 220.10 478.87 531.65 306.50 255.17 381.19 390.23 273.76 447.02
6 2000-01-10 356.20 223.01 484.07 581.82 310.84 252.75 387.74 393.75 278.76 453.80

Мне хотелось бы использовать функцию Ретурн.екссесс де Перформансеаналитикс, потом вычислять пропорцию Шарпа вручную. Уже у меня есть месячные возвраты:

percent_change2 <- function(x)last(x)/first(x) - 1
monthly_return <- df %>% 
  group_by(gr = floor_date(Date, unit = "month")) %>%
  summarize_at(vars(-Date, -gr), percent_change2) %>%
  ungroup() %>%
  select(-gr) %>% 
  as.matrix()  

Однако, когда мы прибываем в Коэффициент Шарпа используя:

portfolio_excess_returns <- Return.excess(portfolio_monthly_returns, 
                                          Rf = .0003)
sharpe_ratio_manual <- round(
  mean(portfolio_excess_returns) / StdDev(portfolio_excess_returns), 4
)

У меня есть следующая ошибка:

> portfolio_excess_returns <- Return.excess(monthly_return, 
+                                           Rf = .0003)
Error in checkData(R) : 
  The data cannot be converted into a time series.  If you are trying to pass in names from a data object with one column, you should use the form 'data[rows, columns, drop = FALSE]'.  Rownames should have standard date formats, such as '1985-03-15'.

Действительно, мои месячные возвраты оказываются такими: все числовое:

          .SXQR        .SXTR       .SXNR        .SXMR        .SXAR       .SX3R
[1,] -0.09048063 -0.070602420 -0.05688696  0.138527917 -0.079429802 -0.07370042
[2,] -0.02547240 -0.017752597  0.08995378  0.227683167 -0.007488398  0.02070630
[3,]  0.04344800  0.072023472 -0.04419912 -0.118953102  0.042191076  0.05908376
[4,]  0.07704088 -0.001580195  0.03846154 -0.009596822 -0.030854538  0.01882887
[5,] -0.02398056 -0.058094333 -0.05729563 -0.193718178 -0.034808588  0.02313015
[6,]  0.05252934  0.007013127 -0.04359662 -0.016661155 -0.051900140  0.02085395

Нет времени. Как я могу менять функцию, которая способствует тому, чтобы группа добавила время, которое он группирует?

0
задан 14.03.2019, 19:16
1 ответ

Здесь soluci¦n используя monthlyReturn и (s)lapply

library(quantmod)
portfolio_monthly_returns=lapply(xts(df[,-1],order.by = df$Date),monthlyReturn)

portfolio_excess_returns <- lapply(portfolio_monthly_returns,Return.excess, 
                                          Rf = .0003)
sharpe_ratio_manual <- function(portfolio_excess_returns){
  md=mean(portfolio_excess_returns)
  sd=StdDev(portfolio_excess_returns)
  is=round(
  mean(portfolio_excess_returns) / StdDev(portfolio_excess_returns), 4
  )
  c(MD=md,SD=sd,IS=is)}
sapply(portfolio_excess_returns,sharpe_ratio_manual)

Или результат serÃ: сходный в:

#> sapply(portfolio_excess_returns,sharpe_ratio_manual)
#         .SXQR       .SXTR       .SXNR        .SXMR       .SXAR       .SX3R
# MD 0.007662462 0.004811897 0.004427923 0.0009964127 0.008533315 0.007904365
# SD 0.044747675 0.051776959 0.055490708 0.0594352491 0.078777333 0.036180954
# IS 0.171200000 0.092900000 0.079800000 0.0168000000 0.108300000 0.218500000
0
ответ дан 19.11.2019, 22:09

Теги

Похожие вопросы