繁体   English   中英

每30天如何计算和plot的相关系数

[英]How to calculate and plot correlation coefficient every 30 days

我想每 30 天计算一次相关系数,然后 plot 作为一条线 plot。我的 data.table 是基于从 2018 年到今天的每日时间数据。 data.table 看起来像这样:

在此处输入图像描述

应该计算 prod1 和 prod2 列之间的相关性。

它的代码是什么样的? 30天只是一个例子,也可能是我想每100天计算一次相关系数,然后是plot。 plot 应该在 x 轴上显示时间数据,在 y 轴上显示相关系数。

试试这个解决方案。 我将使用一些虚拟数据。 来自zoo package 的 function rollapplyr()可用于您想要的内容,您可以在其中定义 window 的大小以进行关联。 这里的代码:

library(dplyr)
library(zoo)
library(ggplot2)
#Seed for randomness in dummy data
set.seed(123)
#Data
df <- data.frame(Date=seq(as.Date('2020-01-01'),by='1 day',length.out = 180),
                 Germany=rnorm(180,2,1),
                 WeeklyMeanSpot=rnorm(180,5,2))
#Compute correlation
#Correlation function
corf <- function(z) cor(z[,1],z[,2])
#Compute
df2 <- df %>%
  mutate(Cor = rollapplyr(cbind(Germany, WeeklyMeanSpot),
                          30, corf, by.column = FALSE, fill = NA))
#Plot
ggplot(df2,aes(x=Date,y=Cor,group=1))+
  geom_line()

output:

在此处输入图像描述

接下来是具有计算相关性的df2的 output:

          Date     Germany WeeklyMeanSpot          Cor
