2014-11-08 2 views
2

Я новый пользователь R и постараюсь рассчитать еженедельно автокорреляция между 2 финансовыми временными рядами с функцией ccf.Автокорреляция с еженедельными данными

Вот мой код:

SPX_ImpliedVola_ts<-ts(SPX_ImpliedVola$x, start=c(2005), end=c(2014), freq=52) 
SPX_GSV_ts<-ts(SPX_GSV$x, start=c(2005), end=c(2014), freq=52) 
plot(ccf(SPX_ImpliedVola_ts,SPX_GSV_ts, type= "correlation")) 

Результаты функции CCF имеют смысл, но маркировка оси х неправильно. Мои лагом должны быть недели. Функция графика использует годы вместо этого, поэтому на лагом = 1/52. У меня недостаточно очков репутации, чтобы опубликовать график

Есть ли простой способ отформатировать ось x, так что 1 лаг = 1 неделя?

Вот мои данные для 2013 года:

SPX_GSV_ts

structure(c(-0.172545978, -0.085914629, -0.051152522, -0.191885526, 
0.10720997, 0.120573931, 0.123062732, -0.073231914, 0.122783425, 
-0.073231914, -0.091330136, -0.108595771, -0.149988456, -0.077412223, 
0.017728767, -0.057991947, -0.04522754, 0.098925304, 0.019744058, 
-0.042403849, 0.097955247, 0.060480747, -0.096910013, 0.04275198, 
-0.111150452, -0.123384909, 0.020203386, 0.02540458, 0.046743404, 
0.046743404, 0.096910013, -0.029289376, -0.020203386, 0.019305155, 
0.124938737, 0.071494417, 0.080655932, 0.032184683, -0.072195125, 
0.08058446, 0.109144469, -0.116215168, -0.003792989, -0.011685758, 
0.033281387, -0.011685758, 0.044203662, -0.137383556, -0.023912157, 
0.023065304, 0.037141808, -0.128799157, -0.036045104), .Tsp = c(2013, 
2014, 52), class = "ts") 

SPX_ImpliedVola_ts:

structure(c(0.1551244, 0.1764986, 0.169477, 0.1509566, 0.14180975, 
0.1455916, 0.1320918, 0.150884, 0.1519094, 0.1670364, 0.1769658, 
0.1491722, 0.14883, 0.13545475, 0.134158, 0.1292596, 0.13465, 
0.14380075, 0.136281, 0.1350982, 0.1384192, 0.1467728, 0.161534, 
0.14764, 0.1332734, 0.1353106, 0.126313, 0.1268324, 0.1200864, 
0.1242202, 0.127857, 0.1382412, 0.1319932, 0.1441192, 0.1316964, 
0.1217246, 0.1262966, 0.11574475, 0.1166192, 0.1231602, 0.119756, 
0.10622025, 0.1133376, 0.1245488, 0.1124368, 0.11566475, 0.1196388, 
0.1003482, 0.0994486, 0.0972232, 0.10798775, 0.1115012, 0.1148464 
), .Tsp = c(2013, 2014, 52), class = "ts") 
+0

ли вы предоставить воспроизводимый пример. Вы можете использовать 'dput' для подмножества ваших данных. – athraa

+0

Привет, @ Ахмед, спасибо за быстрый ответ. Я только что загрузил данные, используя функцию dput. – Alexander

ответ

0

Кажется, что ccf не печатает количество лагов правильно для ts класса. Вы должны изменить класс своих данных на data.frame, чтобы получить правильное количество задержек по оси x. Вы можете использовать следующий код:

ccf.results<-ccf(data.frame(SPX_ImpliedVola_ts),data.frame(SPX_GSV_ts), type= "correlation", ylab="Auto-correlation", main="Weekely Auto-corelations") 

Вы можете удалить type= "correlation", и вы все равно получите те же результаты, как по умолчанию type для ccf является correlation

Также сюжет у вас есть из последнего кода не дает доступа к конкретному значению каждого запаздывания. Для того, чтобы проверить значение каждого лаг необходимо присвоить ccf результаты имя переменной и тонкий Распечатайте его следующим образом:

ccf.results<-ccf(data.frame(SPX_ImpliedVola_ts),data.frame(SPX_GSV_ts), type= "correlation") 
print(ccf.results) 

Вы получите:

Autocorrelations of series ‘X’, by lag 

    -14 -13 -12 -11 -10  -9  -8  -7  -6  -5  -4  -3  -2  -1 
-0.010 0.076 0.011 -0.017 -0.031 -0.057 -0.037 0.059 0.067 0.033 0.105 0.000 -0.242 -0.181 
    0  1  2  3  4  5  6  7  8  9  10  11  12  13 
-0.189 -0.157 -0.079 0.041 0.080 -0.015 -0.098 -0.302 -0.303 -0.355 -0.323 -0.264 -0.222 -0.116 
    14 
-0.121 

Обратите внимание, что 0 в приведенных выше результатов означает, correlation без каких-либо задержек.

enter image description here

+0

Большое спасибо за объяснения! Код, который вы предоставили, отлично работает :) К сожалению, у меня недостаточно очков репутации, чтобы «проголосовать» за ваш ответ. Но как только я это сделаю, я проголосую за ваш ответ! – Alexander