计算每月/每周级别的相关性

Posted

技术标签:

【中文标题】计算每月/每周级别的相关性【英文标题】:Calculate correlation on a monthly/weekly level 【发布时间】:2021-11-09 18:39:48 【问题描述】:

我在计算不同国家/地区每月/每周电价之间的相关系数时遇到问题。数据集 (https://github.com/Argiro1983/prices_df.git) 如下所示:

prices_df<-structure(list(DATETIME = structure(c(1609459200, 1609462800, 
1609466400, 1609470000, 1609473600, 1609477200, 1609480800, 1609484400, 
1609488000, 1609491600), class = c("POSIXct", "POSIXt"), tzone = "UTC"), 
    GR = c(50.87, 48.19, 44.68, 42.92, 40.39, 20.96, 39.63, 40.1, 
    20, 40.74), IT = c(50.87, 48.19, 44.68, 42.92, 40.39, 40.2, 
    39.63, 40.09, 41.27, 41.67), BG = c(49.95, 48.05, 49.62, 
    46.73, 45.39, 44.25, 36.34, 19.97, 20, 20.43), HU = c(45.54, 
    41.59, 40.05, 36.9, 34.47, 32.82, 27.7, 15, 8.43, 20.77), 
    TR = c(26.31, 24.06, 24.21, 23.2, 23.2, 26.31, 24.98, 26.31, 
    24.04, 26.31), SR = c(38.89, 34.86, 33.62, 28.25, 29.03, 
    29.22, 29.71, 1.08, 1.1, 36.07)), row.names = c(NA, 10L), class = "data.frame")

我已尝试将其转换为 xts 并按如下方式使用 apply.monthly(或 apply.weekly),但它不起作用。

library(xts)
SEE_prices <- xts(x = prices_df, order.by = DATETIME)
storage.mode(SEE_prices) <- "numeric"
SEE_prices <- na.locf(SEE_prices)


library(tidyverse)
library(tidyquant)
apply.monthly(SEE_prices, cor(SEE_prices$GR, SEE_prices$SR))
 

我尝试获得每周级别相关性的另一种方法是使用 dplyr 包,但它也不起作用:

library(lubridate)
library(magrittr)
library(dplyr)

prices_df %<>% mutate( DATETIME = ymd_hms(DATETIME) )
table1<- prices_df %>% group_by( year( DATETIME ), isoweek( DATETIME )  ) %>%
  summarise( DateCount = n_distinct(date(DATETIME)), correlation = cor(prices_df$GR, prices_df$SR))

有人知道如何计算数据集的每周/每月相关性吗? 提前谢谢你。

【问题讨论】:

【参考方案1】:

不要在dplyr 管道中使用$。计算相关性尝试 -

library(dplyr)
library(lubridate)

prices_df %>%
  mutate(DATETIME = ymd_hms(DATETIME),
         year = year(DATETIME), week = isoweek(DATETIME)) %>%
  group_by(year, week) %>%
  summarise(DateCount = n_distinct(date(DATETIME)), 
            correlation = cor(GR, SR), .groups = 'drop')

【讨论】:

不幸的是,这会计算整个时期的相关性,它确实会产生每周的相关系数。 你这是什么意思?您在样本中只有一个时期的数据。您能否添加 2-3 个周期的数据并显示其预期输出,以便我可以将输出与我的答案进行比较? 这是完整的数据集:github.com/Argiro1983/prices_df.git。当我运行你的代码时,它只返回整个时期的相关系数。 你是否加载了 plyr 来屏蔽 summarise 函数?尝试使用dplyr::summarise 而不是只使用summarise 成功了!非常感谢您的帮助。

以上是关于计算每月/每周级别的相关性的主要内容,如果未能解决你的问题,请参考以下文章

将每日股票价格变成每周/每月/每季度/学期/每年?

猫鼬日期比较没有时间和按createdAt和staffId分组,每周、每月和每年按聚合计算的员工总数?

c#中的每周贷款支付/摊销时间表计算逻辑

每月一书(202206): 《计算机网络》

如何在不同的时间尺度上计算 RMSE

python使用statsmodels包中的tsa.acf函数计算时间序列数据所有滞后位置个数(级别)的自相关性tsaplots函数可视化时间序列数据所有滞后位置个数(级别)的自相关性