设为首页 加入收藏

TOP

时间序列分析工具箱——tibbletime(四)
2019-08-15 00:10:04 】 浏览:282
Tags:时间序列 分析 工具箱 tibbletime
y_symbol( mapping = aes( x = date, y = adjusted, color = symbol)) + labs( title = "Periodicity Change from Daily to Monthly") + geom_point()

让我们提升一个档次。那么每两个月一次呢? 只需使用函数标记 2 m 即可。

# Convert from daily to bi-monthly periodicity
FANG_tbl_time_d %>%
    as_period(period = '2 m') %>%
    # Plotting
    ggplot_facet_by_symbol(
        mapping = aes(
            x = date, y = adjusted, color = symbol)) +
    labs(
        title = "Periodicity Change to Daily to Bi-Monthly",
        subtitle = "2~m") +
    geom_point()

让我们继续。那么每半年一次呢? 只需使用 6 m 即可。

# Convert from daily to bi-annually periodicity
FANG_tbl_time_d %>%
    as_period(period = '6 m') %>%
    # Plotting
    ggplot_facet_by_symbol(
        mapping = aes(
            x = date, y = adjusted, color = symbol)) +
    labs(
        title = "Periodicity Change to Daily to Bi-Annually",
        subtitle = "6~m") +
    geom_point()

函数标记几乎提供了无限可能,感兴趣的话可以查看 vignette on periodicity change with tibbletime

rollify

rollify() 函数是一个副词tidyverse 中的一种特殊类型的函数,用于修改另一个函数)。rollify() 的作用是将任何函数转换为自身的滚动版本。

# Rolling 60-day mean
roll_mean_60 <- rollify(
    mean, window = 60)

FANG_tbl_time_d %>%
    mutate(
        mean_60 = roll_mean_60(adjusted)) %>%
    select(-c(open:volume)) %>%
    # Plot
    ggplot_facet_by_symbol(
        mapping = aes(
            x = date, y = adjusted, color = symbol)) +
    geom_line(
        aes(y = mean_60),
        color = palette_light()[[6]]) +
    labs(
        title = "Rolling 60-Day Mean with rollify")

我们甚至可以做出更复杂的滚动功能,例如相关性。我们在 rollify() 中使用函数形式 .f = ~fun(.x,.y,...)

# Rolling correlation
roll_corr_60 <- rollify(
    ~ cor(.x, .y, use = "pairwise.complete.obs"),
    window = 60)

FANG_tbl_time_d %>%
    mutate(
        cor_60 = roll_corr_60(
            open, close)) %>%
    select(-c(open:adjusted)) %>%
    # Plot
    ggplot_facet_by_symbol(
        mapping = aes(
            x = date, y = cor_60, color = symbol)) +
    labs(
        title = "Rollify: 60-Day Rolling Correlation Between Open and Close Prices")

我们甚至可以返回多个结果。例如,我们可以创建滚动分位数。

首先,创建一个返回分位数的函数。

# Quantile tbl function
quantile_tbl <- function(x)
{
    q <- quantile(x)
    
    tibble(
        quantile_name  = names(q),
        quantile_value = q)
}

# Test the function
quantile_tbl(1:100)
## # A tibble: 5 x 2
##   quantile_name quantile_value
##           <chr>          <dbl>
## 1            0%           1.00
## 2           25%          25.75
## 3           50%          50.50
## 4           75%          75.25
## 5          100%         100.00

很好,它可以工作。接下来,使用 rollify 创建滚动版本。我们设置 unlist = FALSE 来返回列表列

# Rollified quantile function
roll_quantile_60 <- rollify(
    quantile_tbl, window = 60, unlist = FALSE)

接下来,在 mutate() 中应用滚动分位数函数来获得滚动分位数。确保你已经用 select()filter()unnest() 删除了不必要的列,过滤了 NA 值,并展开列表列。现在每个日期有五个分位数值。

# Apply rolling quantile 
FANG_quantile_60 <- FANG_tbl_time_d %>%
    mutate(
        rolling_quantile = roll_quantile_60(adjusted)) %>%
    select(-c(open:adjusted)) %>%
    filter(!is.na(rolling_quantile)) %>%
    unnest()

FANG_quantile_60
## # A time tibble: 13,940 x 4
## # Index:  date
## # Groups: symbol [4]
##    symbol       date quantile_name quantile_value
##  *  <chr>     <date>         <chr>          <dbl>
##  1     FB 2014-03-28            0%        53.5300
##  2     FB 2014-03-28           25%        57.8750
##  3     FB 2014-03-28           50%        64.2100
##  4     FB 2014-03-28           75%        68.6275
##  5     FB 2014-03-28          100%        72.0300
##  6     FB 2014-03-31            0%        53.5300
##  7     FB 2014-03-31           25%        57.9350
##  8     FB 2014-03-31           50%        64.2100
##  9     FB 2014-03-31           75%        68.6275
## 10     FB 2014-03-31          100%        72.0300
## # ... with 13,930 more rows

最后,画出结果。

FANG_quantile_60 %>%
    ggplot_facet_by_symbol(
        mapping = aes(
            x = date, y = qu
首页 上一页 1 2 3 4 下一页 尾页 4/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇R中的空间数据分析 下一篇R语言grid包just参数如何just图形..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目