Преобразовать фрейм данных со столбцом даты во временные ряды - PullRequest
56 голосов
/ 04 января 2012

У меня есть фрейм данных со следующими данными:

>PRICE
         DATE  CLOSE
1    20070103 54.700
2    20070104 54.770
3    20070105 55.120
4    20070108 54.870
5    20070109 54.860
6    20070110 54.270
7    20070111 54.770
8    20070112 55.360
9    20070115 55.760
...

Как вы можете видеть, мой столбец DATE представляет дату (yyyyMMdd), а мой столбец CLOSE представляет цены.

Теперь мне нужно вычислить CalmarRatio из пакета PerformanceAnalytics.

Я новичок в R, поэтому я не могу все понять, но из того, что я нашел в Google, пока вижучто параметр R для этой функции должен быть объектом, подобным временному ряду.

Можно ли каким-либо образом преобразовать мой массив в объект временного ряда, учитывая, что в каждой дате не может быть данныхпериод (только для тех, что я указал)?

Ответы [ 3 ]

49 голосов
/ 04 января 2012

Ваш столбец DATE может представлять дату, но на самом деле это либо символ, фактор, целое число или числовой вектор.

Сначала необходимо преобразовать столбец DATE в объект Date. Затем вы можете создать объект xts из столбцов CLOSE и DATE вашего PRICE data.frame. Наконец, вы можете использовать объект xts для расчета доходности и коэффициента Кальмара.

PRICE <- structure(list(
  DATE = c(20070103L, 20070104L, 20070105L, 20070108L, 20070109L,
           20070110L, 20070111L, 20070112L, 20070115L),
  CLOSE = c(54.7, 54.77, 55.12, 54.87, 54.86, 54.27, 54.77, 55.36, 55.76)),
  .Names = c("DATE", "CLOSE"), class = "data.frame",
  row.names = c("1", "2", "3", "4", "5", "6", "7", "8", "9"))

library(PerformanceAnalytics)  # loads/attaches xts
# Convert DATE to Date class
PRICE$DATE <- as.Date(as.character(PRICE$DATE),format="%Y%m%d")
# create xts object
x <- xts(PRICE$CLOSE,PRICE$DATE)
CalmarRatio(Return.calculate(x))
#                  [,1]
# Calmar Ratio 52.82026
15 голосов
/ 04 января 2012

Большинство людей находят работу с классом временных рядов большой болью.Вы должны рассмотреть возможность использования класса zoo из пакета zoo.Он не будет жаловаться на пропущенные времена, только на дубликаты.Функции PerformanceAnalytics почти наверняка будут ожидать «zoo» или его потомка класса «xts».

2 голосов
/ 03 марта 2017

Альтернативным решением является использование пакета tidyquant, который позволяет использовать функциональные возможности финансовых пакетов, в том числе функции временных рядов, для фреймов данных. В следующих примерах показано, как можно получить коэффициент Кальмара для нескольких активов. трикотажные виньетки подробно описывают, как использовать пакет.


library(tidyquant)
# Get prices
price_tbl <- c("FB", "AMZN", "NFLX", "GOOG") %>%
    tq_get(get  = "stock.prices",
           from = "2010-01-01",
           to   = "2016-12-31")
price_tbl
#> # A tibble: 6,449 × 8
#>    symbol       date  open  high   low close    volume adjusted
#>     <chr>     <date> <dbl> <dbl> <dbl> <dbl>     <dbl>    <dbl>
#> 1      FB 2012-05-18 42.05 45.00 38.00 38.23 573576400    38.23
#> 2      FB 2012-05-21 36.53 36.66 33.00 34.03 168192700    34.03
#> 3      FB 2012-05-22 32.61 33.59 30.94 31.00 101786600    31.00
#> 4      FB 2012-05-23 31.37 32.50 31.36 32.00  73600000    32.00
#> 5      FB 2012-05-24 32.95 33.21 31.77 33.03  50237200    33.03
#> 6      FB 2012-05-25 32.90 32.95 31.11 31.91  37149800    31.91
#> 7      FB 2012-05-29 31.48 31.69 28.65 28.84  78063400    28.84
#> 8      FB 2012-05-30 28.70 29.55 27.86 28.19  57267900    28.19
#> 9      FB 2012-05-31 28.55 29.67 26.83 29.60 111639200    29.60
#> 10     FB 2012-06-01 28.89 29.15 27.39 27.72  41855500    27.72
#> # ... with 6,439 more rows

# Convert to period returns
return_tbl <- price_tbl %>%
    group_by(symbol) %>%
    tq_transmute(ohlc_fun   = Ad, 
                 mutate_fun = periodReturn,
                 period     = "daily")
return_tbl
#> Source: local data frame [6,449 x 3]
#> Groups: symbol [4]
#> 
#>    symbol       date daily.returns
#>     <chr>     <date>         <dbl>
#> 1      FB 2012-05-18    0.00000000
#> 2      FB 2012-05-21   -0.10986139
#> 3      FB 2012-05-22   -0.08903906
#> 4      FB 2012-05-23    0.03225806
#> 5      FB 2012-05-24    0.03218747
#> 6      FB 2012-05-25   -0.03390854
#> 7      FB 2012-05-29   -0.09620809
#> 8      FB 2012-05-30   -0.02253811
#> 9      FB 2012-05-31    0.05001770
#> 10     FB 2012-06-01   -0.06351355
#> # ... with 6,439 more rows

# Calculate performance
return_tbl %>%
    tq_performance(Ra = daily.returns,
                   performance_fun = CalmarRatio)
#> Source: local data frame [4 x 2]
#> Groups: symbol [4]
#> 
#>   symbol CalmarRatio
#>    <chr>       <dbl>
#> 1     FB  0.50283172
#> 2   AMZN  0.91504597
#> 3   NFLX  0.14444744
#> 4   GOOG  0.05068483
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...