sapply с данными Performance Analytics

У меня есть фрейм данных, состоящий из временных рядов возврата, который имеет следующие столбцы

date x1 x3 x8 x11

x.R - это мой фрейм данных, состоящий из возвратов

Я хотел бы использовать метод findDrawdowns в инструментах Performance Analytics и применять его к каждому временному ряду. Я хотел бы сохранить результат в списке, чтобы иметь доступ ко всем выводам findDrawdowns.

sapply(x.R,  sortDrawdowns(findDrawdowns))

Вышеупомянутая команда производит ниже. Не уверен, как я могу получить доступ к значениям. Любая помощь очень ценится!

             x1          x3         x8         x11      
return       Numeric,47 Numeric,47 Numeric,47 Numeric,49
from         Numeric,47 Numeric,47 Numeric,47 Numeric,49
trough       Numeric,47 Numeric,47 Numeric,47 Numeric,49 
to           Numeric,47 Numeric,47 Numeric,47 Numeric,49 
length       Numeric,47 Numeric,47 Numeric,47 Numeric,49 
peaktotrough Numeric,47 Numeric,47 Numeric,47 Numeric,49
recovery     Numeric,47 Numeric,47 Numeric,47 Numeric,49 

person qfd    schedule 20.12.2013    source источник
comment
Попробуйте установить simplify = TRUE в sapply(..., simplify = TRUE) или напрямую используйте lapply, чтобы получить список, или вы можете взглянуть на пакет plyr, чтобы получить подходящие форматы. Также постарайтесь улучшить свой вопрос, сделав его воспроизводимым.   -  person Jilber Urbina    schedule 20.12.2013


Ответы (1)


Вам нужен вложенный sapply, потому что sortDrawdowns возвращает ВСЕ ваши просадки, которые не могут отображаться в двух измерениях (т.е. каждая ячейка в приведенной выше таблице содержит все просадки. Вот решение с составленными данными:

# Make up data
len=29
data <- data.frame(
  x1=rnorm(len, 0, .05),
  x3=rnorm(len, 0, .05),
  x8=rnorm(len, 0, .05),
  x11=rnorm(len, 0, .05)
)    
rownames(data) <- as.character(as.Date("2013-12-01") - (len:1))

# Get worst drawdowns    
sapply(
  names(data),    # for each entry in df
  function(x) {   
    sapply(       # cycle through each item in a drawDown object
      sortDrawdowns(findDrawdowns(data[, x, drop=F])),  # get drawdows sorted
      `[[`, 1                                           # extract 1st item
    )
  } 
)
#                      x1         x3         x8        x11
# return       -0.1887651 -0.3425831 -0.1592202 -0.2928802
# from         17.0000000  5.0000000 16.0000000  1.0000000
# trough       20.0000000 24.0000000 27.0000000 16.0000000
# to           25.0000000 30.0000000 30.0000000 30.0000000
# length        9.0000000 26.0000000 15.0000000 30.0000000
# peaktotrough  4.0000000 20.0000000 12.0000000 16.0000000
# recovery      5.0000000  6.0000000  3.0000000 14.0000000
person BrodieG    schedule 20.12.2013