1   2020-01-01  1.19566840      3.6946726           NA
2   2020-01-02  0.94347435      6.6512156           NA
3   2020-01-03  0.96460422      6.4999068           NA
4   2020-01-04  0.81443965      5.4603047           NA
5   2020-01-05  1.49956049      8.3968345           NA
6   2020-01-06  1.47501129      5.6317127           NA
7   2020-01-07  1.69756704      1.2517788           NA
8   2020-01-08  2.47196813      6.2125895           NA
9   2020-01-09  1.75161605      6.7580369           NA
10  2020-01-10  3.25931803      2.8137961           NA
11  2020-01-11  2.35092096      4.5250905           NA
12  2020-01-12  2.86331855      4.0167231           NA
13  2020-01-13  1.52108869      6.2325693           NA
14  2020-01-14  0.81152078      4.5071424           NA
15  2020-01-15  1.73143363      6.8472478           NA
16  2020-01-16  1.91977894      3.5537041           NA
17  2020-01-17  1.87676431      6.2689551           NA
18  2020-01-18  1.90056019      7.6625696           NA
19  2020-01-19  1.16524602      6.8619390           NA
20  2020-01-20  3.85777954      8.2171442           NA
21  2020-01-21  1.50160298      4.4852652           NA
22  2020-01-22  0.72994539      3.7480259           NA
23  2020-01-23  1.06305629      4.3896943           NA
24  2020-01-24  2.53343924      4.6650263           NA
25  2020-01-25  0.38323689      6.9921718           NA
26  2020-01-26  1.68294336      7.3718035           NA
27  2020-01-27  1.58023632      3.2206476           NA
28  2020-01-28  1.81914418      5.0806198           NA
29  2020-01-29  2.80181121      3.7171291           NA
30  2020-01-30  1.24608210      5.1656254 -0.069328611
31  2020-01-31  2.17777470      9.6932622 -0.041998773
32  2020-02-01  2.20834285      4.4412259 -0.031939643
33  2020-02-02  2.80313722     -0.5411659 -0.126551727
34  2020-02-03  0.40491851      5.3073543 -0.120457790
35  2020-02-04  3.59958366      4.4275978 -0.118749657
36  2020-02-05  2.49927063      5.6215082 -0.108412518
37  2020-02-06  2.36761410      4.1901185 -0.143451075
38  2020-02-07  1.58946984      4.6777601 -0.151660231
39  2020-02-08  2.92735042      6.3879691 -0.118660216
40  2020-02-09  2.86451608      7.5402940 -0.014142570
41  2020-02-10  2.72215229      6.5314283  0.010730700
42  2020-02-11  2.27126555      3.0690963  0.020957694
43  2020-02-12  2.31410815     -0.5702206 -0.009844143
44  2020-02-13  2.75552375      4.8392687 -0.027487761
45  2020-02-14  1.81084036      7.4972097 -0.027565466
46  2020-02-15  2.37724269      4.6652200 -0.034667100
47  2020-02-16  1.59176705      2.6149900 -0.009356898
48  2020-02-17  1.73390789      2.8832420  0.009686187
49  2020-02-18  2.08626516      5.0319071  0.043278282
50  2020-02-19  1.80148730      4.4002390 -0.081224484
51  2020-02-20  2.56108773      1.9128418 -0.111529257
52  2020-02-21  2.44717246      6.4163411 -0.129383738
53  2020-02-22  1.73245612      2.3592017 -0.118695448
54  2020-02-23  1.68611598      5.9183319 -0.129440483
55  2020-02-24  1.38920248      5.4855287 -0.061359523
56  2020-02-25  2.11631857      7.2027532 -0.032894093
57  2020-02-26  1.19588499      4.9261229 -0.057696575
58  2020-02-27  1.79937433      3.7816037 -0.047373869
59  2020-02-28  2.33899698      4.2787117 -0.034553964
60  2020-02-29  2.33822137      6.2447491 -0.016695285
61  2020-03-01  1.29077058      3.3391708  0.005120906
62  2020-03-02  2.52296888      5.8291996  0.019002552
63  2020-03-03  1.64635472      5.2335154  0.122045846
64  2020-03-04  1.22192124      1.3847397  0.255058702
65  2020-03-05  2.79730323      3.0493643  0.250388765
66  2020-03-06  1.09454848      4.8693789  0.214052761
67  2020-03-07  1.03896452      5.6941608  0.171494681
68  2020-03-08  1.74266416      2.8415849  0.185865239
69  2020-03-09  2.41083638      5.6567791  0.153216529
70  2020-03-10  1.60495980      3.9097297  0.073893995
71  2020-03-11  3.08204424      5.9867381  0.077400278
72  2020-03-12  2.05235965      7.9561615  0.099486113
73  2020-03-13  3.25492035      4.1286298  0.147580143
74  2020-03-14  2.02207206      4.5089341  0.147214275
75  2020-03-15  3.11233886      2.4308661  0.073639439
76  2020-03-16  1.64179508      2.7206389  0.090696545
77  2020-03-17  3.93310396      7.5960730  0.223265766
78  2020-03-18  1.88740774      3.5307611  0.215280006
79  2020-03-19  2.83203023      5.5233247  0.229482931
80  2020-03-20  2.98156351      4.4886564  0.218710223
81  2020-03-21  3.04108648      4.3510577  0.250144487
82  2020-03-22  1.94415267      7.3240372  0.215852160
83  2020-03-23  2.17571710      5.6210955  0.196962431
84  2020-03-24  1.08907376      7.2746353  0.129827357
85  2020-03-25  0.46736629      6.2506416  0.075280966
86  2020-03-26  3.04382316      3.8902802  0.051033629
87  2020-03-27  3.26713772      2.0326508 -0.022771486
88  2020-03-28  1.25425759      4.1685972 -0.018611666
89  2020-03-29  1.78537906      4.5814061 -0.015141877
90  2020-03-30  0.55916826      6.3867915 -0.079959328
91  2020-03-31  3.03646229      7.9588403 -0.041039748
92  2020-04-01  2.18654230      3.3342883 -0.050067885
93  2020-04-02  1.98364701      7.1449628 -0.052829309
94  2020-04-03  0.87784007      8.2796654 -0.210683405
95  2020-04-04  3.21831762      1.4485581 -0.249303841
96  2020-04-05  1.79057989      5.5392876 -0.262353845
97  2020-04-06  2.31089465      3.7248119 -0.256082115
98  2020-04-07  1.89472095      4.6288934 -0.282282546
99  2020-04-08  3.09624860      4.7436530 -0.286120837
100 2020-04-09  1.75106130      2.8165431 -0.274227411
101 2020-04-10  1.49548872      3.6162198 -0.271835083
102 2020-04-11  3.29498591      6.0214158 -0.240059217
103 2020-04-12  2.15258515      5.2863815 -0.229939274
104 2020-04-13  1.68842563      2.2941041 -0.195512846
105 2020-04-14  0.92979959      3.6129904 -0.117033776
106 2020-04-15  2.56985846      6.3892148 -0.128667936
107 2020-04-16  1.51054432      7.0069700 -0.277398502
108 2020-04-17  2.25076461      0.3918448 -0.275443670
109 2020-04-18  1.73878714      5.5785622 -0.294250216
110 2020-04-19  2.26153230      6.3358410 -0.282754674
111 2020-04-20  3.43107897      1.9195776 -0.339707067
112 2020-04-21  2.39608484      6.0239955 -0.331781212
113 2020-04-22  1.52481529      4.0114004 -0.324084396
114 2020-04-23  3.78863274      4.5602722 -0.272620718
115 2020-04-24  1.94889006      6.0793982 -0.240532336
116 2020-04-25  1.26054150      7.4817879 -0.268735652
117 2020-04-26  4.07936526      5.3875341 -0.173697707
118 2020-04-27  2.37667279      7.2425724 -0.176916649
119 2020-04-28 -0.28948775      6.6484258 -0.228180064
120 2020-04-29  3.18482679      6.6674888 -0.165084799
121 2020-04-30  2.30542690      4.3040041 -0.223958480
122 2020-05-01  2.64462958      5.5283809 -0.220184800
123 2020-05-02  3.16372687      6.7292477 -0.177536333
124 2020-05-03  2.93533418      9.4057928 -0.034177715
125 2020-05-04  2.09798281      2.0753314  0.042028799
126 2020-05-05  2.76823535      5.8257415  0.053708351
127 2020-05-06  3.10826971      3.5786374  0.029750660
128 2020-05-07  1.61457004      2.5527381  0.057862907
129 2020-05-08  2.40305722      4.3785420  0.061111764
130 2020-05-09  1.72254121      7.2454087  0.015646994
131 2020-05-10  2.55731351      7.1460101  0.001279747
132 2020-05-11  1.80334653      6.7058641 -0.026780358
133 2020-05-12  1.91806736      4.4419938 -0.021189986
134 2020-05-13  2.66234636      2.5769939 -0.075241124
135 2020-05-14  1.63385336      7.0378847 -0.147585480
136 2020-05-15  2.59522443      6.0830823 -0.149085725
137 2020-05-16  1.18439450      5.2343399 -0.119715185
138 2020-05-17  1.09319397      7.8585397 -0.192218899
139 2020-05-18  0.57639316      5.5739832 -0.182888162
140 2020-05-19  2.35030333      1.0771646 -0.177972434
141 2020-05-20  2.15803757      2.7999814 -0.102354986
142 2020-05-21 -0.07277026      3.6667601 -0.028759350
143 2020-05-22  2.82160575      4.0788493 -0.057996081
144 2020-05-23  1.40711360      3.7210454 -0.016449436
145 2020-05-24  1.02022598      2.8656543  0.028624385
146 2020-05-25  2.16204124     10.7421682  0.064280682
147 2020-05-26  2.60690903      3.8405760  0.051142268
148 2020-05-27  1.33978888      3.3738355  0.058259625
149 2020-05-28  1.49997767      3.5574732  0.150644740
150 2020-05-29  1.50356134      5.3614688  0.113900956
151 2020-05-30  0.10573719      2.3644583  0.192329330
152 2020-05-31  1.49020770      6.8182643  0.170441249
153 2020-06-01  1.22237027      5.4754067  0.127232194
154 2020-06-02  2.73645899      7.2688418  0.077586823
155 2020-06-03  3.35740356      3.5303725  0.049992953
156 2020-06-04  2.01387953      8.0645219  0.044162424
157 2020-06-05  0.49527608      9.3677753 -0.022251816
158 2020-06-06  2.89302696      5.9954997 -0.012804587
159 2020-06-07  1.56870826      6.5999076 -0.006541896
160 2020-06-08  2.42222369      4.0573725 -0.020046142
161 2020-06-09  1.66013636      6.8790633 -0.051388421
162 2020-06-10  1.50189792      1.8699504 -0.038053991
163 2020-06-11  0.96986890      8.0014292 -0.071007772
164 2020-06-12  2.75003594      6.9345386  0.003553137
165 2020-06-13  1.41120282      2.6551424  0.018304975
166 2020-06-14  3.35648599      4.5510642 -0.012458258
167 2020-06-15  2.64145069      5.1257506 -0.011624235
168 2020-06-16  3.11170119      7.6395649  0.071641902
169 2020-06-17  1.11459462      5.7198230  0.075340442
170 2020-06-18  0.96105868      1.1754863  0.164378201
171 2020-06-19  2.98615773      4.5273782  0.163922599
172 2020-06-20  1.30131703      6.4458046  0.112625203
173 2020-06-21  1.15387132      4.6452171  0.142764013
174 2020-06-22  1.58012656     10.2545247  0.102730292
175 2020-06-23  2.27452047      4.3093313  0.059121441
176 2020-06-24  3.78758803      2.9486305 -0.043807907
177 2020-06-25  3.08603766      5.2541586 -0.028202974
178 2020-06-26  0.94733431      4.5851817 -0.035074437
179 2020-06-27  2.28741992      3.1251400 -0.061364354
180 2020-06-28  3.10617185      6.3849361 -0.042380000

如果我理解你,你只想提取几个月最后一天的相关性。 所以你可以使用下一个代码来提取这些值:

#Create dates for filter
i1 <- seq(as.Date("2020-01-01"), length=13, by="1 month") - 1
#Avoid day of 2019
i1 <- i1[-1]
#Filter
dfs <- df2[df2$Date %in% i1,]

Output:

          Date  Germany WeeklyMeanSpot        Cor
31  2020-01-31 2.426464       5.238490 0.06685690
60  2020-02-29 2.215942       3.436927 0.06675448
91  2020-03-31 2.993504       6.690026 0.06052142
121 2020-04-30 2.117647       3.569516 0.08070001
152 2020-05-31 2.769042       2.623132 0.22305907

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM