Преобразование данных во временные ряды

#r

#r

Вопрос:

У меня небольшая проблема, связанная с преобразованием данных во временные ряды. Вот шаги, которые я выполнил. Мои данные находятся в диапазоне с 21 января 2014 года по 28 февраля 2019 года и состоят из имен столбцов, цены и даты.

1. Я импортировал данные из Excel, используя read.csv().

 interest<-read.csv("C:/Users/Kane/interest.csv", stringsAsFactors=F, header=T)
  

длина данных = 1146

2. Были некоторые отсутствующие даты и значения. Я применил na_interpolation().

 library("imputeTS")
interest<-na_interpolation(interest$Price)
  

длина данных становится 1864

3. Я вычислил доходность, используя diff (log (процентная цена в долларах США))

 returns<-diff(log(interest$Price))
  

4. Я преобразовал результаты во временные ряды.

 return.ts<-ts(data=returns,frequency=365,start=c(2014,1), end=c(2019,2))
  

длина данных стала 1832.

Могу ли я получить объяснение, почему при преобразовании во временные ряды длина данных резко сократилась, и, пожалуйста, решение.

Образец моих данных:

 > interest
       Date    Price
1    2014-01-22 3.820000
2    2014-01-23 3.802857
3    2014-01-24 3.785714
4    2014-01-25 3.768571
5    2014-01-26 3.751429
6    2014-01-27 3.734286


> dput(head(interest))
structure(list(Date = structure(c(16092, 16093, 16094, 16095, 
16096, 16097), class = "Date"), Price = c(3.82, 3.80285714285714, 
3.78571428571429, 3.76857142857143, 3.75142857142857, 3.73428571428571
)), .Names = c("Date", "Price"), row.names = c(NA, 6L), class = "data.frame")
  

Результаты при преобразовании возвращаются в ts:

 > return1<-ts(Return,frequency=365,start=c(2014,1),end=c(2019,2))
> length(return1)
[1] 1827
> return<-ts(Return,frequency=365,start=c(2014,1),end=c(2018,11))
> length(return)
[1] 1471
> return<-ts(Return,frequency=365,start=c(2014,1),end=c(2018,12))
> length(return)
[1] 1472
  

Комментарии:

1. привет, пожалуйста, предоставьте небольшую выборку ваших данных, чтобы мы могли лучше понять вашу проблему. Лучший способ сделать это — опубликовать выходные данные dput(head(interest)) в вашем вопросе.

2. @Cettt Привет, я выполнил то, что вы сказали мне сделать, я отредактировал свой вопрос и включил выходные данные

3. На вашем шаге 1 длина данных interest равна 1146. После выполнения na.interpolation() вы говорите, что длина ваших данных становится 1864. Правильно ли это? Я полагаю, что эти длины данных относятся к длине определенного столбца, правильно?

4. @VictorMaxwell Да, это стало 1864 годом, поскольку отсутствовали даты. После того, как я добавил недостающую дату, я выполнил na.интерполяцию для цены.

Ответ №1:

Не уверен, о чем вы спрашиваете, но, возможно, это помогает. Я использовал ваши образцы данных, и очевидно, что вы ничего в них не пропустили, поэтому первый шаг следует пропустить (кроме того, вы не предоставили нам пакет na.interpolation ).

Однако здесь ваши данные:

        Date    Price
1 2014-01-22 3.820000
2 2014-01-23 3.802857
3 2014-01-24 3.785714
4 2014-01-25 3.768571
5 2014-01-26 3.751429
6 2014-01-27 3.734286
  

Теперь добавление diff функции приведет к тому, что в данных станет на одно наблюдение меньше:

 returns
[1] -0.004497759 -0.004518080 -0.004538586 -0.004559278 -0.004580161
  

Теперь вы можете применить ts функцию и добавить начало с первого дня, представляющего собой ежедневный временной ряд:

  ts(data=returns,frequency=365,start = decimal_date(as.Date("2014-01-22")))
Time Series:
Start = c(2014, 22) 
End = c(2014, 26) 
Frequency = 365 
[1] -0.004497759 -0.004518080 -0.004538586 -0.004559278 -0.004580161
  

Комментарии:

1. Большое вам спасибо. У меня это сработало действительно отлично.