как преобразовать под фрейм данных в временные ряды в R [дубликат]

Из-за проблемы с привязкой данных к CollectionContainer, как описано http://social.msdn.microsoft.com/Forums/vstudio/en-US/b15cbd9d-95aa-47c6-8068-7ae9f7dca88a/collectioncontainer -does-not-support-rootsource? forum = wpf Теперь я использую следующий подход:


  
    
    
  
  
    
      
      
    
  
  

Изменить: класс CompositeCollection не получается из FrameworkElement и, следовательно, не имеет свойства DataContext для поддержки привязки данных. Он будет работать, только если вы используете Binding, предоставляя Source. Посмотрите здесь https://stackoverflow.com/a/6446923/1254795 для получения дополнительной информации.

54
задан Joshua Ulrich 31 August 2012 в 03:32
поделиться

3 ответа

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

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

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
46
ответ дан Joshua Ulrich 19 August 2018 в 14:53
поделиться
  • 1
    для полного новичка: с помощью xts требуется сначала загрузить его библиотеку, require('xts') – Jealie 2 January 2015 в 22:39
  • 2
    @Jealie: в то время как true, OP спрашивал о создании объекта для использования с функцией PerformanceAnalytics. PerformanceAnalytics зависит от xts, поэтому xts, вероятно, уже были загружены. – Joshua Ulrich 29 April 2016 в 15:15

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

pricez <- read.zoo(text="   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
 ")
 index(pricez) <- as.Date(as.character(index(pricez)), format="%Y%m%d")
 pricez
2007-01-03 2007-01-04 2007-01-05 2007-01-08 2007-01-09 2007-01-10 2007-01-11 2007-01-12 2007-01-15 
     54.70      54.77      55.12      54.87      54.86      54.27      54.77      55.36      55.76 
13
ответ дан 42- 19 August 2018 в 14:53
поделиться
  • 1
    Также обратите внимание, что read.zoo может установить индекс. Этот вариант работает: read.zoo(PRICE, format = "%Y%m%d"), предполагая, что PRICE - это кадр данных (а не массив или матрица) с двумя числовыми столбцами, и этот тоже работает: read.zoo(text="...same.as.above...", header = TRUE, format = "%Y%m%d") – G. Grothendieck 5 January 2012 в 02:12
  • 2
    Очень приятно, что либо вы, и Ахим добавили принуждение as.character до as.Date. Первые несколько раз я получал NA, потому что as.Date (20070103, format = «% Y% m% d») не делает необходимого принуждения. Еще один пример из многих вещей, которые я в долгу перед тобой. – 42- 5 January 2012 в 02:20
  • 3
    Да это верно. Для этого вам нужна достаточно недавняя версия зоопарка. Версия на CRAN должна быть в порядке. – G. Grothendieck 5 January 2012 в 03:12

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

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
2
ответ дан Matt Dancho 19 August 2018 в 14:53
поделиться
Другие вопросы по тегам:

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